module Outbox::MessageTypes::ClassMethods
Constants
- DYNAMIC_MODULE_NAME
Public Instance Methods
message_types()
click to toggle source
Returns a hash of the registred message types, where the key is the name of the message type and the value is the message type class.
# File lib/outbox/message_types.rb, line 36 def message_types @message_types ||= {} end
register_message_type(name, message_type)
click to toggle source
Registers a message type for sending & creates accessors.
Message.register_message_type :telepathy, TelepathyMessage message = Message.new do telepathy do thought 'Hello world.' end end message.telepathy.thought #=> 'Hello world.'
Upon deliver the audience object will be checked for the registered message type.
message.deliver telepathy: 'Bob'
# File lib/outbox/message_types.rb, line 25 def register_message_type(name, message_type) message_types[name.to_sym] = message_type define_message_type_reader(name, message_type) define_message_type_writer(name) define_default_message_type_client_accessors(name, message_type) define_default_message_type_client_settings_accessors(name, message_type) define_message_type_defaults_accessors(name, message_type) end
Protected Instance Methods
define_default_message_type_client_accessors(name, message_type)
click to toggle source
# File lib/outbox/message_types.rb, line 68 def define_default_message_type_client_accessors(name, message_type) define_singleton_method "default_#{name}_client" do |*args| message_type.default_client(*args) end define_singleton_method "default_#{name}_client=" do |client| message_type.default_client = client end end
define_default_message_type_client_settings_accessors(name, message_type)
click to toggle source
# File lib/outbox/message_types.rb, line 78 def define_default_message_type_client_settings_accessors(name, message_type) define_singleton_method "default_#{name}_client_settings" do |*args| message_type.default_client_settings(*args) end define_singleton_method "default_#{name}_client_settings=" do |settings| message_type.default_client_settings = settings end end
define_message_type_defaults_accessors(name, message_type)
click to toggle source
# File lib/outbox/message_types.rb, line 88 def define_message_type_defaults_accessors(name, message_type) define_singleton_method "#{name}_defaults" do |*args| message_type.defaults(*args) end define_singleton_method "#{name}_defaults=" do |defaults| message_type.defaults = defaults end end
define_message_type_reader(name, message_type)
click to toggle source
# File lib/outbox/message_types.rb, line 42 def define_message_type_reader(name, message_type) ivar_name = "@#{name}" define_inheritable_method(DYNAMIC_MODULE_NAME, name) do |fields = nil, &block| instance = instance_variable_get(ivar_name) if instance.nil? && (fields || block) instance = message_type.new instance_variable_set(ivar_name, instance) end if block instance.instance_eval(&block) elsif fields instance.fields = fields end instance end end
define_message_type_writer(name)
click to toggle source
# File lib/outbox/message_types.rb, line 62 def define_message_type_writer(name) define_inheritable_method(DYNAMIC_MODULE_NAME, "#{name}=") do |value| instance_variable_set("@#{name}", value) end end