class Jirify::Subcommands::Issues

Public Instance Methods

assignee(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 71
def assignee(issue_id)
  issue = get_issue_or_exit issue_id

  if issue.assignee.nil?
    say 'Unassigned'.yellow
  else
    say issue.assignee.displayName
  end
end
block(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 136
def block(issue_id)
  issue = get_issue_or_exit issue_id
  check_assigned_to_self issue

  issue.reopen! if issue.done?
  issue.stop_review! if issue.in_review?
  issue.block!
end
close(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 209
def close(issue_id)
  issue = get_issue_or_exit issue_id
  check_assigned_to_self issue

  issue.unblock! if issue.blocked?
  issue.close!
end
describe(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 48
def describe(issue_id)
  issue = get_issue_or_exit issue_id

  issue_renderer = UI::IssueRenderer.new(issue)

  options = {}

  options[:url] = true
  options[:summary] = true
  options[:assignee] = true
  begin
    say issue_renderer.as_card(options)
  rescue UI::WindowTooNarrow
    say ColorizedString['ERROR: Your terminal window is too narrow to print the sprint table!']
      .white.on_red.bold
  end
end
mine() click to toggle source
# File lib/jirify/cli/issue.rb, line 28
def mine
  statuses = build_issue_statuses(options)
  issues = Models::Issue.list_mine(statuses, options[:all])
  issues.each do |issue|
    if options[:key_only]
      say issue.key
    else
      say issue.to_s Config.always_verbose || options[:verbose]
    end
  end
end
open(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 42
def open(issue_id)
  get_issue_or_exit issue_id unless options[:force]
  Launchy.open("#{Config.issue_browse_url}#{issue_id}")
end
review(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 191
def review(issue_id)
  issue = get_issue_or_exit issue_id
  check_assigned_to_self issue

  if issue.blocked?
    issue.unblock!
    issue.start!
  elsif issue.todo?
    issue.start!
  elsif issue.done?
    issue.reopen!
    issue.start!
  end

  issue.start_review!
end
start(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 176
def start(issue_id)
  issue = get_issue_or_exit issue_id
  check_assigned_to_self issue

  issue.unblock! if issue.blocked?
  issue.reopen! if issue.done?

  if issue.in_review?
    issue.stop_review!
  else
    issue.start!
  end
end
status(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 107
def status(issue_id)
  issue = get_issue_or_exit issue_id

  say "Status: #{issue.status.name}"
end
take(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 95
def take(issue_id)
  issue = get_issue_or_exit issue_id

  say "Assigning #{issue.key} to #{Config.username}..."
  issue.assign_to_me!
end
todo(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 159
def todo(issue_id)
  issue = get_issue_or_exit issue_id
  check_assigned_to_self issue

  if issue.blocked?
    issue.unblock!
  elsif issue.in_progress?
    issue.stop!
  elsif issue.in_review?
    issue.stop_review!
    issue.stop!
  elsif issue.done?
    issue.reopen!
  end
end
transition(issue_id, transition_name) click to toggle source
# File lib/jirify/cli/issue.rb, line 122
def transition(issue_id, transition_name)
  issue = get_issue_or_exit issue_id
  transition = issue.transitions.find_by_name(transition_name)

  if transition.nil?
    say ColorizedString["  ERROR: Issue can't transition to #{transition_name}  "].white.on_red.bold
    exit(0)
  end

  say "Transitioning #{issue.key} with #{transition_name}...".green
  issue.transition! transition
end
transitions(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 114
def transitions(issue_id)
  issue = get_issue_or_exit issue_id

  say 'Available transitions:'
  issue.transitions.names.each { |name| say name }
end
unassign(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 82
def unassign(issue_id)
  issue = get_issue_or_exit issue_id

  if issue.assignee.nil?
    say 'Issue already unassigned'.yellow
    exit(0)
  end

  say "Previous assignee: #{issue.assignee.name}. Unassigning..."
  issue.unassign!
end
unblock(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 146
def unblock(issue_id)
  issue = get_issue_or_exit issue_id
  check_assigned_to_self issue

  if issue.blocked?
    say 'Unblocking issue...'
    issue.unblock!
  else
    say 'Issue wasn\'t blocked anyway :)'.green
  end
end

Protected Instance Methods

build_issue_statuses(options) click to toggle source
# File lib/jirify/cli/issue.rb, line 237
def build_issue_statuses(options) # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
  if options[:status]
    statuses = [options[:status]]
  else
    statuses = []
    statuses << Config.statuses['blocked']     if options[:blocked]
    statuses << Config.statuses['todo']        if options[:todo]
    statuses << Config.statuses['in_progress'] if options[:in_progress]
    statuses << Config.statuses['in_review']   if options[:in_review]
    statuses << Config.statuses['done']        if options[:closed]
  end

  statuses
end
check_assigned_to_self(issue) click to toggle source
# File lib/jirify/cli/issue.rb, line 230
def check_assigned_to_self(issue)
  return if issue.mine?

  exit(0) unless yes? 'WARNING! This issue is not assigned to you!'\
    ' Are you sure you want to continue? [Y/n]:'.yellow
end
get_issue_or_exit(issue_id) click to toggle source
# File lib/jirify/cli/issue.rb, line 219
def get_issue_or_exit(issue_id)
  issue = Models::Issue.find_by_id(issue_id)

  if issue.nil?
    say ColorizedString['ERROR: Issue not found'].white.on_red.bold
    exit(0)
  else
    issue
  end
end