Class: EventEngine::EventBuilder
- Inherits:
-
Object
- Object
- EventEngine::EventBuilder
- 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
-
.build(schema:, data:) ⇒ Hash
Builds an event attributes hash from schema and input data.
- .validate_inputs!(schema, data) ⇒ Object
Class Method Details
.build(schema:, data:) ⇒ Hash
Builds an event attributes hash from schema and input data.
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
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 |