
- Re-factor - Remove code for notifications - Remove addons - Remove travis-core gem. - Ignore logs directory only - Move core tests to spec/lib
68 lines
1.5 KiB
Ruby
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
|