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 68
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 135
def assign_parent?
  return false unless issue_type['subtask']
  return false if options['parent'].nil? && io.no?('Set parent of subtask?')
  true
end
checkout_branch?() click to toggle source
# File lib/jira/commands/new.rb, line 78
def checkout_branch?
  return false if io.no?("Check-out branch?")
  `git checkout #{ticket} 2> /dev/null`
  true
end
components() click to toggle source
# File lib/jira/commands/new.rb, line 117
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
create_branch?() click to toggle source
# File lib/jira/commands/new.rb, line 72
def create_branch?
  return false if io.no?("Create branch?")
  `git branch #{ticket} 2> /dev/null`
  true
end
description() click to toggle source
# File lib/jira/commands/new.rb, line 165
def description
  @description ||= (
    description = options['description'] || (io.ask("Description:", default: '') if options['summary'].nil?)
    description ||= ""
  )
end
issue_type() click to toggle source
# File lib/jira/commands/new.rb, line 145
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 151
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 88
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 84
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?
    create_branch? && checkout_branch? if options.empty?
  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? ? {} : { key: @parent },
      components:  @components.nil? ? [] : @components
    }
  }
end
parent() click to toggle source
# File lib/jira/commands/new.rb, line 141
def parent
  @parent ||= options['parent'] || io.ask('Subtask parent:', default: Jira::Core.ticket)
end
project() click to toggle source
# File lib/jira/commands/new.rb, line 93
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 112
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 99
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 161
def summary
  @summary ||= options['summary'] || io.ask("Summary:", default: '')
end