Module: RailsWebhookOutbox

Defined in:
lib/rails_webhook_outbox.rb,
lib/rails_webhook_outbox/engine.rb,
lib/rails_webhook_outbox/sender.rb,
lib/rails_webhook_outbox/testing.rb,
lib/rails_webhook_outbox/version.rb,
lib/rails_webhook_outbox/signature.rb,
lib/rails_webhook_outbox/dispatchable.rb,
lib/rails_webhook_outbox/configuration.rb,
lib/rails_webhook_outbox/delivery_error.rb,
app/models/rails_webhook_outbox/delivery.rb,
app/jobs/rails_webhook_outbox/delivery_job.rb,
lib/rails_webhook_outbox/payload_size_error.rb,
app/models/rails_webhook_outbox/subscription.rb,
app/jobs/rails_webhook_outbox/application_job.rb,
app/models/rails_webhook_outbox/application_record.rb,
app/mailers/rails_webhook_outbox/application_mailer.rb,
app/controllers/rails_webhook_outbox/application_controller.rb,
lib/generators/rails_webhook_outbox/install/install_generator.rb

Defined Under Namespace

Modules: Dispatchable, Generators, Signature, Testing Classes: ApplicationController, ApplicationJob, ApplicationMailer, ApplicationRecord, Configuration, Delivery, DeliveryError, DeliveryJob, Engine, PayloadSizeError, Sender, Subscription

Constant Summary collapse

VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.configurationObject Also known as: config



13
14
15
# File 'lib/rails_webhook_outbox.rb', line 13

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



19
20
21
# File 'lib/rails_webhook_outbox.rb', line 19

def configure
  yield(configuration)
end

.dispatch(event, payload) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/rails_webhook_outbox.rb', line 43

def dispatch(event, payload)
  validate_event!(event)
  validate_payload_size!(payload)

  if config.test_mode
    Testing.deliveries << { event: event.to_s, payload: payload }
    return
  end

  Subscription.active.each do |subscription|
    next unless subscription.subscribes_to?(event)

    delivery = Delivery.create!(
      subscription: subscription,
      event: event,
      payload: payload
    )

    DeliveryJob.perform_later(delivery)
  end
end

.reset_configuration!Object



23
24
25
# File 'lib/rails_webhook_outbox.rb', line 23

def reset_configuration!
  @configuration = Configuration.new
end

.validate_event!(event) ⇒ Object

Raises:

  • (ArgumentError)


27
28
29
30
31
32
33
# File 'lib/rails_webhook_outbox.rb', line 27

def validate_event!(event)
  registered = config.events
  return if registered.empty?
  return if registered.include?(event.to_s)

  raise ArgumentError, "Unknown event #{event.inspect}. Registered events: #{registered.join(", ")}"
end

.validate_payload_size!(payload) ⇒ Object

Raises:



35
36
37
38
39
40
41
# File 'lib/rails_webhook_outbox.rb', line 35

def validate_payload_size!(payload)
  max = config.max_payload_size
  return unless max && max > 0

  size = JSON.generate(payload).bytesize
  raise PayloadSizeError.new(size, max) if size > max
end