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