Sha256: 0a766b6b4c0eed56728ee9e3bd1ada91ef7f8f5c03130d164dd1eb5e6712fccb

Contents?: true

Size: 936 Bytes

Versions: 3

Compression:

Stored size: 936 Bytes

Contents

class Node < Hash
  class Attribute
    attr_reader :value
    def initialize(value)
      @value = value
    end
    def [](key)
      puts "Node::Attribute key #{key}"
      nil
    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)
    if @data[key].nil?
      result = @data[key] = Node.new
    elsif @data[key].is_a?(Node::Attribute)
      result = @data[key].value
    elsif @data[key].is_a?(Node)
      result = @data[key]
    else
      raise "should never happen"
    end
    result
  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

private
  def convert_key(key)
    key.to_sym
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rna-0.3.2 lib/node.rb
rna-0.3.1 lib/node.rb
rna-0.3.0 lib/node.rb