class Structured::Dictionary

Attributes

member_klass[R]

Private Class Methods

[](member_klass) click to toggle source
# File lib/structured/dictionary.rb, line 11
def self.[](member_klass)
  new(member_klass)
end
new(member_klass) click to toggle source
# File lib/structured/dictionary.rb, line 7
def initialize(member_klass)
  @member_klass = member_klass
end

Private Instance Methods

default_value() click to toggle source
# File lib/structured/dictionary.rb, line 43
def default_value
  {}.freeze
end
format_stack_frame_element(key) click to toggle source
# File lib/structured/dictionary.rb, line 39
def format_stack_frame_element(key)
  "[#{key}]"
end
parse(parsed_yaml, stack:, context: nil) click to toggle source
# File lib/structured/dictionary.rb, line 15
def parse(parsed_yaml, stack:, context: nil)
  unless parsed_yaml.is_a?(Hash)
    raise Structured::Errors::InvalidValue.new(stack,
      "#{stack} expects a hash, but found #{parsed_yaml.class.name}")
  end

  result = {}
  errors = []
  parsed_yaml.each do |key, value|
    begin
      unless key.is_a?(::String)
        raise Structured::Errors::InvalidValue.new(stack,
          "Dictionary key #{key.inspect} is not a string")
      end
      result[key] = member_klass.parse(value, stack: stack.push(key, member_klass), context: context)
    rescue Structured::Errors::Base => exception
      errors << exception
    end
  end

  raise Structured::Errors::MultipleErrors.union(stack, errors) unless errors.empty?
  result
end
type_name() click to toggle source
# File lib/structured/dictionary.rb, line 47
def type_name
  "Dictionary[#{member_klass.type_name}]"
end