Sha256: 9e6d126828555b74cba0e0d533e30886052fafd9230129d3c6956cfcb16b185f

Contents?: true

Size: 1.94 KB

Versions: 1

Compression:

Stored size: 1.94 KB

Contents

module Caricature

  # Encapsulates sending messages to CLR class or instance isolations
  class ClrClassMessenger < Messenger

    protected
    
      # deliver the message to the receiving isolation
      def internal_deliver(mode, method_name, return_type, *args, &b)   
        exp = expectations.find(method_name, mode, *args)
        bl = record_call(method_name, mode, exp, *args, &b)
        is_value_type = return_type && return_type != System::Void.to_clr_type && return_type.is_value_type 
        res = nil
        if exp
          block = exp.block || b
          res = instance.__send__(method_name, *args, &block) if exp.super_before?
          exp.event_recorder do |ev_nm, ev_ar, ev_h|
            recorder.record_event_raise ev_nm, mode, *ev_ar, &ev_h if ev_nm
          end if recorder && exp
          res = exp.execute *args, &bl
          res = instance.__send__(method_name, *args, &block) if !exp.super_before? and exp.call_super?
        end
        res ||= System::Activator.create_instance(return_type) if is_value_type     
        res
      end

  end

  # Encapsulates sending messages to CLR interface isolations
  class ClrInterfaceMessenger < Messenger

    protected

      # deliver the message to the receiving isolation
      def internal_deliver(mode, method_name, return_type, *args, &b)    
        res = nil                                               
        is_value_type = return_type && return_type != System::Void.to_clr_type && return_type.is_value_type
        exp = expectations.find(method_name, mode, *args)
        exp.event_recorder do |ev_nm, ev_ar, ev_h|
          recorder.record_event_raise ev_nm, mode, *ev_ar, &ev_h if ev_nm
        end if recorder && exp
        bl = record_call(method_name, mode, exp, *args, &b)
        res = exp.execute *args, &bl if exp
        res ||= System::Activator.create_instance(return_type) if is_value_type  
        res
      end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
caricature-0.7.5 lib/caricature/clr/messenger.rb