travis-api/lib/travis/github/services/set_hook.rb
Aakriti Gupta 65f1a29d86 Move travis-core files from /vendor to /lib.
- Re-factor
- Remove code for notifications
- Remove addons
- Remove travis-core gem.
- Ignore logs directory only
- Move core tests to spec/lib
2016-07-20 11:22:25 +02:00

68 lines
1.5 KiB
Ruby

require 'travis/github'
require 'travis/services/base'
module Travis
module Github
module Services
class SetHook < Travis::Services::Base
EVENTS = [:push, :pull_request, :issue_comment, :public, :member]
register :github_set_hook
def run
Github.authenticated(current_user) do
update
end
end
private
def repo
@repo ||= run_service(:find_repo, id: params[:id])
end
def active?
params[:active]
end
def hook
@hook ||= find || create
end
def update
GH.patch(hook_url, payload) unless hook['active'] == active?
end
def find
GH[hooks_url].detect { |hook| hook['name'] == 'travis' && hook['config']['domain'] == domain }
end
def create
GH.post(hooks_url, payload)
end
def payload
{
:name => 'travis',
:events => EVENTS,
:active => active?,
:config => { :user => current_user.login, :token => current_user.tokens.first.token, :domain => domain }
}
end
def hooks_url
"repos/#{repo.slug}/hooks"
end
def hook_url
hook['_links']['self']['href']
end
def domain
Travis.config.service_hook_url || ''
end
end
end
end
end