Class: Moguro::Handlers::MethodHandler
- Inherits:
-
Object
- Object
- Moguro::Handlers::MethodHandler
- Defined in:
- lib/moguro/handlers/method_handler.rb
Overview
Direct Known Subclasses
Instance Method Summary collapse
-
#initialize(class_handler, name, arguments_contract: nil, return_value_contract: nil) ⇒ MethodHandler
constructor
A new instance of MethodHandler.
- #module ⇒ Object
- #reference ⇒ Object
Constructor Details
#initialize(class_handler, name, arguments_contract: nil, return_value_contract: nil) ⇒ MethodHandler
Returns a new instance of MethodHandler.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 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 |
Instance Method Details
#module ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# 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 ⇒ Object
47 48 49 50 51 |
# File 'lib/moguro/handlers/method_handler.rb', line 47 def reference @reference ||= MethodReference.new( method ) end |