Included Modules

Files

Caricature::ClrIsolator

A proxy to CLR objects that records method calls. this implements all the public instance methods of the class when you use it in ruby code When you use it in a CLR class you’re bound to CLR rules and it only overrides the methods that are marked as virtual. We also can’t isolate static or sealed types at the moment.

Public Class Methods

new(context) click to toggle source

Implementation of the template method that creates an isolator for a class defined in a CLR language.

     # File lib/caricature/clr/isolator.rb, line 114
114:     def initialize(context)
115:       super
116:       instance = nil
117:       sklass = context.subject
118:       unless context.subject.respond_to?(:class_eval)
119:         sklass = context.subject.class
120:         instance = context.subject
121:       end
122:       @descriptor = ClrClassDescriptor.new sklass
123:       instance ||= sklass.new unless sklass.to_clr_type.is_abstract
124:       build_isolation sklass, instance
125:     end
new(*args) click to toggle source
     # File lib/caricature/clr/isolator.rb, line 149
149:         def initialize(*args)
150:           self
151:         end

Public Instance Methods

___super___() click to toggle source

access to the proxied subject

     # File lib/caricature/clr/isolator.rb, line 145
145:         def ___super___
146:           isolation_context.instance
147:         end
create_isolation_for(subj) click to toggle source

builds the Isolator class for the specified subject

     # File lib/caricature/clr/isolator.rb, line 133
133:     def create_isolation_for(subj)
134:       members = @descriptor.instance_members
135:       class_members = @descriptor.class_members
136:       events = @descriptor.events
137:       class_events = @descriptor.class_events
138: 
139:       klass = Object.const_set(class_name(subj), Class.new(subj))
140:       klass.class_eval do
141: 
142:         include Interception
143: 
144:         # access to the proxied subject
145:         def ___super___
146:           isolation_context.instance
147:         end
148: 
149:         def initialize(*args)
150:           self
151:         end
152: 
153:         members.each do |mem|
154:           nm = mem.name.to_s.to_sym
155:           define_method nm do |*args|
156:             b = nil
157:             b = Proc.new { yield } if block_given?
158:             isolation_context.send_message(nm, mem.return_type, *args, &b)
159:           end unless nm == :to_string
160:         end
161: 
162:         class_members.each do |mn|
163:           mn = mn.name.to_s.to_sym
164:           define_cmethod mn do |*args|
165:             b = nil
166:             b = Proc.new { yield } if block_given?
167:             isolation_context.send_class_message(mn, nil, *args, &b)
168:           end
169:         end
170:         
171:        evts = (events + class_events).collect do |evt|
172:          %(add remove).inject("") do |res, nm|
173:            res <<            def #{"self." unless evt.instance_member?}#{nm}_#{evt.event_name}(block)  self.isolation_context.#{nm}_event_subscription('#{evt.event_name}', :#{evt.instance_member? ? "instance" : "class"}, block)end 
174:          end
175: 
176:         end.join("\n")
177: 
178:         klass.class_eval evts
179:         
180:         #puts evts
181: 
182:       end
183: 
184:       klass
185:     end
initialize_messenger() click to toggle source

initializes the messaging strategy for the isolator

     # File lib/caricature/clr/isolator.rb, line 128
128:     def initialize_messenger
129:       @context.messenger = ClrClassMessenger.new @context.expectations, @subject
130:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.