class TomlRB::Keyvalue
Attributes
dotted_keys[R]
symbolize_keys[R]
value[R]
Public Class Methods
new(dotted_keys, value)
click to toggle source
# File lib/toml-rb/keyvalue.rb, line 7 def initialize(dotted_keys, value) @dotted_keys = dotted_keys @value = value @symbolize_keys = false end
Public Instance Methods
accept_visitor(parser)
click to toggle source
# File lib/toml-rb/keyvalue.rb, line 39 def accept_visitor(parser) parser.visit_keyvalue self end
assign(hash, fully_defined_keys, symbolize_keys = false)
click to toggle source
# File lib/toml-rb/keyvalue.rb, line 13 def assign(hash, fully_defined_keys, symbolize_keys = false) @symbolize_keys = symbolize_keys dotted_keys_str = @dotted_keys.join(".") keys = symbolize_keys ? @dotted_keys.map(&:to_sym) : @dotted_keys update = keys.reverse.inject(visit_value @value) { |k1, k2| { k2 => k1 } } if @value.is_a?(InlineTable) fully_defined_keys << dotted_keys_str hash.merge!(update) { |key, _, _| fail ValueOverwriteError.new(key) } elsif fully_defined_keys.find{|k| update.dig(*k)} hash.merge!(update) { |key, _, _| fail ValueOverwriteError.new(key) } else dotted_key_merge(hash, update) end end
dotted_key_merge(hash, update)
click to toggle source
# File lib/toml-rb/keyvalue.rb, line 29 def dotted_key_merge(hash, update) hash.merge!(update) { |key, old, new| if old.is_a?(Hash) && new.is_a?(Hash) dotted_key_merge(old, new) else fail ValueOverwriteError.new(key) end } end
Private Instance Methods
visit_value(a_value)
click to toggle source
# File lib/toml-rb/keyvalue.rb, line 45 def visit_value(a_value) return a_value unless a_value.respond_to? :accept_visitor a_value.accept_visitor self end