class GHI::Commands::Open

Attributes

editor[RW]
web[RW]

Public Instance Methods

execute() click to toggle source
# File lib/ghi/commands/open.rb, line 52
def execute
  require_repo
  self.action = 'create'

  options.parse! args

  if GHI.config('ghi.infer-issue') != 'false' && extract_issue
    Edit.execute args.push('-so', issue, '--', repo)
    exit
  end

  case action
  when 'index'
    if assigns.key? :assignee
      args.unshift assigns[:assignee] if assigns[:assignee]
      args.unshift '-u'
    end
    args.unshift '-w' if web
    List.execute args.push('--', repo)
  when 'create'
    if web
      Web.new(repo).open 'issues/new'
    else
      unless args.empty?
        assigns[:title], assigns[:body] = args.join(' '), assigns[:title]
      end
      assigns[:title] = args.join ' ' unless args.empty?
      if assigns[:title].nil? || editor
        e = Editor.new 'GHI_ISSUE'
        message = e.gets format_editor(assigns)
        e.unlink "There's no issue?" if message.nil? || message.empty?
        assigns[:title], assigns[:body] = message.split(/\n+/, 2)
      end
      i = throb { api.post "/repos/#{repo}/issues", assigns }.body
      e.unlink if e
      puts format_issue(i)
      puts "Opened on #{repo}."
    end
  end
rescue Client::Error => e
  raise unless error = e.errors.first
  abort "%s %s %s %s." % [
    error['resource'],
    error['field'],
    [*error['value']].join(', '),
    error['code']
  ]
end
options() click to toggle source
# File lib/ghi/commands/open.rb, line 7
      def options
        OptionParser.new do |opts|
          opts.banner = <<EOF
usage: ghi open [options]
   or: ghi reopen [options] <issueno>
EOF
          opts.separator ''
          opts.on '-l', '--list', 'list open tickets' do
            self.action = 'index'
          end
          opts.on('-w', '--web') { self.web = true }
          opts.separator ''
          opts.separator 'Issue modification options'
          opts.on(
              '-m', '--message [<text>]', 'describe issue',
              "use line breaks to separate title from description"
          ) do |text|
            if text
              assigns[:title], assigns[:body] = text.split(/\n+/, 2)
            else
              self.editor = true
            end
          end
          opts.on(
            '-u', '--[no-]assign [<user>]', 'assign to specified user'
          ) do |assignee|
            assigns[:assignee] = assignee
          end
          opts.on '--claim', 'assign to yourself' do
            assigns[:assignee] = Authorization.username
          end
          opts.on(
            '-M', '--milestone <n>', 'associate with milestone'
          ) do |milestone|
            assigns[:milestone] = milestone
          end
          opts.on(
            '-L', '--label <labelname>...', Array, 'associate with label(s)'
          ) do |labels|
            (assigns[:labels] ||= []).concat labels
          end
          opts.separator ''
        end
      end