Class: Terjira::IssueCLI

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

Constant Summary

Constants included from IssuePresenter

Terjira::IssuePresenter::COMMENTS_SIZE

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

#comments_template, #issue_detail_template, #render_divided_issues_by_status, #render_issue_detail, #render_issues, #summarise_issue

Methods included from CommonPresenter

#dim_none, #formatted_date, #insert_new_line, #pastel, #render, #screen_width, #username

Methods included from OptionSupportable

included, #resource_store, #suggest_options, #suggest_related_value_options

Instance Method Details

#assign(*keys) ⇒ Object



133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/terjira/issue_cli.rb', line 133

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

#attach_file(issue, file) ⇒ Object



122
123
124
125
# File 'lib/terjira/issue_cli.rb', line 122

def attach_file(issue, file)
  issue = client_class.attach_file(issue, file)
  render_issue_detail(issue)
end

#comment(issue) ⇒ Object



89
90
91
92
93
# File 'lib/terjira/issue_cli.rb', line 89

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

#delete(issue) ⇒ Object



82
83
84
85
# File 'lib/terjira/issue_cli.rb', line 82

def delete(issue)
  client_class.delete(issue)
  render("Deleted")
end

#edit(issue) ⇒ Object



71
72
73
74
75
76
77
78
79
# File 'lib/terjira/issue_cli.rb', line 71

def edit(issue)
  return puts "Pass options to be updated. Use 'jira issue help edit' for the options." if options.blank?
  issue = client_class.find(issue)
  opts = suggest_options(resources: { issue: issue })
  suggest_related_value_options(opts)

  issue = client_class.update(issue, opts)
  render_issue_detail(issue)
end

#edit_comment(issue, comment_id = '') ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/terjira/issue_cli.rb', line 99

def edit_comment(issue, comment_id = '')
  opts = suggest_options(
    resources: { issue: issue, comment_id: comment_id },
    required: [:editable_comment]
  )

  if opts['editable_comment'].present?
    selected_comment = opts['editable_comment']['selected_comment']
    new_content = opts['editable_comment']['new_content']

    issue = client_class.edit_comment(
      issue,
      selected_comment.id,
      new_content
    )
    render_issue_detail(issue)
  else
    render("You don't have any editable comment.")
  end
end

#jql(*query) ⇒ Object



51
52
53
54
# File 'lib/terjira/issue_cli.rb', line 51

def jql(*query)
  jql = query.join(" ")
  render_issues Client::Issue.jql(jql)
end

#listObject



38
39
40
41
42
43
44
45
# File 'lib/terjira/issue_cli.rb', line 38

def list
  opts = suggest_options
  opts[:statusCategory] ||= default_status_categories unless opts[:status]
  opts[:assignee] ||= current_username

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

#newObject



59
60
61
62
63
64
65
66
# File 'lib/terjira/issue_cli.rb', line 59

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

  suggest_related_value_options(opts)

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

#open(issue) ⇒ Object



26
27
28
# File 'lib/terjira/issue_cli.rb', line 26

def open(issue)
  open_url(issue_url(issue))
end

#search(*keys) ⇒ Object



147
148
149
150
# File 'lib/terjira/issue_cli.rb', line 147

def search(*keys)
  search_term = client_class.search(summary: keys[0])
  render_issues(search_term)
end

#show(issue = nil) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'lib/terjira/issue_cli.rb', line 14

def show(issue = nil)
  return invoke(:help) unless issue
  issue = client_class.find(issue)
  if issue.issuetype.name.casecmp('epic').zero?
    epic_issues = client_class.all_epic_issues(issue)
    render_issue_detail(issue, epic_issues)
  else
    render_issue_detail(issue)
  end
end

#take(issue) ⇒ Object



128
129
130
# File 'lib/terjira/issue_cli.rb', line 128

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

#trans(*args) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/terjira/issue_cli.rb', line 154

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

#url(issue) ⇒ Object



31
32
33
# File 'lib/terjira/issue_cli.rb', line 31

def url(issue)
  puts issue_url(issue)
end