Module: Messaging::Message

Extended by:
ActiveSupport::Concern
Defined in:
lib/messaging/message.rb,
lib/messaging/message/from_json.rb

Defined Under Namespace

Modules: ClassMethods Classes: FromJson

Instance Method Summary collapse

Instance Method Details

#as_json(*_args) ⇒ Object



100
101
102
# File 'lib/messaging/message.rb', line 100

def as_json(*_args)
  attributes_as_json.merge(stream_position: stream_position)
end

#attributes_as_json(*_args) ⇒ Object

We do our own conversion for datetimes as by default they will only be stored with microseconds, which makes us loose precision when we serialize to json and back to message objects



96
97
98
# File 'lib/messaging/message.rb', line 96

def attributes_as_json(*_args)
  attributes.transform_values { |v| v.respond_to?(:nsec) ? v.iso8601(9) : v }
end

#categoryObject



127
128
129
# File 'lib/messaging/message.rb', line 127

def category
  Messaging.category(stream_category)
end

#key_attributeObject



108
109
110
# File 'lib/messaging/message.rb', line 108

def key_attribute
  self.class.key_attribute
end

#message_keyObject



104
105
106
# File 'lib/messaging/message.rb', line 104

def message_key
  attributes[key_attribute&.to_sym]
end

#message_typeObject



137
138
139
# File 'lib/messaging/message.rb', line 137

def message_type
  self.class.to_s
end

#publishObject



141
142
143
# File 'lib/messaging/message.rb', line 141

def publish
  Messaging::Publish.(message: self)
end

#stream_categoryObject



121
122
123
124
125
# File 'lib/messaging/message.rb', line 121

def stream_category
  return unless stream_name

  stream_name.split('$').first
end

#stream_idObject



131
132
133
134
135
# File 'lib/messaging/message.rb', line 131

def stream_id
  return unless stream_name

  stream_name.split('$').last
end

#stream_nameObject



116
117
118
119
# File 'lib/messaging/message.rb', line 116

def stream_name
  return unless self.class.stream_name
  instance_exec(&self.class.stream_name)
end

#topicObject



112
113
114
# File 'lib/messaging/message.rb', line 112

def topic
  self.class.topic
end