Class: EventEngine::EventBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/event_engine/event_builder.rb

Overview

Constructs an event payload hash from a schema and input data. Validates that required inputs are present and no unknown inputs are passed.

Class Method Summary collapse

Class Method Details

.build(schema:, data:) ⇒ Hash

Builds an event attributes hash from schema and input data.

Parameters:

Returns:

  • (Hash)

    event attributes including :event_name, :event_type, :event_version, :payload

Raises:

  • (ArgumentError)

    if required inputs are missing or unknown inputs are provided



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/event_engine/event_builder.rb', line 11

def self.build(schema:, data:)
  validate_inputs!(schema, data)

  payload = {}

  schema.payload_fields.each do |field|
    input = data[field[:from]]
    next if input.nil? && !field[:required]

    value = field[:attr] ? input.public_send(field[:attr]) : input
    payload[field[:name]] = value
  end

  {
    event_name: schema.event_name,
    event_type: schema.event_type,
    event_version: schema.event_version,
    payload: payload
  }
end

.validate_inputs!(schema, data) ⇒ Object

Raises:

  • (ArgumentError)


34
35
36
37
38
39
40
41
42
43
# File 'lib/event_engine/event_builder.rb', line 34

def self.validate_inputs!(schema, data)
  data_keys = data.keys.map(&:to_sym)

  missing = schema.required_inputs - data_keys
  raise ArgumentError, "missing required input: #{missing.join(', ')}" if missing.any?

  allowed = schema.required_inputs + schema.optional_inputs
  unknown = data_keys - allowed
  raise ArgumentError, "unknown input: #{unknown.join(', ')}" if unknown.any?
end