Class: DripDrop::AutoMessageClass
- Defined in:
- lib/dripdrop/message.rb
Overview
Use of this “metaclass” allows for the automatic recognition of the message’s base class
Class Attribute Summary collapse
-
.message_subclasses ⇒ Object
Returns the value of attribute message_subclasses.
Attributes inherited from Message
Class Method Summary collapse
- .create_message(*args) ⇒ Object
- .recreate_message(*args) ⇒ Object
- .register_subclass(klass) ⇒ Object
- .verify_args(*args) ⇒ Object
Instance Method Summary collapse
-
#initialize(*args) ⇒ AutoMessageClass
constructor
A new instance of AutoMessageClass.
Methods inherited from Message
decode, decode_json, #encode_json, #encoded, from_hash, #json_encoded, parse, #to_hash
Constructor Details
#initialize(*args) ⇒ AutoMessageClass
Returns a new instance of AutoMessageClass.
115 116 117 |
# File 'lib/dripdrop/message.rb', line 115 def initialize(*args) raise "Cannot create an instance of this class - please use create_message class method" end |
Class Attribute Details
.message_subclasses ⇒ Object
Returns the value of attribute message_subclasses.
120 121 122 |
# File 'lib/dripdrop/message.rb', line 120 def @message_subclasses end |
Class Method Details
.create_message(*args) ⇒ Object
143 144 145 146 |
# File 'lib/dripdrop/message.rb', line 143 def (*args) klass = verify_args(*args) klass.(*args) end |
.recreate_message(*args) ⇒ Object
148 149 150 151 |
# File 'lib/dripdrop/message.rb', line 148 def (*args) klass = verify_args(*args) klass.(*args) end |
.register_subclass(klass) ⇒ Object
153 154 155 |
# File 'lib/dripdrop/message.rb', line 153 def register_subclass(klass) DripDrop::AutoMessageClass.[klass.to_s] = klass end |
.verify_args(*args) ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/dripdrop/message.rb', line 124 def verify_args(*args) head = case args[0] when Hash az = args[0] az[:head] || az['head'] else args[1] end raise ArgumentError, "Invalid head #{head.inspect}. Head must be a hash! (args: #{args.inspect})" unless head.is_a?(Hash) msg_class = head['msg_class'] unless DripDrop::AutoMessageClass..has_key?(msg_class) raise ArgumentError, "Unknown AutoMessage message class #{msg_class}" end DripDrop::AutoMessageClass.[msg_class] end |