Module: Rubyists::Linear::CLI::Projects

Included in:
Issue::List, WhatFor
Defined in:
lib/linear/cli/projects.rb

Overview

The Project module contains support for finding and selecting projects as part of a filter or query

Instance Method Summary collapse

Instance Method Details

#ask_for_projects(projects, search: true) ⇒ Object



9
10
11
12
13
14
# File 'lib/linear/cli/projects.rb', line 9

def ask_for_projects(projects, search: true)
  prompt.warn("No project found matching #{search}.") if search
  return projects.first if projects.size == 1

  prompt.select('Project:', projects.to_h { |p| [p.name, p] })
end

#project_for(project = nil, projects: Project.all) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/linear/cli/projects.rb', line 20

def project_for(project = nil, projects: Project.all)
  return nil if projects.empty?

  possibles = project ? project_scores(projects, project) : []
  return ask_for_projects(projects, search: project) if possibles.empty?

  first = possibles.first
  return first if first.match_score?(project) == 100

  selections = possibles + (projects - possibles)
  prompt.select('Project:', selections.to_h { |p| [p.name, p] }) if possibles.size.positive?
end

#project_scores(projects, search_term) ⇒ Object



16
17
18
# File 'lib/linear/cli/projects.rb', line 16

def project_scores(projects, search_term)
  projects.select { |p| p.match_score?(search_term).positive? }.sort_by { |p| p.match_score?(search_term) }
end