Sha256: ba13ad13866d80d29e76369efc98e9059aadae44cd34589ade639513bb4eb55f

Contents?: true

Size: 1.48 KB

Versions: 10

Compression:

Stored size: 1.48 KB

Contents

module TOML
  class InlineTable
    attr_reader :symbolize_keys

    def initialize(keyvalue_pairs)
      @pairs = keyvalue_pairs
      @symbolize_keys = false
    end

    def value(symbolize_keys = false)
      if (@symbolize_keys = symbolize_keys)
        tuple = ->(kv) { [kv.key.to_sym, visit_value(kv.value)] }
      else
        tuple = ->(kv) { [kv.key, visit_value(kv.value)] }
      end

      Hash[@pairs.map(&tuple)]
    end

    def visit_inline_table(inline_table)
      result = {}

      inline_table.value(@symbolize_keys).each do |k, v|
        result[key k] = visit_value v
      end

      result
    end

    def accept_visitor(keyvalue)
      keyvalue.visit_inline_table self
    end

    private

    def visit_value(a_value)
      return a_value unless a_value.respond_to? :accept_visitor

      a_value.accept_visitor self
    end

    def key(a_key)
      symbolize_keys ? a_key.to_sym : a_key
    end
  end

  class InlineTableArray
    def initialize(inline_tables)
      @inline_tables = inline_tables
    end

    def value(symbolize_keys = false)
      @inline_tables.map { |it| it.value(symbolize_keys) }
    end
  end

  module InlineTableParser
    def value
      TOML::InlineTable.new captures[:keyvalue].map(&:value)
    end
  end

  module InlineTableArrayParser
    def value
      tables = captures[:inline_table_array_elements].map do |x|
        x.captures[:inline_table]
      end

      TOML::InlineTableArray.new(tables.flatten.map(&:value)).value
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
toml-rb-0.3.15 lib/toml/inline_table.rb
toml-rb-0.3.14 lib/toml/inline_table.rb
toml-rb-0.3.13 lib/toml/inline_table.rb
toml-rb-0.3.12 lib/toml/inline_table.rb
toml-rb-0.3.11 lib/toml/inline_table.rb
toml-rb-0.3.10 lib/toml/inline_table.rb
toml-rb-0.3.9 lib/toml/inline_table.rb
toml-rb-0.3.8 lib/toml/inline_table.rb
toml-rb-0.3.7 lib/toml/inline_table.rb
toml-rb-0.3.6 lib/toml/inline_table.rb