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