Class: RubyEventStore::Event

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_event_store/event.rb

Overview

Data structure representing an event

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(event_id: SecureRandom.uuid, metadata: nil, data: {}) ⇒ Event

Instantiates a new event

Parameters:

  • event_id (String) (defaults to: SecureRandom.uuid)

    event id

  • data (Hash) (defaults to: {})

    event data which belong to your application domain

  • metadata (Hash) (defaults to: nil)

    event metadata which are technical and not part of your domain such as remote_ip, request_id, correlation_id, causation_id etc.



16
17
18
19
20
# File 'lib/ruby_event_store/event.rb', line 16

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

#dataObject (readonly)

Returns the value of attribute data.



22
23
24
# File 'lib/ruby_event_store/event.rb', line 22

def data
  @data
end

#event_idObject (readonly)

Returns the value of attribute event_id.



22
23
24
# File 'lib/ruby_event_store/event.rb', line 22

def event_id
  @event_id
end

#metadataObject (readonly)

Returns the value of attribute metadata.



22
23
24
# File 'lib/ruby_event_store/event.rb', line 22

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 type

  • have identical event id

  • have identical data (verified with eql? method)

Event equality ignores metadata!

Parameters:

  • other_event (Event, Object)

    object to compare

Returns:

  • (TrueClass, FalseClass)


60
61
62
63
# File 'lib/ruby_event_store/event.rb', line 60

def ==(other_event)
  other_event.instance_of?(self.class) && other_event.event_type.eql?(event_type) &&
    other_event.event_id.eql?(event_id) && other_event.data.eql?(data)
end

#causation_idString?

Reads causation_id from metadata. / Find out more

Returns:

  • (String, nil)


101
102
103
# File 'lib/ruby_event_store/event.rb', line 101

def causation_id
  [:causation_id]
end

#causation_id=(val) ⇒ String

Sets causation_id= in metadata. / Find out more

Parameters:

  • val (String)

Returns:

  • (String)


110
111
112
# File 'lib/ruby_event_store/event.rb', line 110

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

Parameters:

  • other_message (Event, command)

    message to correlate with. Most likely an event or a command. Must respond to correlation_id and message_id.

Returns:

  • (String)

    set causation_id



120
121
122
123
124
# File 'lib/ruby_event_store/event.rb', line 120

def correlate_with(other_message)
  self.correlation_id = other_message.correlation_id || other_message.message_id
  self.causation_id = other_message.message_id
  self
end

#correlation_idString?

Reads correlation_id from metadata. / Find out more

Returns:

  • (String, nil)


84
85
86
# File 'lib/ruby_event_store/event.rb', line 84

def correlation_id
  [:correlation_id]
end

#correlation_id=(val) ⇒ String

Sets correlation_id in metadata. / Find out more

Parameters:

  • val (String)

Returns:

  • (String)


93
94
95
# File 'lib/ruby_event_store/event.rb', line 93

def correlation_id=(val)
  [:correlation_id] = val
end

#event_typeString

Type of event. Used when matching with subscribed handlers.

Returns:

  • (String)


32
33
34
# File 'lib/ruby_event_store/event.rb', line 32

def event_type
  [:event_type] || self.class.name
end

#hashObject

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



75
76
77
78
# File 'lib/ruby_event_store/event.rb', line 75

def hash
  # We don't use metadata because == does not use metadata
  [event_type, event_id, data].hash ^ self.class.hash
end

#message_idString

Event id

Returns:

  • (String)


26
27
28
# File 'lib/ruby_event_store/event.rb', line 26

def message_id
  event_id
end

#timestampTime?

Timestamp from metadata

Returns:

  • (Time, nil)


39
40
41
# File 'lib/ruby_event_store/event.rb', line 39

def timestamp
  [:timestamp]
end

#valid_atTime?

Validity time from metadata

Returns:

  • (Time, nil)


46
47
48
# File 'lib/ruby_event_store/event.rb', line 46

def valid_at
  [:valid_at]
end