class Waterfall::Chain
Constants
- MAPPING_ERROR_MESSAGE
Public Class Methods
new(root, mapping_or_var_name)
click to toggle source
# File lib/waterfall/predicates/chain.rb, line 4 def initialize(root, mapping_or_var_name) @root, @mapping_or_var_name = root, mapping_or_var_name end
Public Instance Methods
call() { |*yield_args| ... }
click to toggle source
# File lib/waterfall/predicates/chain.rb, line 8 def call output = yield(*yield_args) if waterfall?(output) map_waterfalls(output, @mapping_or_var_name || {}) else @root.update_outflow(@mapping_or_var_name, output) if @mapping_or_var_name end end
map_waterfalls(child_waterfall, mapping)
click to toggle source
# File lib/waterfall/predicates/chain.rb, line 18 def map_waterfalls(child_waterfall, mapping) child_waterfall.call unless child_waterfall.has_flown? raise IncorrectChainingArgumentError.new(MAPPING_ERROR_MESSAGE) unless mapping.is_a?(Hash) mapping.each do |k, v| @root.update_outflow(k, child_waterfall.outflow[v]) end @root.send :_add_executed_flow, child_waterfall if child_waterfall.dammed? @root.dam child_waterfall.error_pool, child_waterfall.error_pool_context end self end