Class: Liquid2::TernaryExpression

Inherits:
Expression show all
Defined in:
lib/liquid2/expressions/filtered.rb

Overview

An inline conditional expression.

Instance Attribute Summary collapse

Attributes inherited from Expression

#token

Instance Method Summary collapse

Methods inherited from Expression

#scope

Constructor Details

#initialize(token, left, condition, alternative, filters, tail_filters) ⇒ TernaryExpression

Returns a new instance of TernaryExpression.

Parameters:



40
41
42
43
44
45
46
47
# File 'lib/liquid2/expressions/filtered.rb', line 40

def initialize(token, left, condition, alternative, filters, tail_filters)
  super(token)
  @left = left
  @condition = condition
  @alternative = alternative
  @filters = filters
  @tail_filters = tail_filters
end

Instance Attribute Details

#filtersObject (readonly)

Returns the value of attribute filters.



33
34
35
# File 'lib/liquid2/expressions/filtered.rb', line 33

def filters
  @filters
end

#tail_filtersObject (readonly)

Returns the value of attribute tail_filters.



33
34
35
# File 'lib/liquid2/expressions/filtered.rb', line 33

def tail_filters
  @tail_filters
end

Instance Method Details

#childrenObject



71
72
73
74
75
76
77
78
# File 'lib/liquid2/expressions/filtered.rb', line 71

def children
  # @type var nodes: Array[untyped]
  nodes = [@left, @condition]
  nodes << @alternative if @alternative
  nodes.concat(@filters) if @filters
  nodes.concat(@tail_filters) if @tail_filters
  nodes
end

#evaluate(context) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/liquid2/expressions/filtered.rb', line 49

def evaluate(context)
  rv = nil

  if @condition.evaluate(context)
    rv = @left.evaluate(context)
  elsif @alternative
    rv = context.evaluate(@alternative)
    index = 0
    while (filter = @filters[index])
      rv = filter.evaluate(rv, context)
      index += 1
    end
  end

  index = 0
  while (filter = @tail_filters[index])
    rv = filter.evaluate(rv, context)
    index += 1
  end
  rv
end