1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# frozen_string_literal: true
module API
module Helpers
module WebHooksHelpers
extend Grape::API::Helpers
params :requires_url do
requires :url, type: String, desc: "The URL to send the request to", documentation: { example: 'http://example.com/hook' }
end
params :optional_url do
optional :url, type: String, desc: "The URL to send the request to"
end
params :url_variables do
optional :url_variables, type: Array, desc: 'URL variables for interpolation' do
requires :key, type: String, desc: 'Name of the variable', documentation: { example: 'token' }
requires :value, type: String, desc: 'Value of the variable', documentation: { example: '123' }
end
end
def find_hook
hook_scope.find(params.delete(:hook_id))
end
def create_hook_params
hook_params = declared_params(include_missing: false)
url_variables = hook_params.delete(:url_variables)
if url_variables.present?
hook_params[:url_variables] = url_variables.to_h { [_1[:key], _1[:value]] }
end
hook_params
end
def update_hook(entity:)
hook = find_hook
update_params = update_hook_params(hook)
hook.assign_attributes(update_params)
save_hook(hook, entity)
end
def update_hook_params(hook)
update_params = declared_params(include_missing: false)
url_variables = update_params.delete(:url_variables) || []
url_variables = url_variables.to_h { [_1[:key], _1[:value]] }
update_params[:url_variables] = hook.url_variables.merge(url_variables) if url_variables.present?
error!('No parameters provided', :bad_request) if update_params.empty?
update_params
end
def save_hook(hook, entity)
if hook.save
present hook, with: entity
else
error!("Invalid url given", 422) if hook.errors[:url].present?
error!("Invalid branch filter given", 422) if hook.errors[:push_events_branch_filter].present?
render_validation_error!(hook, 422)
end
end
end
end
end
|