Native Pub/Sub in Rails with ActiveSupport::Notifications
If you want to use pub/sub design pattern inside your rails app, there's no need to add extra dependencies, you can use ActiveSupport::Notifications to do the job
Example:
class Order
# methods
def complete
update(complted_at: Time.zone.now, etc: 'some')
ActiveSupport::Notifications.instrument("order_completed", { number: order.number })
end
end
module Subscribers
class SendConfirmationEmail
def self.subscribe!
ActiveSupport::Notifications.subscribe("order_completed") do |_name, _start, _finish, _id, params|
order = Order.find_by number: params[:number]
OrderMailer.confirm_order(order).deliver_later
end
end
end
end
module Subscribers
class UpdateCustomerCRM
def self.subscribe!
ActiveSupport::Notifications.subscribe("order_completed") do |_name, _start, _finish, _id, params|
order = Order.find_by number: params[:number]
CrmIntegration.update_customer(order.customer.email, order.total_amount)
end
end
end
end
# etc