class Tutter

Modular sinatra app Tutter

Public Instance Methods

actions_for_event(event, config) click to toggle source

Return actions for event from config

# File lib/tutter.rb, line 41
def actions_for_event(event, config)
  config['actions'][event] || error(404,
                                    "No Actions for #{event} in tutter.conf"
                                   )
end
octokit_client(config) click to toggle source
# File lib/tutter.rb, line 47
def octokit_client(config)
  Octokit.configure do |c|
    c.api_endpoint = config['github_api_endpoint']
    c.web_endpoint = config['github_site']
    c.auto_paginate = config['github_api_auto_paginate'] or false
  end

  if config['access_token_env_var']
    access_token = ENV[config['access_token_env_var']] || ''
  else
    access_token = config['access_token'] || ''
  end

  Octokit::Client.new access_token: access_token
end
prepare_actions(project, event, data, config) { |create, a| ... } click to toggle source
# File lib/tutter.rb, line 63
def prepare_actions(project, event, data, config)
  client = octokit_client(config)
  actions_for_event(event, config).each do |a|
    yield Action.create(a,
                        config['action_settings'],
                        client,
                        project,
                        event,
                        data), a
  end
end
project_settings(project) click to toggle source

Return project settings from config

# File lib/tutter.rb, line 33
def project_settings(project)
  settings.config['projects'].each do |p|
    return p if p['name'] == project
  end
  error(404, 'Project does not exist in tutter.conf')
end
try_actions(event, data, project, config) click to toggle source
# File lib/tutter.rb, line 75
def try_actions(event, data, project, config)
  responses = { event: event, responses: {} }
  prepare_actions(project, event, data, config) do |action, name|
    status_code, message = action.run
    responses[:responses][name] = { status_code: status_code,
                                    message: message
                                  }
    break if status_code != 200
  end
  [responses[:responses].values.last[:status_code], responses.to_json]
end
verify_signature(payload_body, secret_token) click to toggle source
# File lib/tutter.rb, line 27
def verify_signature(payload_body, secret_token)
  signature = 'sha1=' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), secret_token, payload_body)
  return halt 500, "Signatures didn't match!" unless Rack::Utils.secure_compare(signature, request.env['HTTP_X_HUB_SIGNATURE'])
end