Sha256: dc58db1c92761416ee554cbe86fa5169df4ff07a4553a67e7ee4e18f6ab75686

Contents?: true

Size: 869 Bytes

Versions: 5

Compression:

Stored size: 869 Bytes

Contents

module TOML
  class Parser
    attr_reader :hash

    def initialize(content, options = {})
      @hash = {}
      @visited_keys = []
      @current = @hash
      @symbolize_keys = options[:symbolize_keys]

      begin
        parsed = TOML::Document.parse(content)
        parsed.matches.map(&:value).compact.each { |m| m.accept_visitor(self) }
      rescue Citrus::ParseError => e
        raise TOML::ParseError.new(e.message)
      end
    end

    # Read about the Visitor pattern
    # http://en.wikipedia.org/wiki/Visitor_pattern
    def visit_table_array(table_array)
      @current = table_array.navigate_keys @hash, @symbolize_keys
    end

    def visit_keygroup(keygroup)
      @current = keygroup.navigate_keys @hash, @visited_keys, @symbolize_keys
    end

    def visit_keyvalue(keyvalue)
      keyvalue.assign @current, @symbolize_keys
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
toml-rb-0.3.12 lib/toml/parser.rb
toml-rb-0.3.11 lib/toml/parser.rb
toml-rb-0.3.10 lib/toml/parser.rb
toml-rb-0.3.9 lib/toml/parser.rb
toml-rb-0.3.8 lib/toml/parser.rb