class Tengu::Receiver

Public Class Methods

new(message) click to toggle source
# File lib/tengu/receiver.rb, line 5
def initialize(message)
  @message = message
  @args = nil
  @return = nil
end

Public Instance Methods

and_return(return_value) click to toggle source
# File lib/tengu/receiver.rb, line 16
def and_return(return_value)
  @return = return_value
  self
end
setup_allow(listeners, object) click to toggle source
# File lib/tengu/receiver.rb, line 21
def setup_allow(listeners, object)
  unless object.respond_to?(:_tengu_received?)
    object.instance_eval do
      define_singleton_method(:_tengu_received) do
        @_tengu_received ||= Hash.new { |hash, key| hash[key] = [] }
      end

      define_singleton_method(:_tengu_received?) do |message, args = []|
        if args.length > 0
          _tengu_received[message] && _tengu_received[message].include?(args)
        else
          _tengu_received.keys.include?(message)
        end
      end
    end
  end

  message = @message
  return_value = @return
  if object.is_a? Tengu::Double
    object.instance_eval do
      define_singleton_method message, -> (*args) { _tengu_received[message] << args; return_value }
    end
  else
    original_method = object.method(@message.to_sym)
    listeners.each { |listener| listener.notify(:override, [object, original_method]) }
    object.instance_eval do
      define_singleton_method message, -> (*args) { _tengu_received[message] << args; return_value }
    end
  end
end
with(*args) click to toggle source
# File lib/tengu/receiver.rb, line 11
def with(*args)
  @args = args
  self
end