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