Class: Messaging::Adapters::Postgres::SerializedMessage

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/messaging/adapters/postgres/serialized_message.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#expected_versionObject

Returns the value of attribute expected_version.



7
8
9
# File 'lib/messaging/adapters/postgres/serialized_message.rb', line 7

def expected_version
  @expected_version
end

Class Method Details

.instantiate(attributes, *_args) ⇒ Object

We override this AR method to make records retreived from scopes etc. be message objects of the corresponding message class instead of AR objects

See api.rubyonrails.org/classes/ActiveRecord/Persistence/ClassMethods.html#method-i-instantiate



14
15
16
17
18
# File 'lib/messaging/adapters/postgres/serialized_message.rb', line 14

def self.instantiate(attributes, *_args)
  attributes['message_type'].constantize.new(
    JSON.parse(attributes['data']).merge(stream_position: attributes['stream_position'])
  )
end

Instance Method Details

#create_or_update(*args) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/messaging/adapters/postgres/serialized_message.rb', line 44

def create_or_update(*args)
  with_locked_stream do
    set_stream_position
    validate_expected_version!
    super
  end
end

#message=(message) ⇒ Object

Virtual setter for message so we can create a serialized message from a message



21
22
23
24
25
26
27
28
29
# File 'lib/messaging/adapters/postgres/serialized_message.rb', line 21

def message=(message)
  self.data = message.attributes_as_json
  self.expected_version = message.expected_version
  self.message_type = message.message_type
  self.stream = message.stream_name
  self.stream_category = message.stream_category
  self.stream_id = message.stream_id
  self.uuid = message.uuid
end

#readonly?Boolean

You should never update a message after creating it

Returns:

  • (Boolean)


36
37
38
# File 'lib/messaging/adapters/postgres/serialized_message.rb', line 36

def readonly?
  true unless new_record?
end

#streamObject



40
41
42
# File 'lib/messaging/adapters/postgres/serialized_message.rb', line 40

def stream
  @stream ||= Stream.new(attributes['stream'])
end

#to_messageObject



31
32
33
# File 'lib/messaging/adapters/postgres/serialized_message.rb', line 31

def to_message
  message_type.constantize.new(data.merge(stream_position: stream_position))
end