Module: Legion::Trigger
- Defined in:
- lib/legion/trigger.rb,
lib/legion/trigger/envelope.rb,
lib/legion/trigger/sources/base.rb,
lib/legion/trigger/sources/slack.rb,
lib/legion/trigger/sources/github.rb,
lib/legion/trigger/sources/linear.rb
Defined Under Namespace
Modules: Sources Classes: Envelope
Constant Summary collapse
- SOURCES =
{ 'github' => Sources::Github, 'slack' => Sources::Slack, 'linear' => Sources::Linear }.freeze
Class Method Summary collapse
- .process(source_name:, headers:, body_raw:, body:) ⇒ Object
- .registered_sources ⇒ Object
- .source_for(name) ⇒ Object
Class Method Details
.process(source_name:, headers:, body_raw:, body:) ⇒ Object
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 |
# File 'lib/legion/trigger.rb', line 27 def process(source_name:, headers:, body_raw:, body:) adapter = source_for(source_name) secret = secret_for(source_name) verified = if secret adapter.verify_signature(headers: headers, body_raw: body_raw, secret: secret) else false end normalized = adapter.normalize(headers: headers, body: body) envelope = Envelope.new(**normalized, verified: verified) return { success: false, reason: :duplicate, delivery_id: envelope.delivery_id } if duplicate?(envelope) return { success: false, reason: :unverified } if !verified && require_verified?(source_name) bridge(envelope) mark_seen(envelope) { success: true, correlation_id: envelope.correlation_id, routing_key: envelope.routing_key } rescue ArgumentError => e { success: false, reason: :unknown_source, error: e. } rescue StandardError => e Legion::Logging.error "[Trigger] process failed: #{e.message}" if defined?(Legion::Logging) dead_letter(source_name, body_raw, e) { success: false, reason: :error, error: e. } end |
.registered_sources ⇒ Object
56 57 58 |
# File 'lib/legion/trigger.rb', line 56 def registered_sources SOURCES.keys end |
.source_for(name) ⇒ Object
20 21 22 23 24 25 |
# File 'lib/legion/trigger.rb', line 20 def source_for(name) klass = SOURCES[name.to_s] raise ArgumentError, "unknown trigger source: #{name} (available: #{SOURCES.keys.join(', ')})" unless klass klass.new end |