Class: Liquid::Condition
- Inherits:
-
Object
- Object
- Liquid::Condition
- Defined in:
- lib/liquid/condition.rb
Overview
Container for liquid nodes which conveniently wraps decision making logic
Example:
c = Condition.new('1', '==', '1')
c.evaluate #=> true
Direct Known Subclasses
Constant Summary collapse
- @@operators =
:nodoc:
{ '==' => lambda { |cond, left, right| cond.send(:equal_variables, left, right) }, '!=' => lambda { |cond, left, right| !cond.send(:equal_variables, left, right) }, '<>' => lambda { |cond, left, right| !cond.send(:equal_variables, left, right) }, '<' => :<, '>' => :>, '>=' => :>=, '<=' => :<=, 'contains' => lambda { |cond, left, right| left && right ? left.include?(right) : false } }
Instance Attribute Summary collapse
-
#attachment ⇒ Object
readonly
Returns the value of attribute attachment.
-
#left ⇒ Object
Returns the value of attribute left.
-
#operator ⇒ Object
Returns the value of attribute operator.
-
#right ⇒ Object
Returns the value of attribute right.
Class Method Summary collapse
Instance Method Summary collapse
- #and(condition) ⇒ Object
- #attach(attachment) ⇒ Object
- #else? ⇒ Boolean
- #evaluate(context = Context.new) ⇒ Object
-
#initialize(left = nil, operator = nil, right = nil) ⇒ Condition
constructor
A new instance of Condition.
- #inspect ⇒ Object
- #or(condition) ⇒ Object
Constructor Details
#initialize(left = nil, operator = nil, right = nil) ⇒ Condition
Returns a new instance of Condition.
28 29 30 31 32 |
# File 'lib/liquid/condition.rb', line 28 def initialize(left = nil, operator = nil, right = nil) @left, @operator, @right = left, operator, right @child_relation = nil @child_condition = nil end |
Instance Attribute Details
#attachment ⇒ Object (readonly)
Returns the value of attribute attachment.
25 26 27 |
# File 'lib/liquid/condition.rb', line 25 def @attachment end |
#left ⇒ Object
Returns the value of attribute left.
26 27 28 |
# File 'lib/liquid/condition.rb', line 26 def left @left end |
#operator ⇒ Object
Returns the value of attribute operator.
26 27 28 |
# File 'lib/liquid/condition.rb', line 26 def operator @operator end |
#right ⇒ Object
Returns the value of attribute right.
26 27 28 |
# File 'lib/liquid/condition.rb', line 26 def right @right end |
Class Method Details
.operators ⇒ Object
21 22 23 |
# File 'lib/liquid/condition.rb', line 21 def self.operators @@operators end |
Instance Method Details
#and(condition) ⇒ Object
51 52 53 |
# File 'lib/liquid/condition.rb', line 51 def and(condition) @child_relation, @child_condition = :and, condition end |
#attach(attachment) ⇒ Object
55 56 57 |
# File 'lib/liquid/condition.rb', line 55 def attach() @attachment = end |
#else? ⇒ Boolean
59 60 61 |
# File 'lib/liquid/condition.rb', line 59 def else? false end |
#evaluate(context = Context.new) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/liquid/condition.rb', line 34 def evaluate(context = Context.new) result = interpret_condition(left, right, operator, context) case @child_relation when :or result || @child_condition.evaluate(context) when :and result && @child_condition.evaluate(context) else result end end |
#inspect ⇒ Object
63 64 65 |
# File 'lib/liquid/condition.rb', line 63 def inspect "#<Condition #{[@left, @operator, @right].compact.join(' ')}>" end |
#or(condition) ⇒ Object
47 48 49 |
# File 'lib/liquid/condition.rb', line 47 def or(condition) @child_relation, @child_condition = :or, condition end |