12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- # frozen_string_literal: true
- module EventHeadersConcern
- private
- def validate_event_headers_options!
- event_headers_payload({})
- rescue ArgumentError => e
- errors.add(:base, e.message)
- rescue Liquid::Error => e
- errors.add(:base, "has an error with Liquid templating: #{e.message}")
- end
- def event_headers_normalizer
- case interpolated['event_headers_style']
- when nil, '', 'capitalized'
- ->(name) { name.gsub(/[^-]+/, &:capitalize) }
- when 'downcased'
- :downcase.to_proc
- when 'snakecased'
- ->(name) { name.tr('A-Z-', 'a-z_') }
- when 'raw'
- :itself.to_proc
- else
- raise ArgumentError, "if provided, event_headers_style must be 'capitalized', 'downcased', 'snakecased' or 'raw'"
- end
- end
- def event_headers_key
- case key = interpolated['event_headers_key']
- when nil, String
- key.presence
- else
- raise ArgumentError, "if provided, event_headers_key must be a string"
- end
- end
- def event_headers_payload(headers)
- key = event_headers_key or return {}
- normalize = event_headers_normalizer
- hash = headers.transform_keys(&normalize)
- names =
- case event_headers = interpolated['event_headers']
- when Array
- event_headers.map(&:to_s)
- when String
- event_headers.split(',')
- when nil
- nil
- else
- raise ArgumentError, "if provided, event_headers must be an array of strings or a comma separated string"
- end
- {
- key => names ? hash.slice(*names.map(&normalize)) : hash
- }
- end
- end
|