Class: RubyEventStore::Event
- Inherits:
-
Object
- Object
- RubyEventStore::Event
- Defined in:
- lib/ruby_event_store/event.rb
Overview
Data structure representing an event
Direct Known Subclasses
Constant Summary collapse
- BIG_VALUE =
0b111111100100000010010010110011101011000101010101001100100110000
Instance Attribute Summary collapse
-
#data ⇒ Object
readonly
Returns the value of attribute data.
-
#event_id ⇒ Object
readonly
Returns the value of attribute event_id.
-
#metadata ⇒ Object
readonly
Returns the value of attribute metadata.
Instance Method Summary collapse
-
#==(other_event) ⇒ TrueClass, FalseClass
(also: #eql?)
Two events are equal if: * they are of the same class * have identical event id * have identical data (verified with eql? method).
-
#causation_id ⇒ String?
Reads causation_id from metadata.
-
#causation_id=(val) ⇒ String
Sets causation_id= in metadata.
-
#correlate_with(other_message) ⇒ String
Sets correlation_id and causation_id in metadata based on correlation_id and message_id of the provided message.
-
#correlation_id ⇒ String?
Reads correlation_id from metadata.
-
#correlation_id=(val) ⇒ String
Sets correlation_id in metadata.
-
#hash ⇒ Object
Generates a Fixnum hash value for this object.
-
#initialize(event_id: SecureRandom.uuid, metadata: nil, data: {}) ⇒ Event
constructor
Instantiates a new event.
-
#message_id ⇒ String
Event id.
-
#timestamp ⇒ Time?
Timestamp from metadata.
-
#to_h ⇒ Hash
Returns a hash representation of the event.
-
#type ⇒ String
Type of event.
Constructor Details
#initialize(event_id: SecureRandom.uuid, metadata: nil, data: {}) ⇒ Event
Instantiates a new event
15 16 17 18 19 |
# File 'lib/ruby_event_store/event.rb', line 15 def initialize(event_id: SecureRandom.uuid, metadata: nil, data: {}) @event_id = event_id.to_s @metadata = Metadata.new(.to_h) @data = data end |
Instance Attribute Details
#data ⇒ Object (readonly)
Returns the value of attribute data.
21 22 23 |
# File 'lib/ruby_event_store/event.rb', line 21 def data @data end |
#event_id ⇒ Object (readonly)
Returns the value of attribute event_id.
21 22 23 |
# File 'lib/ruby_event_store/event.rb', line 21 def event_id @event_id end |
#metadata ⇒ Object (readonly)
Returns the value of attribute metadata.
21 22 23 |
# File 'lib/ruby_event_store/event.rb', line 21 def @metadata end |
Instance Method Details
#==(other_event) ⇒ TrueClass, FalseClass Also known as: eql?
Two events are equal if:
-
they are of the same class
-
have identical event id
-
have identical data (verified with eql? method)
Event equality ignores metadata!
65 66 67 68 69 |
# File 'lib/ruby_event_store/event.rb', line 65 def ==(other_event) other_event.instance_of?(self.class) && other_event.event_id.eql?(event_id) && other_event.data.eql?(data) end |
#causation_id ⇒ String?
Reads causation_id from metadata. / Find out more
114 115 116 |
# File 'lib/ruby_event_store/event.rb', line 114 def causation_id [:causation_id] end |
#causation_id=(val) ⇒ String
Sets causation_id= in metadata. / Find out more
123 124 125 |
# File 'lib/ruby_event_store/event.rb', line 123 def causation_id=(val) [:causation_id]= val end |
#correlate_with(other_message) ⇒ String
Sets correlation_id and causation_id in metadata based on correlation_id and message_id of the provided message. / Find out more
133 134 135 136 |
# File 'lib/ruby_event_store/event.rb', line 133 def correlate_with() self.correlation_id = .correlation_id || . self.causation_id = . end |
#correlation_id ⇒ String?
Reads correlation_id from metadata. / Find out more
97 98 99 |
# File 'lib/ruby_event_store/event.rb', line 97 def correlation_id [:correlation_id] end |
#correlation_id=(val) ⇒ String
Sets correlation_id in metadata. / Find out more
106 107 108 |
# File 'lib/ruby_event_store/event.rb', line 106 def correlation_id=(val) [:correlation_id] = val end |
#hash ⇒ Object
Generates a Fixnum hash value for this object. This function have the property that a.eql?(b) implies a.hash == b.hash.
The hash value is used along with eql? by the Hash class to determine if two objects reference the same hash key.
This hash is based on
-
class
-
event_id
-
data
84 85 86 87 88 89 90 91 |
# File 'lib/ruby_event_store/event.rb', line 84 def hash # We don't use metadata because == does not use metadata [ self.class, event_id, data ].hash ^ BIG_VALUE end |
#message_id ⇒ String
Event id
25 26 27 |
# File 'lib/ruby_event_store/event.rb', line 25 def event_id end |
#timestamp ⇒ Time?
Timestamp from metadata
52 53 54 |
# File 'lib/ruby_event_store/event.rb', line 52 def [:timestamp] end |
#to_h ⇒ Hash
Returns a hash representation of the event.
Metadata is converted to hash as well
40 41 42 43 44 45 46 47 |
# File 'lib/ruby_event_store/event.rb', line 40 def to_h { event_id: event_id, metadata: .to_h, data: data, type: type, } end |
#type ⇒ String
Type of event. Used when matching with subscribed handlers.
31 32 33 |
# File 'lib/ruby_event_store/event.rb', line 31 def type self.class.name end |