class Tomlrb::Keys
Public Class Methods
Public Instance Methods
Source
# File lib/tomlrb/handler.rb, line 155 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
Source
# File lib/tomlrb/handler.rb, line 151 def add_pair_key(keys, context) self << [context, keys, false] end
Source
# File lib/tomlrb/handler.rb, line 147 def add_table_key(keys, is_array_of_tables = false) self << [keys, [], is_array_of_tables] end
Private Instance Methods
Source
# File lib/tomlrb/handler.rb, line 192 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.zero? && 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
Source
# File lib/tomlrb/handler.rb, line 164 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.zero? current = find_or_create_first_table_key(current, key, declared, is_array_of_tables) else current <<= [key, :table, declared, is_array_of_tables] end end current.clear_children if is_array_of_tables current end
Source
# File lib/tomlrb/handler.rb, line 204 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
Source
# File lib/tomlrb/handler.rb, line 178 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) k.declared = k.declared? || declared current[key] = k k end