Class: RelayGrid::Event

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

Overview

A verified delivery-status webhook, as returned by RelayGrid::Webhooks.construct_event.

case event.type
when "delivery.delivered" then mark_delivered(event.delivery.id)
when "delivery.failed"    then alert(event.delivery.friendly_error_message)
end

Two properties of the transport shape how you should handle these:

  • At-least-once. The same id can arrive twice (a receiver that times out after processing still gets retried). Key your side-effects off id.
  • Unordered. delivery.delivered can arrive before delivery.sent. Branch on event.delivery.status, which is the state at emission time, rather than on the order events show up in.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(payload) ⇒ Event

Returns a new instance of Event.



34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/relaygrid/event.rb', line 34

def initialize(payload)
  @raw = payload
  @id = payload["id"]
  @type = payload["type"]
  @created_at = parse_time(payload["created_at"])
  @data = payload["data"] || {}
  # Built up front, not memoized: the instance is frozen below, matching
  # Delivery -- an Event handed to another thread never changes underneath it.
  @delivery = Delivery.new(@data["delivery"]) if @data["delivery"].is_a?(Hash)

  freeze
end

Instance Attribute Details

#created_atTime? (readonly)

Returns when the event was emitted.

Returns:

  • (Time, nil)

    when the event was emitted



28
29
30
# File 'lib/relaygrid/event.rb', line 28

def created_at
  @created_at
end

#dataHash (readonly)

Returns the raw data object.

Returns:

  • (Hash)

    the raw data object



30
31
32
# File 'lib/relaygrid/event.rb', line 30

def data
  @data
end

#deliveryRelayGrid::Delivery? (readonly)

The delivery this event is about, in exactly the shape client.deliveries.get returns -- the server serializes both from one definition, so webhook-driven and polling code can share their handlers.

Returns:



52
53
54
# File 'lib/relaygrid/event.rb', line 52

def delivery
  @delivery
end

#idString (readonly)

Returns "evt_..." -- stable across retries, so it is what you deduplicate on.

Returns:

  • (String)

    "evt_..." -- stable across retries, so it is what you deduplicate on



24
25
26
# File 'lib/relaygrid/event.rb', line 24

def id
  @id
end

#rawHash (readonly)

Returns the whole envelope as received.

Returns:

  • (Hash)

    the whole envelope as received



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

def raw
  @raw
end

#typeString (readonly)

Returns e.g. "delivery.delivered".

Returns:

  • (String)

    e.g. "delivery.delivered"



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

def type
  @type
end

Instance Method Details

#delivery_event?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/relaygrid/event.rb', line 59

def delivery_event?
  type.to_s.start_with?("delivery.")
end

#inspectObject



67
68
69
# File 'lib/relaygrid/event.rb', line 67

def inspect
  "#<RelayGrid::Event id: #{id.inspect}, type: #{type.inspect}>"
end

#ping?Boolean

True for the test event the dashboard's "send test event" button emits.

Returns:

  • (Boolean)


55
56
57
# File 'lib/relaygrid/event.rb', line 55

def ping?
  type == "ping"
end

#to_hObject



63
64
65
# File 'lib/relaygrid/event.rb', line 63

def to_h
  raw
end