class Philotic::Message
Constants
- NotInstantiableError
Attributes
connection[RW]
delivery_info[RW]
publish_error[RW]
published[W]
Public Class Methods
attr_payload(*names)
click to toggle source
# File lib/philotic/message.rb, line 26 def attr_payload(*names) attr_payload_accessors.merge(names) attr_accessor(*names) end
attr_payload_accessors()
click to toggle source
# File lib/philotic/message.rb, line 17 def attr_payload_accessors @attr_payload_accessors ||= Set.new end
attr_routable(*names)
click to toggle source
# File lib/philotic/message.rb, line 21 def attr_routable(*names) attr_routable_accessors.merge(names) attr_accessor(*names) end
attr_routable_accessors()
click to toggle source
# File lib/philotic/message.rb, line 13 def attr_routable_accessors @attr_routable_accessors ||= Set.new end
inherited(sub_class)
click to toggle source
# File lib/philotic/message.rb, line 49 def self.inherited(sub_class) sub_class.attr_routable(*Philotic::PHILOTIC_HEADERS) sub_class.attr_routable(*self.attr_routable_accessors.dup) sub_class.attr_payload(*self.attr_payload_accessors.dup) end
new(routables={}, payloads={}, connection=nil)
click to toggle source
# File lib/philotic/message.rb, line 32 def initialize(routables={}, payloads={}, connection=nil) raise NotInstantiableError if self.class == Philotic::Message self.timestamp = Time.now.to_i self.philotic_firehose = true self.connection = connection self.philotic_serializations = self.connection.config.serializations # dynamically insert any passed in routables into both attr_routable # and attr_payload # result: ability to arbitrarily send a easily routable hash # over into the bus _set_routables_or_payloads(:routable, routables) _set_routables_or_payloads(:payload, payloads) @published = false end
publish(*args)
click to toggle source
# File lib/philotic/message.rb, line 77 def self.publish(*args) message_class = self == Philotic::Message ? Class.new(self) : self message_class.new(*args).publish end
Public Instance Methods
attributes()
click to toggle source
# File lib/philotic/message.rb, line 94 def attributes payload.merge headers end
delivery_tag()
click to toggle source
# File lib/philotic/message.rb, line 82 def delivery_tag delivery_info && delivery_info.delivery_tag end
headers()
click to toggle source
# File lib/philotic/message.rb, line 90 def headers _payload_or_headers(:routable) end
metadata()
click to toggle source
# File lib/philotic/message.rb, line 98 def metadata @metadata ||= {} end
metadata=(options)
click to toggle source
# File lib/philotic/message.rb, line 102 def metadata=(options) @metadata ||= {} @metadata.merge! options end
payload()
click to toggle source
# File lib/philotic/message.rb, line 86 def payload _payload_or_headers(:payload) end
publish()
click to toggle source
# File lib/philotic/message.rb, line 73 def publish connection.publish self end
published?()
click to toggle source
# File lib/philotic/message.rb, line 69 def published? !!@published end
Private Instance Methods
_is_anonymous_message?()
click to toggle source
# File lib/philotic/message.rb, line 109 def _is_anonymous_message? self.is_a?(Philotic::Message) && self.class.name.nil? end
_normalize_attr_name(attr)
click to toggle source
# File lib/philotic/message.rb, line 159 def _normalize_attr_name(attr) %i[_underscore_attr_name].reduce(attr) do |attr, normalizer| send(normalizer, attr) end.to_sym end
_payload_or_headers(payload_or_headers)
click to toggle source
# File lib/philotic/message.rb, line 113 def _payload_or_headers(payload_or_headers) attribute_hash = {} self.class.send("attr_#{payload_or_headers}_accessors").each do |attr| attr = attr.to_sym attribute_hash[attr] = send(attr) end attribute_hash end
_set_message_attribute(type, key, value)
click to toggle source
# File lib/philotic/message.rb, line 133 def _set_message_attribute(type, key, value) self.class.send("attr_#{type}_accessors").merge([key]) _set_message_attribute_accessor(key, value) end
_set_message_attribute_accessor(attr, value)
click to toggle source
# File lib/philotic/message.rb, line 138 def _set_message_attribute_accessor(attr, value) attr = _normalize_attr_name(attr) _set_message_attribute_getter(attr) _set_message_attribute_setter(attr) self.send(:"#{attr}=", value) end
_set_message_attribute_getter(attr)
click to toggle source
# File lib/philotic/message.rb, line 145 def _set_message_attribute_getter(attr) attr = _normalize_attr_name(attr) self.define_singleton_method :"#{attr}" do instance_variable_get(:"@#{attr}") end end
_set_message_attribute_setter(attr)
click to toggle source
# File lib/philotic/message.rb, line 152 def _set_message_attribute_setter(attr) attr = _normalize_attr_name(attr) self.define_singleton_method :"#{attr}=" do |v| instance_variable_set(:"@#{attr}", v) end end
_set_routables_or_payloads(type, attrs)
click to toggle source
# File lib/philotic/message.rb, line 122 def _set_routables_or_payloads(type, attrs) attrs.each do |key, value| key = _normalize_attr_name(key) if self.respond_to?(:"#{key}=") send(:"#{key}=", value) elsif _is_anonymous_message? _set_message_attribute(type, key, value) end end end
_underscore_attr_name(attr)
click to toggle source
# File lib/philotic/message.rb, line 164 def _underscore_attr_name(attr) attr.to_s.tr('-', '_') end