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