Method: CircularObjectContainer#initialize
- Defined in:
- lib/blockify.rb
#initialize(obj) ⇒ CircularObjectContainer
Returns a new instance of CircularObjectContainer.
299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 |
# 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 |