Class: Shipit::Hook
- Inherits:
-
Record
- Object
- ActiveRecord::Base
- Record
- Shipit::Hook
show all
- Defined in:
- app/models/shipit/hook.rb
Defined Under Namespace
Classes: DeliverySigner, DeliverySpec
Constant Summary
collapse
- DELIVERIES_LOG_SIZE =
500
- CONTENT_TYPES =
{
'json' => 'application/json',
'form' => 'application/x-www-form-urlencoded'
}.freeze
- EVENTS =
%w[
stack
review_stack
task
deploy
rollback
lock
commit_status
deployable_status
merge_status
merge
pull_request
].freeze
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Record
serializer_class
Class Method Details
.coerce_payload(payload) ⇒ Object
126
127
128
129
130
131
132
133
134
|
# File 'app/models/shipit/hook.rb', line 126
def coerce_payload(payload)
coerced_payload = payload.dup
payload.each do |key, value|
if serializer = ActiveModel::Serializer.serializer_for(value)
coerced_payload[key] = serializer.new(value)
end
end
coerced_payload.to_json
end
|
.deliver(event, stack_id, payload) ⇒ Object
115
116
117
118
119
|
# File 'app/models/shipit/hook.rb', line 115
def deliver(event, stack_id, payload)
for_stack(stack_id).listening_event(event).each do |hook|
hook.deliver!(event, payload)
end
end
|
.deliver_internal_hooks(event, stack, payload) ⇒ Object
109
110
111
112
113
|
# File 'app/models/shipit/hook.rb', line 109
def deliver_internal_hooks(event, stack, payload)
Shipit.internal_hook_receivers.each do |receiver|
receiver.deliver(event, stack, payload)
end
end
|
.emit(event, stack, payload) ⇒ Object
98
99
100
101
102
103
104
105
106
107
|
# File 'app/models/shipit/hook.rb', line 98
def emit(event, stack, payload)
raise "#{event} is not declared in Shipit::Hook::EVENTS" unless EVENTS.include?(event.to_s)
Shipit::EmitEventJob.perform_later(
event: event.to_s,
stack_id: stack&.id,
payload: coerce_payload(payload)
)
deliver_internal_hooks(event, stack, payload)
end
|
.listening_event(event) ⇒ Object
121
122
123
124
|
# File 'app/models/shipit/hook.rb', line 121
def listening_event(event)
event = event.to_s
all.to_a.select { |h| h.events.include?(event) }
end
|
Instance Method Details
#deliver!(event, payload) ⇒ Object
141
142
143
144
145
146
147
148
149
|
# File 'app/models/shipit/hook.rb', line 141
def deliver!(event, payload)
DeliverHookJob.perform_later(
event: event.to_s,
url: delivery_url,
content_type: CONTENT_TYPES[content_type],
payload: serialize_payload(payload),
secret:
)
end
|
#purge_old_deliveries!(keep: DELIVERIES_LOG_SIZE) ⇒ Object
151
152
153
154
|
# File 'app/models/shipit/hook.rb', line 151
def purge_old_deliveries!(keep: DELIVERIES_LOG_SIZE)
delivery_ids = deliveries.sent.order(id: :desc).offset(keep).limit(50).pluck(:id)
deliveries.where(id: delivery_ids).delete_all
end
|
#scoped? ⇒ Boolean
137
138
139
|
# File 'app/models/shipit/hook.rb', line 137
def scoped?
stack_id?
end
|