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