Class: JetstreamBridge::Models::Event

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

Overview

Structured event object provided to consumers

Examples:

Accessing event data in consumer

JetstreamBridge.subscribe do |event|
  puts event.type              # "user.created"
  puts event.payload.id        # 123
  puts event.resource_type     # "user"
  puts event.deliveries        # 1
  puts event..trace_id # "abc123"
end

Defined Under Namespace

Classes: Metadata, PayloadAccessor

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(envelope, metadata: {}) ⇒ Event

Returns a new instance of Event.

Parameters:

  • envelope (Hash)

    The raw event envelope

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

    Message delivery metadata



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/jetstream_bridge/models/event.rb', line 109

def initialize(envelope, metadata: {})
  envelope = envelope.transform_keys(&:to_s) if envelope.respond_to?(:transform_keys)

  @event_id = envelope['event_id']
  @type = envelope['event_type']
  @resource_type = envelope['resource_type']
  @resource_id = envelope['resource_id']
  @producer = envelope['producer']
  @schema_version = envelope['schema_version'] || 1
  @trace_id = envelope['trace_id']

  @occurred_at = parse_time(envelope['occurred_at'])
  @payload = PayloadAccessor.new(envelope['payload'] || {})
   = ()
  @raw_envelope = envelope

  freeze
end

Instance Attribute Details

#event_idString, ... (readonly)

Returns:

  • (String)

    Unique event identifier

  • (String)

    Event type (e.g. “user.created”)

  • (String)

    Resource type (e.g. “user”)

  • (String)

    Resource identifier

  • (String)

    Name of the producing application

  • (Time, nil)

    When the event occurred

  • (String)

    Distributed trace identifier

  • (Integer)

    Envelope schema version

  • (Metadata)

    Message delivery metadata



103
104
105
# File 'lib/jetstream_bridge/models/event.rb', line 103

def event_id
  @event_id
end

#metadataString, ... (readonly)

Returns:

  • (String)

    Unique event identifier

  • (String)

    Event type (e.g. “user.created”)

  • (String)

    Resource type (e.g. “user”)

  • (String)

    Resource identifier

  • (String)

    Name of the producing application

  • (Time, nil)

    When the event occurred

  • (String)

    Distributed trace identifier

  • (Integer)

    Envelope schema version

  • (Metadata)

    Message delivery metadata



103
104
105
# File 'lib/jetstream_bridge/models/event.rb', line 103

def 
  
end

#occurred_atString, ... (readonly)

Returns:

  • (String)

    Unique event identifier

  • (String)

    Event type (e.g. “user.created”)

  • (String)

    Resource type (e.g. “user”)

  • (String)

    Resource identifier

  • (String)

    Name of the producing application

  • (Time, nil)

    When the event occurred

  • (String)

    Distributed trace identifier

  • (Integer)

    Envelope schema version

  • (Metadata)

    Message delivery metadata



103
104
105
# File 'lib/jetstream_bridge/models/event.rb', line 103

def occurred_at
  @occurred_at
end

#payloadObject (readonly)

Access payload with method-style syntax

Examples:

event.payload.user_id  # Same as event.payload["user_id"]
event.payload.to_h     # Get raw payload hash


133
134
135
# File 'lib/jetstream_bridge/models/event.rb', line 133

def payload
  @payload
end

#producerString, ... (readonly)

Returns:

  • (String)

    Unique event identifier

  • (String)

    Event type (e.g. “user.created”)

  • (String)

    Resource type (e.g. “user”)

  • (String)

    Resource identifier

  • (String)

    Name of the producing application

  • (Time, nil)

    When the event occurred

  • (String)

    Distributed trace identifier

  • (Integer)

    Envelope schema version

  • (Metadata)

    Message delivery metadata



103
104
105
# File 'lib/jetstream_bridge/models/event.rb', line 103

def producer
  @producer
end

#resource_idString, ... (readonly)

Returns:

  • (String)

    Unique event identifier

  • (String)

    Event type (e.g. “user.created”)

  • (String)

    Resource type (e.g. “user”)

  • (String)

    Resource identifier

  • (String)

    Name of the producing application

  • (Time, nil)

    When the event occurred

  • (String)

    Distributed trace identifier

  • (Integer)

    Envelope schema version

  • (Metadata)

    Message delivery metadata



103
104
105
# File 'lib/jetstream_bridge/models/event.rb', line 103

def resource_id
  @resource_id
end

#resource_typeString, ... (readonly)

Returns:

  • (String)

    Unique event identifier

  • (String)

    Event type (e.g. “user.created”)

  • (String)

    Resource type (e.g. “user”)

  • (String)

    Resource identifier

  • (String)

    Name of the producing application

  • (Time, nil)

    When the event occurred

  • (String)

    Distributed trace identifier

  • (Integer)

    Envelope schema version

  • (Metadata)

    Message delivery metadata



103
104
105
# File 'lib/jetstream_bridge/models/event.rb', line 103

def resource_type
  @resource_type
end

#schema_versionString, ... (readonly)

Returns:

  • (String)

    Unique event identifier

  • (String)

    Event type (e.g. “user.created”)

  • (String)

    Resource type (e.g. “user”)

  • (String)

    Resource identifier

  • (String)

    Name of the producing application

  • (Time, nil)

    When the event occurred

  • (String)

    Distributed trace identifier

  • (Integer)

    Envelope schema version

  • (Metadata)

    Message delivery metadata



103
104
105
# File 'lib/jetstream_bridge/models/event.rb', line 103

def schema_version
  @schema_version
end

#trace_idString, ... (readonly)

Returns:

  • (String)

    Unique event identifier

  • (String)

    Event type (e.g. “user.created”)

  • (String)

    Resource type (e.g. “user”)

  • (String)

    Resource identifier

  • (String)

    Name of the producing application

  • (Time, nil)

    When the event occurred

  • (String)

    Distributed trace identifier

  • (Integer)

    Envelope schema version

  • (Metadata)

    Message delivery metadata



103
104
105
# File 'lib/jetstream_bridge/models/event.rb', line 103

def trace_id
  @trace_id
end

#typeString, ... (readonly)

Returns:

  • (String)

    Unique event identifier

  • (String)

    Event type (e.g. “user.created”)

  • (String)

    Resource type (e.g. “user”)

  • (String)

    Resource identifier

  • (String)

    Name of the producing application

  • (Time, nil)

    When the event occurred

  • (String)

    Distributed trace identifier

  • (Integer)

    Envelope schema version

  • (Metadata)

    Message delivery metadata



103
104
105
# File 'lib/jetstream_bridge/models/event.rb', line 103

def type
  @type
end

Instance Method Details

#[](key) ⇒ Object

Support hash-like access for backwards compatibility



195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/jetstream_bridge/models/event.rb', line 195

def [](key)
  case key.to_s
  when 'event_id' then @event_id
  when 'event_type' then @type
  when 'resource_type' then @resource_type
  when 'resource_id' then @resource_id
  when 'producer' then @producer
  when 'occurred_at' then @occurred_at&.iso8601
  when 'trace_id' then @trace_id
  when 'schema_version' then @schema_version
  when 'payload' then @payload.to_h
  else
    @raw_envelope[key.to_s]
  end
end

#deliveriesInteger

Number of times this message has been delivered

Returns:

  • (Integer)

    Delivery count



165
166
167
# File 'lib/jetstream_bridge/models/event.rb', line 165

def deliveries
  .deliveries || 1
end

#inspectObject



190
191
192
# File 'lib/jetstream_bridge/models/event.rb', line 190

def inspect
  "#<#{self.class.name} id=#{@event_id} type=#{@type} deliveries=#{deliveries}>"
end

#sequenceInteger?

Message sequence number in the stream

Returns:

  • (Integer, nil)

    Sequence number



186
187
188
# File 'lib/jetstream_bridge/models/event.rb', line 186

def sequence
  .sequence
end

#streamString?

Stream this message came from

Returns:

  • (String, nil)

    Stream name



179
180
181
# File 'lib/jetstream_bridge/models/event.rb', line 179

def stream
  .stream
end

#subjectString

Subject this message was received on

Returns:

  • (String)

    NATS subject



172
173
174
# File 'lib/jetstream_bridge/models/event.rb', line 172

def subject
  .subject
end

#to_envelopeHash

Get raw envelope hash

Returns:

  • (Hash)

    The original envelope



138
139
140
# File 'lib/jetstream_bridge/models/event.rb', line 138

def to_envelope
  @raw_envelope
end

#to_hHash Also known as: to_hash

Get hash representation

Returns:

  • (Hash)

    Event as hash



145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/jetstream_bridge/models/event.rb', line 145

def to_h
  {
    event_id: @event_id,
    type: @type,
    resource_type: @resource_type,
    resource_id: @resource_id,
    producer: @producer,
    occurred_at: @occurred_at&.iso8601,
    trace_id: @trace_id,
    schema_version: @schema_version,
    payload: @payload.to_h,
    metadata: .to_h
  }
end