An Isolator for CLR interfaces. this implements all the methods that are defined on the interface.
Implementation of the template method that creates an isolator for an interface defined in a CLR language.
# File lib/caricature/clr/isolator.rb, line 201 201: def initialize(context) 202: super 203: sklass = context.subject 204: @descriptor = ClrInterfaceDescriptor.new sklass 205: build_isolation sklass 206: end
builds the actual isolator for the CLR interface
# File lib/caricature/clr/isolator.rb, line 214 214: def create_isolation_for(subj) 215: proxy_members = @descriptor.instance_members 216: events = @descriptor.events 217: 218: klass = Object.const_set(class_name(subj), Class.new) 219: klass.class_eval do 220: 221: include subj 222: include Interception 223: 224: proxy_members.each do |mem| 225: nm = mem.name.to_s.to_sym 226: define_method nm do |*args| 227: b = nil 228: b = Proc.new { yield } if block_given? 229: isolation_context.send_message(nm, mem.return_type, *args, &b) 230: end 231: end 232: 233: 234: end 235: 236: evts = events.collect do |evt| 237: %(add remove).inject("") do |res, nm| 238: res << def #{"self." unless evt.instance_member?}#{nm}_#{evt.event_name}(block) isolation_context.#{nm}_event_subscription('#{evt.event_name}', :#{evt.instance_member? ? "instance" : "class"}, block)end 239: end 240: end.join("\n") 241: klass.class_eval evts 242: 243: klass 244: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.