Class: EventEngine::EventBuilder

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

Class Method Summary collapse

Class Method Details

.build(schema:, data:) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/event_engine/event_builder.rb', line 3

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)


26
27
28
29
30
31
32
33
34
35
# File 'lib/event_engine/event_builder.rb', line 26

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