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