class Tomlrb::Keys

Public Class Methods

new() click to toggle source
# File lib/tomlrb/handler.rb, line 132
def initialize
  @keys = {}
end

Public Instance Methods

<<(keys) click to toggle source
# File lib/tomlrb/handler.rb, line 144
def <<(keys)
  table_keys, pair_keys, is_array_of_tables = keys
  current = @keys
  current = append_table_keys(current, table_keys, pair_keys.empty?, is_array_of_tables)
  append_pair_keys(current, pair_keys, table_keys.empty?, is_array_of_tables)
end
add_pair_key(keys, context) click to toggle source
# File lib/tomlrb/handler.rb, line 140
def add_pair_key(keys, context)
  self << [context, keys, false]
end
add_table_key(keys, is_array_of_tables = false) click to toggle source
# File lib/tomlrb/handler.rb, line 136
def add_table_key(keys, is_array_of_tables = false)
  self << [keys, [], is_array_of_tables]
end

Private Instance Methods

append_pair_keys(current, pair_keys, table_keys_empty, is_array_of_tables) click to toggle source
# File lib/tomlrb/handler.rb, line 180
def append_pair_keys(current, pair_keys, table_keys_empty, is_array_of_tables)
  pair_keys.each_with_index do |key, index|
    declared = index == pair_keys.length - 1
    if index == 0 && table_keys_empty
      current = find_or_create_first_pair_key(current, key, declared, table_keys_empty)
    else
      key = current << [key, :pair, declared, is_array_of_tables]
      current = key
    end
  end
end
append_table_keys(current, table_keys, pair_keys_empty, is_array_of_tables) click to toggle source
# File lib/tomlrb/handler.rb, line 153
def append_table_keys(current, table_keys, pair_keys_empty, is_array_of_tables)
  table_keys.each_with_index do |key, index|
    declared = (index == table_keys.length - 1) && pair_keys_empty
    if index == 0
      current = find_or_create_first_table_key(current, key, declared, is_array_of_tables)
    else
      current = current << [key, :table, declared, is_array_of_tables]
    end
  end

  current.clear_children if is_array_of_tables
  current
end
find_or_create_first_pair_key(current, key, declared, table_keys_empty) click to toggle source
# File lib/tomlrb/handler.rb, line 192
def find_or_create_first_pair_key(current, key, declared, table_keys_empty)
  existed = current[key]
  if existed && (existed.type == :pair) && declared && table_keys_empty
    raise Key::KeyConflict, "Key #{key} is already used"
  end
  k = Key.new(key, :pair, declared)
  current[key] = k
  k
end
find_or_create_first_table_key(current, key, declared, is_array_of_tables) click to toggle source
# File lib/tomlrb/handler.rb, line 167
def find_or_create_first_table_key(current, key, declared, is_array_of_tables)
  existed = current[key]
  if existed && existed.type == :pair
    raise Key::KeyConflict, "Key #{key} is already used as #{existed.type} key"
  end
  if existed && existed.declared? && declared && ! is_array_of_tables
    raise Key::KeyConflict, "Key #{key} is already used"
  end
  k = existed || Key.new(key, :table, declared)
  current[key] = k
  k
end