Sha256: 6a3c11d788ee512e2555592eaa133914bea3eadc6e4ed51153f437590fcf515d

Contents?: true

Size: 861 Bytes

Versions: 8

Compression:

Stored size: 861 Bytes

Contents

require 'mash'

class Node < Hash
  class Attribute
    attr_reader :value
    def initialize(value)
      @value = value
    end
  end

  def initialize
    @data = {}
    super
  end

  def []=(key,value)
    key = convert_key(key)
    result = super
    attribute = Attribute.new(result)
    @data[key] = attribute
  end

  def [](key)
    key = convert_key(key)
    case @data[key]
    when nil
      @data[key] = Node.new
    when Node::Attribute
      @data[key].value
    when Node
      @data[key]
    else
      raise "should never happen"
    end
  end

  def to_hash
    hash = {}
    @data.each do |key,item|
      if item.is_a?(Node)
        hash[key] = item.to_hash
      else
        hash[key] = item.value
      end
    end
    hash
  end

  def to_mash
    Mash.from_hash(to_hash)
  end

private
  def convert_key(key)
    key.to_sym
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
rna-0.4.7 lib/node.rb
rna-0.4.6 lib/node.rb
rna-0.4.2 lib/node.rb
rna-0.4.1 lib/node.rb
rna-0.4.0 lib/node.rb
rna-0.3.8 lib/node.rb
rna-0.3.7 lib/node.rb
rna-0.3.6 lib/node.rb