Module: ActionService::Invocation::InstanceMethods
- Defined in:
- lib/action_service/invocation.rb
Class Method Summary collapse
Instance Method Summary collapse
- #after_invocation(name, args, result) ⇒ Object
- #before_invocation(name, args, &block) ⇒ Object
- #perform_invocation(invocation) ⇒ Object
- #perform_invocation_with_interception(invocation, &block) ⇒ Object
Class Method Details
.append_features(base) ⇒ Object
94 95 96 97 98 99 100 |
# File 'lib/action_service/invocation.rb', line 94 def self.append_features(base) super base.class_eval do alias_method :perform_invocation_without_interception, :perform_invocation alias_method :perform_invocation, :perform_invocation_with_interception end end |
Instance Method Details
#after_invocation(name, args, result) ⇒ Object
132 133 134 |
# File 'lib/action_service/invocation.rb', line 132 def after_invocation(name, args, result) call_interceptors(self.class.after_invocation_interceptors, [name, args, result]) end |
#before_invocation(name, args, &block) ⇒ Object
128 129 130 |
# File 'lib/action_service/invocation.rb', line 128 def before_invocation(name, args, &block) call_interceptors(self.class.before_invocation_interceptors, [name, args], &block) end |
#perform_invocation(invocation) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/action_service/invocation.rb', line 109 def perform_invocation(invocation) if invocation.concrete? unless self.respond_to?(invocation.method_name) && self.class.has_export?(invocation.method_name) raise InvocationError, "no such exported method '#{invocation.method_name}'" end end params = invocation.params if invocation.concrete? || invocation.unexported_concrete? self.send(invocation.method_name, *params) else if invocation.block params = invocation.block_params + params invocation.block.call(invocation.public_method_name, *params) else self.send(invocation.method_name, *params) end end end |
#perform_invocation_with_interception(invocation, &block) ⇒ Object
102 103 104 105 106 107 |
# File 'lib/action_service/invocation.rb', line 102 def perform_invocation_with_interception(invocation, &block) return if before_invocation(invocation.method_name, invocation.params, &block) == false result = perform_invocation_without_interception(invocation) after_invocation(invocation.method_name, invocation.params, result) result end |