Class: Jackal::Github::Eventer
- Inherits:
-
Callback
- Object
- Callback
- Jackal::Github::Eventer
- Defined in:
- lib/jackal-github/eventer.rb
Overview
Process events
Instance Method Summary collapse
-
#allowed_events(payload) ⇒ Array, NilClass
Event types allowed to be dropped into pipeline.
-
#execute(message) ⇒ Object
Format payload based on event type recevied.
-
#filter(message, payload) { ... } ⇒ Object
Apply filters to payload.
-
#format_payload(message) ⇒ Smash
Format the github event to store within the payload.
-
#name_for_payload(event) ⇒ String
Provide payload name for given event.
-
#restricted_events(payload) ⇒ Array, NilClass
Event types restricted from being dropped into pipeline.
-
#valid?(message) ⇒ Truthy, Falsey
Validity of message.
Instance Method Details
#allowed_events(payload) ⇒ Array, NilClass
Event types allowed to be dropped into pipeline
59 60 61 62 63 64 65 |
# File 'lib/jackal-github/eventer.rb', line 59 def allowed_events(payload) a_events = config.fetch(:events, :allowed, []) a_events += payload.fetch(:data, :github, :query, {}).map do |k,v| k if v == 'enabled' end.compact a_events.empty? ? nil : a_events end |
#execute(message) ⇒ Object
Format payload based on event type recevied
21 22 23 24 25 26 27 28 29 |
# File 'lib/jackal-github/eventer.rb', line 21 def execute() failure_wrap() do |_| content = format_payload() payload = new_payload(name_for_payload(content), content) filter(, payload) do job_completed(:github, payload, ) end end end |
#filter(message, payload) { ... } ⇒ Object
Apply filters to payload. If filters are enabled and no filter matches, discard payload
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/jackal-github/eventer.rb', line 37 def filter(, payload) valid = true a_events = allowed_events(payload) r_events = restricted_events(payload) if(a_events && !a_events.include?(payload.get(:data, :github, :event))) valid = false end if(r_events && r_events.include?(payload.get(:data, :github, :event))) valid = false end if(valid) yield else warn "Message has been filtered and is restricted from entering pipeline (#{})" .confirm! end end |
#format_payload(message) ⇒ Smash
Format the github event to store within the payload
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/jackal-github/eventer.rb', line 83 def format_payload() content = Smash.new g_payload = [:message][:body] g_headers = [:message][:headers] || {} g_query = [:message][:query] || {} content[:github] = g_payload.merge( Smash.new( :event => g_headers[:x_github_event], :query => g_query, :headers => g_headers, :url_path => [:message][:request].path ) ) content end |
#name_for_payload(event) ⇒ String
Note:
defaults to ‘github`
Provide payload name for given event
104 105 106 107 108 |
# File 'lib/jackal-github/eventer.rb', line 104 def name_for_payload(event) config.fetch(:names, event, config.fetch(:names, :default, :github) ) end |
#restricted_events(payload) ⇒ Array, NilClass
Event types restricted from being dropped into pipeline
71 72 73 74 75 76 77 |
# File 'lib/jackal-github/eventer.rb', line 71 def restricted_events(payload) r_events = config.fetch(:events, :restricted, []) r_events += payload.fetch(:data, :github, :query, {}).map do |k,v| k if v == 'disabled' end.compact r_events.empty? ? nil : a_events end |
#valid?(message) ⇒ Truthy, Falsey
Validity of message
12 13 14 15 16 |
# File 'lib/jackal-github/eventer.rb', line 12 def valid?() super do |_| [:message].get(:headers, :x_github_event) end end |