A proxy to Ruby objects that records method calls this implements all the instance methods that are defined on the class.
implemented template method for creating Ruby isolations
# File lib/caricature/isolator.rb, line 243
243: def initialize(context)
244: super
245: klass = @context.subject.respond_to?(:class_eval) ? @context.subject : @context.subject.class
246: inst = @context.subject.respond_to?(:class_eval) ? nil : @context.subject
247: # inst = @context.subject.respond_to?(:class_eval) ? @context.subject.new : @context.subject
248: @descriptor = RubyObjectDescriptor.new klass
249: build_isolation klass, inst
250: end
access to the proxied subject
# File lib/caricature/isolator.rb, line 268
268: def ___super___
269: isolation_context.instance
270: end
creates the ruby isolator for the specified subject
# File lib/caricature/isolator.rb, line 258
258: def create_isolation_for(subj)
259: imembers = @descriptor.instance_members
260: cmembers = @descriptor.class_members
261:
262: klass = Object.const_set(class_name(subj), Class.new(subj))
263: klass.class_eval do
264:
265: include Interception
266:
267: # access to the proxied subject
268: def ___super___
269: isolation_context.instance
270: end
271:
272: imembers.each do |mn|
273: mn = mn.name.to_s.to_sym
274: define_method mn do |*args|
275: b = nil
276: b = Proc.new { yield } if block_given?
277: isolation_context.send_message(mn, nil, *args, &b)
278: end
279: end
280:
281: def initialize(*args)
282: self
283: end
284:
285: cmembers.each do |mn|
286: mn = mn.name.to_s.to_sym
287: define_cmethod mn do |*args|
288: return if mn.to_s =~ /$(singleton_)?method_added/ and args.first.to_s =~ /$(singleton_)?method_added/
289: b = nil
290: b = Proc.new { yield } if block_given?
291: isolation_context.send_class_message(mn, nil, *args, &b)
292: end
293: end
294:
295: end
296:
297: klass
298: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.