class Moguro::Handlers::MethodHandler

Public Class Methods

new(class_handler, name, arguments_contract: nil, return_value_contract: nil) click to toggle source
# File lib/moguro/handlers/method_handler.rb, line 6
def initialize(class_handler, name, arguments_contract: nil, return_value_contract: nil)
  @class_handler = class_handler
  @name = name
  @arguments_contract =
    if arguments_contract.nil?
      arguments_contract
    else
      PreconditionContract.new(klass, arguments_contract, reference)
    end
  @return_value_contract =
    if return_value_contract.nil?
      return_value_contract
    else
      PostconditionContract.new(klass, return_value_contract, reference)
    end
end

Public Instance Methods

module() click to toggle source
Calls superclass method
# File lib/moguro/handlers/method_handler.rb, line 23
def module
  m = Module.new

  arguments_contract = @arguments_contract
  return_value_contract = @return_value_contract

  arguments_contract_cb = lambda { |klass, args|
    arguments_contract&.verify!(klass, args)
  }

  return_value_contract_cb = lambda { |klass, results|
    return_value_contract&.verify!(klass, results)
  }
  name = @name
  m.module_eval do
    define_method(name) do |*args, &block|
      arguments_contract_cb.call(self, args)
      *results = super(*args, &block)
      return_value_contract_cb.call(self, results)
    end
  end
  m
end
reference() click to toggle source
# File lib/moguro/handlers/method_handler.rb, line 47
def reference
  @reference ||= MethodReference.new(
    method
  )
end

Private Instance Methods

klass() click to toggle source
# File lib/moguro/handlers/method_handler.rb, line 63
def klass
  @klass ||= @class_handler.klass
end
method() click to toggle source
# File lib/moguro/handlers/method_handler.rb, line 59
def method
  @method ||= klass.instance_method(@name)
end
parameters() click to toggle source
# File lib/moguro/handlers/method_handler.rb, line 55
def parameters
  @parameters ||= method.parameters
end