lib/floe/workflow/choice_rule.rb in floe-0.3.0 vs lib/floe/workflow/choice_rule.rb in floe-0.3.1

- old
+ new

@@ -2,28 +2,32 @@ module Floe class Workflow class ChoiceRule class << self - def true?(payload, context, input) - build(payload).true?(context, input) - end - def build(payload) - data_expression = (payload.keys & %w[And Not Or]).empty? - if data_expression - Floe::Workflow::ChoiceRule::Data.new(payload) + if (sub_payloads = payload["Not"]) + Floe::Workflow::ChoiceRule::Not.new(payload, build_children([sub_payloads])) + elsif (sub_payloads = payload["And"]) + Floe::Workflow::ChoiceRule::And.new(payload, build_children(sub_payloads)) + elsif (sub_payloads = payload["Or"]) + Floe::Workflow::ChoiceRule::Or.new(payload, build_children(sub_payloads)) else - Floe::Workflow::ChoiceRule::Boolean.new(payload) + Floe::Workflow::ChoiceRule::Data.new(payload) end end + + def build_children(sub_payloads) + sub_payloads.map { |payload| build(payload) } + end end - attr_reader :next, :payload, :variable + attr_reader :next, :payload, :variable, :children - def initialize(payload) - @payload = payload + def initialize(payload, children = nil) + @payload = payload + @children = children @next = payload["Next"] @variable = payload["Variable"] end @@ -32,10 +36,10 @@ end private def variable_value(context, input) - @variable_value ||= Path.value(variable, context, input) + Path.value(variable, context, input) end end end end