lib/haku/core.rb in haku-1.3.1 vs lib/haku/core.rb in haku-1.4.0
- old
+ new
@@ -12,10 +12,11 @@
prepend Callable
attr_reader :params
class_attribute :haku_inputs, default: []
+ class_attribute :haku_before_call_callbacks, default: []
class_attribute :haku_success_callbacks, default: []
class_attribute :haku_failure_callbacks, default: []
end
module ClassMethods
@@ -33,10 +34,14 @@
def input(*names)
self.haku_inputs += names
end
+ def before_call(*methods)
+ self.haku_before_call_callbacks += methods
+ end
+
def on_success(*methods)
self.haku_success_callbacks += methods
end
def on_failure(*methods)
@@ -46,17 +51,20 @@
Finish = Struct.new("Finish", :status, :payload)
module Callable
def call
- response = catch(:finish) { super }
+ response = catch(:finish) do
+ (self.class.send(:haku_before_call_callbacks) || []).each { |cb| send(cb) }
+ super
+ end
status = response.is_a?(Finish) ? response.status : :success
payload = response.is_a?(Finish) ? response.payload : response
Result.new(status, payload).tap do
- _haku_run_callbacks(status)
+ haku_run_callbacks(status)
end
end
end
def initialize(params={})
@@ -75,10 +83,10 @@
def failure!(data=nil)
throw :finish, Finish.new(:failure, data)
end
- def _haku_run_callbacks(status)
+ def haku_run_callbacks(status)
(self.class.send("haku_#{status}_callbacks") || []).each { |cb| send(cb) }
end
end
end