class Sablon::Processor::Document::ConditionalHandler

Handles conditional blocks in the template

Public Class Methods

new() click to toggle source
# File lib/sablon/processor/document/field_handlers.rb, line 59
def initialize
  super(/([^ ]+):if(?:\(([^)]+)\))?/)
end

Public Instance Methods

build_statement(constructor, field, _options = {}) click to toggle source
# File lib/sablon/processor/document/field_handlers.rb, line 63
def build_statement(constructor, field, _options = {})
  expr_name = field.expression.match(@pattern).to_a[1]
  args = [
    # end expression (first arg)
    "#{expr_name}:endIf",
    # sub block patterns to check for
    /(#{expr_name}):els[iI]f(?:\(([^)]+)\))?/,
    /(#{expr_name}):else/
  ]
  blocks = process_blocks(constructor.consume_multi_block(*args))
  Statement::Condition.new(blocks)
end

Private Instance Methods

process_blocks(blocks) click to toggle source

Processes the main expression from each start field block to simplify usage in Statement

# File lib/sablon/processor/document/field_handlers.rb, line 80
def process_blocks(blocks)
  blocks.map do |block|
    pattern = /([^ ]+):(?:if|els[iI]f|else)(?:\(([^)]+)\))?/
    expr, pred = block.start_field.expression.match(pattern).to_a[1..2]
    expr = Expression.parse(expr)
    #
    { condition_expr: expr, predicate: pred, block: block }
  end
end