class Sablon::Processor::Document::ConditionalHandler
Handles conditional blocks in the template
Public Class Methods
new()
click to toggle source
Calls superclass method
Sablon::Processor::Document::FieldHandler::new
# 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