class CloudEvents::Event::FieldInterpreter
A helper that extracts and interprets event fields from an input hash. @private
Public Class Methods
new(args)
click to toggle source
# File lib/cloud_events/event/field_interpreter.rb, line 12 def initialize args @args = Utils.keys_to_strings args @attributes = {} end
Public Instance Methods
content_type(keys, required: false)
click to toggle source
# File lib/cloud_events/event/field_interpreter.rb, line 79 def content_type keys, required: false object keys, required: required do |value| case value when ::String raise AttributeError, "The #{keys.first} field cannot be empty" if value.empty? [ContentType.new(value), value.freeze] when ContentType [value, value.to_s] else raise AttributeError, "Illegal type for #{keys.first}:" \ " String, or ContentType expected but #{value.class} found" end end end
finish_attributes()
click to toggle source
# File lib/cloud_events/event/field_interpreter.rb, line 17 def finish_attributes @args.each do |key, value| @attributes[key.freeze] = value.to_s.freeze unless value.nil? end @args = {} @attributes.freeze end
rfc3339_date_time(keys, required: false)
click to toggle source
# File lib/cloud_events/event/field_interpreter.rb, line 58 def rfc3339_date_time keys, required: false object keys, required: required do |value| case value when ::String begin [Utils.deep_freeze(::DateTime.rfc3339(value)), value.freeze] rescue ::Date::Error => e raise AttributeError, "Illegal format for #{keys.first}: #{e.message}" end when ::DateTime [Utils.deep_freeze(value), value.rfc3339.freeze] when ::Time value = value.to_datetime [Utils.deep_freeze(value), value.rfc3339.freeze] else raise AttributeError, "Illegal type for #{keys.first}:" \ " String, Time, or DateTime expected but #{value.class} found" end end end
spec_version(keys, accept: object keys, required: true do |value| case value)
click to toggle source
# File lib/cloud_events/event/field_interpreter.rb, line 94 def spec_version keys, accept: object keys, required: true do |value| case value when ::String raise SpecVersionError, "Unrecognized specversion: #{value}" unless accept =~ value value.freeze [value, value] else raise AttributeError, "Illegal type for #{keys.first}:" \ " String expected but #{value.class} found" end
string(keys, required: false, allow_empty: false)
click to toggle source
# File lib/cloud_events/event/field_interpreter.rb, line 25 def string keys, required: false, allow_empty: false object keys, required: required do |value| case value when ::String raise AttributeError, "The #{keys.first} field cannot be empty" if value.empty? && !allow_empty value.freeze [value, value] else raise AttributeError, "Illegal type for #{keys.first}:" \ " String expected but #{value.class} found" end end end
uri(keys, required: false)
click to toggle source
# File lib/cloud_events/event/field_interpreter.rb, line 39 def uri keys, required: false object keys, required: required do |value| case value when ::String raise AttributeError, "The #{keys.first} field cannot be empty" if value.empty? begin [Utils.deep_freeze(::URI.parse(value)), value.freeze] rescue ::URI::InvalidURIError => e raise AttributeError, "Illegal format for #{keys.first}: #{e.message}" end when ::URI::Generic [Utils.deep_freeze(value), value.to_s.freeze] else raise AttributeError, "Illegal type for #{keys.first}:" \ " String or URI expected but #{value.class} found" end end end