class GHRH::Command::Create

Public Instance Methods

execute() click to toggle source
# File lib/ghrh/command/create.rb, line 15
def execute
  raise "No repo specified (-r) or set (github.repo)" if not repo

  hook = GHRH::Config.hooks[name]

  # hook schema, build a hash for easy lookup name -> format
  schema = {}
  hook['schema'].each do |s|
    format, name = s
    schema[name] = format
  end

  default_events = hook['events']
  supported_events = hook['supported_events']

  # hook config that will be sent
  config = {}

  # make sure config settings given exist in the schema
  config_list.each do |arg|
    k,v = arg.split(/=/,2)
    raise "Invalid setting #{k} for hook #{name}" if not schema.include? k
    config[k]=v
  end

  # make sure events given are in supported events
  events_list = default_events
  if events
    events_list = events.split(/,/)
    events_list.each do |event|
      raise "Invalid event #{event} for hook #{name}" if not supported_events.include? event
    end
  end

  hook_input = {
    'name' => name,
    'events' => events_list,
    'config' => config,
    'active' => !no_active?,
  }.to_json

  resp = GHRH::Client.post("/repos/#{repo}/hooks", { :body => hook_input })

  puts "#{resp.code} #{resp.message}"
  pp "#{resp.body}" if $DEBUG
end