1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
# -*- coding: utf-8 -*-
require "delayer/deferred/deferredable/chainable"
require "delayer/deferred/deferredable/node_sequence"
module Delayer::Deferred::Chain
class Base
include Delayer::Deferred::Deferredable::NodeSequence
include Delayer::Deferred::Deferredable::Chainable
def initialize(&proc)
fail Error, "Delayer::Deferred::Chain can't create instance." if self.class == Delayer::Deferred::Chain::Base
@proc = proc
end
def activate(response)
change_sequence(:activate)
if evaluate?(response)
@proc.(response.value)
else
response
end
ensure
change_sequence(:complete)
end
def inspect
"#<#{self.class} seq:#{sequence.name} child:#{has_child?}>"
end
def node_name
@proc.source_location.join(':'.freeze)
end
end
end
|