Class: Terjira::IssueCLI

Inherits:
BaseCLI
  • Object
show all
Defined in:
lib/terjira/issue_cli.rb

Constant Summary

Constants included from OptionSupportable

OptionSupportable::OPTION_TO_SELECTOR

Instance Method Summary collapse

Methods inherited from BaseCLI

banner, subcommand_prefix

Methods included from SprintPresenter

#colorize_sprint_state, #render_sprint_detail, #render_sprints_summary, #sort_sprint_by_state, #summarise_sprint

Methods included from BoardPresenter

#render_boards_summary

Methods included from ProjectPresenter

#redner_project_detail, #render_components_and_versions, #render_projects_summary

Methods included from IssuePresenter

#render_divided_issues_by_status, #render_issue_detail, #render_issues, #summarise_issue

Methods included from CommonPresenter

#formatted_date, #insert_new_line, #pastel, #render, #screen_width, #username_with_email

Methods included from OptionSupportable

included, #resource_store, #suggest_options

Instance Method Details

#assign(*keys) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/terjira/issue_cli.rb', line 97

def assign(*keys)
  issue = keys[0]
  assignee = keys[1]
  if assignee.nil?
    issue = client_class.find(issue)
    opts = suggest_options(required: [:assignee],
                           resouces: { issue: issue })
    assignee = opts[:assignee]
  end
  client_class.assign(issue, assignee)
  show(issue.key_value)
end

#comment(issue) ⇒ Object



85
86
87
88
89
# File 'lib/terjira/issue_cli.rb', line 85

def comment(issue)
  opts = suggest_options(required: [:comment])
  issue = client_class.write_comment(issue, opts[:comment])
  render_issue_detail(issue)
end

#edit(issue) ⇒ Object



75
76
77
78
79
80
81
# File 'lib/terjira/issue_cli.rb', line 75

def edit(issue)
  return if options.blank?
  issue = client_class.find(issue)
  opts = suggest_options(resources: { issue: issue })
  issue = client_class.update(issue, opts)
  render_issue_detail(issue)
end

#listObject



25
26
27
28
29
30
31
32
33
# File 'lib/terjira/issue_cli.rb', line 25

def list
  opts = suggest_options
  opts[:statusCategory] ||= %w(To\ Do In\ Progress) unless opts[:status]
  opts[:assignee] ||= current_username
  opts.delete(:assignee) if opts[:assignee] =~ /^all/i

  issues = client_class.all(opts)
  render_issues(issues)
end

#newObject



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/terjira/issue_cli.rb', line 60

def new
  opts = suggest_options(required: [:project, :summary, :issuetype])

  if opts[:issuetype].key_value.casecmp('epic').zero?
    epic_name_field = Client::Field.epic_name
    opts[epic_name_field.key] = write_epic_name
  end

  issue = client_class.create(opts)
  render_issue_detail(issue)
end

#show(issue_key = nil) ⇒ Object



16
17
18
19
20
# File 'lib/terjira/issue_cli.rb', line 16

def show(issue_key = nil)
  return invoke(:help) unless issue_key
  issue = client_class.find(issue_key)
  render_issue_detail(issue)
end

#take(issue) ⇒ Object



92
93
94
# File 'lib/terjira/issue_cli.rb', line 92

def take(issue)
  assign(issue, current_username)
end

#trans(*args) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/terjira/issue_cli.rb', line 37

def trans(*args)
  issue = args.shift
  raise 'must pass issue key or id' unless issue
  status = args.join(' ') if args.present?
  issue = client_class.find(issue, expand: 'transitions.fields')

  transitions = issue.transitions
  transition = transitions.find { |t| t.name.casecmp(status.to_s).zero? }

  resources = if transition
                { status: transition, issue: issue }
              else
                { statuses: transitions, issue: issue }
              end

  opts = suggest_options(required: [:status], resources: resources)
  issue = client_class.trans(issue, opts)
  render_issue_detail(issue)
end