Class: Structured::Dictionary
- Inherits:
-
Object
- Object
- Structured::Dictionary
- Includes:
- Type
- Defined in:
- lib/structured/dictionary.rb
Instance Attribute Summary collapse
-
#member_klass ⇒ Object
readonly
Returns the value of attribute member_klass.
Class Method Summary collapse
Instance Method Summary collapse
- #default_value ⇒ Object
- #format_stack_frame_element(key) ⇒ Object
-
#initialize(member_klass) ⇒ Dictionary
constructor
A new instance of Dictionary.
- #parse(parsed_yaml, stack:, context: nil) ⇒ Object
- #type_name ⇒ Object
Constructor Details
#initialize(member_klass) ⇒ Dictionary
Returns a new instance of Dictionary.
7 8 9 |
# File 'lib/structured/dictionary.rb', line 7 def initialize(member_klass) @member_klass = member_klass end |
Instance Attribute Details
#member_klass ⇒ Object (readonly)
Returns the value of attribute member_klass.
5 6 7 |
# File 'lib/structured/dictionary.rb', line 5 def member_klass @member_klass end |
Class Method Details
.[](member_klass) ⇒ Object
11 12 13 |
# File 'lib/structured/dictionary.rb', line 11 def self.[](member_klass) new(member_klass) end |
Instance Method Details
#default_value ⇒ Object
43 44 45 |
# File 'lib/structured/dictionary.rb', line 43 def default_value {}.freeze end |
#format_stack_frame_element(key) ⇒ Object
39 40 41 |
# File 'lib/structured/dictionary.rb', line 39 def format_stack_frame_element(key) "[#{key}]" end |
#parse(parsed_yaml, stack:, context: nil) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# 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 ⇒ Object
47 48 49 |
# File 'lib/structured/dictionary.rb', line 47 def type_name "Dictionary[#{member_klass.type_name}]" end |