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