class Jira::Command::New
Attributes
options[RW]
ticket[RW]
Public Class Methods
new(options)
click to toggle source
# File lib/jira/commands/new.rb, line 23 def initialize(options) self.options = options end
Public Instance Methods
run()
click to toggle source
# File lib/jira/commands/new.rb, line 27 def run return if metadata.empty? return if project.nil? || project.empty? return if project_metadata.empty? components # Select components if any after a project return if issue_type.nil? || issue_type.empty? return if assign_parent? && parent.empty? return if summary.empty? api.post 'issue', params: params, success: on_success, failure: on_failure end
Private Instance Methods
assign?()
click to toggle source
# File lib/jira/commands/new.rb, line 67 def assign? Command::Assign.new(ticket, options).run if !options['assignee'].nil? || io.yes?('Assign?') end
assign_parent?()
click to toggle source
# File lib/jira/commands/new.rb, line 122 def assign_parent? return false unless issue_type['subtask'] return false if options['parent'].nil? && io.no?('Set parent of subtask?') true end
components()
click to toggle source
# File lib/jira/commands/new.rb, line 104 def components @components ||= ( components = {} project_metadata['components'].each do |component| components[component['name']] = { 'id' => component['id'] } end unless components.empty? if options['components'].nil? components = io.multi_select("Select component(s):", components) else components.select! { |k| options['components'].include?(k) } components = components.values end end components.to_a ) end
description()
click to toggle source
# File lib/jira/commands/new.rb, line 152 def description @description ||= ( options['description'] || (io.ask("Description:", default: '') if options['summary'].nil?) || "" ) end
issue_type()
click to toggle source
# File lib/jira/commands/new.rb, line 132 def issue_type @issue_type ||= issue_types[ options['issuetype'] || io.select("Select an issue type:", issue_types.keys) ] end
issue_types()
click to toggle source
# File lib/jira/commands/new.rb, line 138 def issue_types @issue_types ||= ( issue_types = {} project['issues'].each do |issue_type| issue_types[issue_type['name']] = issue_type end issue_types ) end
metadata()
click to toggle source
# File lib/jira/commands/new.rb, line 75 def metadata # TODO: {} on 200 but jira error @metadata ||= api.get('issue/createmeta') end
on_failure()
click to toggle source
# File lib/jira/commands/new.rb, line 71 def on_failure ->{ puts "No ticket created." } end
on_success()
click to toggle source
# File lib/jira/commands/new.rb, line 59 def on_success ->(json) do self.ticket = json['key'] io.say("Ticket #{ticket} created.") assign? if options.empty? || !options['assignee'].nil? end end
params()
click to toggle source
# File lib/jira/commands/new.rb, line 46 def params { fields: { project: { id: project['id'] }, issuetype: { id: issue_type['id'] }, summary: summary, description: description, parent: @parent.nil? ? nil : { key: @parent }, components: @components.nil? ? nil : @components }.delete_if{|_,v| v.nil? || v.eql?([])} } end
parent()
click to toggle source
# File lib/jira/commands/new.rb, line 128 def parent @parent ||= options['parent'] || io.ask('Subtask parent:') end
project()
click to toggle source
# File lib/jira/commands/new.rb, line 80 def project @project ||= projects[ options['project'] || io.select("Select a project:", projects.keys) ] end
project_metadata()
click to toggle source
# File lib/jira/commands/new.rb, line 99 def project_metadata id = project['id'] @project_metadata ||= api.get("project/#{id}") end
projects()
click to toggle source
# File lib/jira/commands/new.rb, line 86 def projects @projects ||= ( projects = {} metadata['projects'].each do |project| projects[project['name']] = { 'id' => project['id'], 'issues' => project['issuetypes'] } end projects ) end
summary()
click to toggle source
# File lib/jira/commands/new.rb, line 148 def summary @summary ||= options['summary'] || io.ask("Summary:", default: '') end