class RecursiveStruct

Public Class Methods

new(input = nil) click to toggle source
Calls superclass method
# File lib/recursive-struct.rb, line 5
def initialize(input = nil)
        @recursive_table = {}
        hash = input
        if hash
                hash.each do |key, value|
                        if value.class == Hash
                                @recursive_table[key] = RecursiveStruct.new(value)
                                hash.delete(key)
                        end
                end
        end
        super(hash) 
end

Public Instance Methods

method_missing(mid, *args) click to toggle source

def new_ostruct_member(name)

name = name.to_sym
unless respond_to?(name)
                  if name.nil?
                          define_singleton_method(name) { @recursive_table[name] }
                  else
                          yield(name) if block_given?
                  end
end
name

end

Calls superclass method
# File lib/recursive-struct.rb, line 36
def method_missing(mid, *args)
        mname = mid.id2name
        len = args.length
        if mname.chomp!('=')
                super(mid, *args)
        elsif len == 0
                return @recursive_table[mid] if @recursive_table[mid]
                return @table[mid] if @table[mid]
                @recursive_table[mid] = RecursiveStruct.new
        else
                raise NoMethodError, "undefined method `#{mid}' for #{self}", caller(1)
        end
end
to_ary() click to toggle source
# File lib/recursive-struct.rb, line 19
def to_ary
        self.to_h.to_a
end