class CircularObjectContainer

Public Class Methods

new(obj) click to toggle source
# File lib/blockify.rb, line 299
def initialize(obj)
  @id = obj.object_id
  if obj.respond_to? :each_pair
    @obj = obj.class.new  # create a blank slate
    obj.each_pair do |key,val|
      if val.respond_to? :each
        @obj[key] = val.class.new  # go no further
      else
        tval = val.dup  rescue val
        @obj[key] = tval
      end
    end
    self.instance_eval do # yes we want a singleton method here!
      def each_pair(&block)
        @obj.each_pair &block
      end
      def each(&block)
        @obj.each &block
      end
      def [](key)
        @obj[key]
      end
    end 
  elsif obj.respond_to? :each
    @obj = obj.class.new  # create a blank slate
    obj.each do |val|
      if val.respond_to? :each
        @obj.push val.class.new
      else
        tval = val.dup rescue val
        @obj.push tval
      end
    end
    self.instance_eval do  # yes we want a singleton method here!
      def each(&block)
        @obj.each &block
      end
      def [](idx)
        @obj[idx]
      end        
    end 
  else
    @obj = obj.dup rescue obj  
  end
  @obj.freeze
  self.freeze
  self
end

Public Instance Methods

[](key) click to toggle source
# File lib/blockify.rb, line 318
def [](key)
  @obj[key]
end
blockify_elements(&block) click to toggle source
# File lib/blockify.rb, line 362
def blockify_elements(&block)
  @obj.dup.blockify_elements(&block) 
end
circular?(path = [], stack = {}, rtn = [false]) click to toggle source
# File lib/blockify.rb, line 359
def circular? (path = [], stack = {}, rtn = [false])
  return rtn.first
end
dup() click to toggle source
# File lib/blockify.rb, line 353
def dup  # get the innards and discard container
  @obj.dup rescue @obj
end
each(&block) click to toggle source
# File lib/blockify.rb, line 315
def each(&block)
  @obj.each &block
end
each_pair(&block) click to toggle source
# File lib/blockify.rb, line 312
def each_pair(&block)
  @obj.each_pair &block
end
find_element_path(path=[],done=[false], &block) click to toggle source
# File lib/blockify.rb, line 365
def find_element_path(path=[],done=[false], &block)
  @obj.dup.find_element_path(path,done, &block) 
end
find_element_paths(path=[],paths=[], &block) click to toggle source
# File lib/blockify.rb, line 368
def find_element_paths(path=[],paths=[], &block)
  @obj.dup.find_element_paths(path,paths, &block)
end
id() click to toggle source
# File lib/blockify.rb, line 347
def id  # get the original object_id
  @id
end
scan_elements(&block) click to toggle source
# File lib/blockify.rb, line 371
def scan_elements(&block)
  @obj.dup.scan_elements(&block)
end
taboo?() click to toggle source
# File lib/blockify.rb, line 356
def taboo?
  true
end
type() click to toggle source
# File lib/blockify.rb, line 350
def type
  @obj.class
end