Sha256: 5fbf93791cc63f011999a7712afcced33da1b4b80fc3d09b5c8a0150665fdec4
Contents?: true
Size: 1.84 KB
Versions: 3
Compression:
Stored size: 1.84 KB
Contents
module Liquid class Case < Block Syntax = /(#{QuotedFragment})/ WhenSyntax = /(#{QuotedFragment})(?:(?:\s+or\s+|\s*\,\s*)(#{QuotedFragment}.*))?/ def initialize(tag_name, markup, tokens, context) @blocks = [] if markup =~ Syntax @left = $1 else raise SyntaxError.new("Syntax Error in tag 'case' - Valid syntax: case [condition]") end super end def unknown_tag(tag, markup, tokens) @nodelist = [] case tag when 'when' record_when_condition(markup) when 'else' record_else_condition(markup) else super end end def render(context) context.stack do execute_else_block = true @blocks.inject([]) do |output, block| if block.else? return render_all(block.attachment, context) if execute_else_block elsif block.evaluate(context) execute_else_block = false output += render_all(block.attachment, context) end output end end end private def record_when_condition(markup) while markup # Create a new nodelist and assign it to the new block if not markup =~ WhenSyntax raise SyntaxError.new("Syntax Error in tag 'case' - Valid when condition: {% when [condition] [or condition2...] %} ") end markup = $2 block = Condition.new(@left, '==', $1) block.attach(@nodelist) @blocks.push(block) end end def record_else_condition(markup) if not markup.strip.empty? raise SyntaxError.new("Syntax Error in tag 'case' - Valid else condition: {% else %} (no parameters) ") end block = ElseCondition.new block.attach(@nodelist) @blocks << block end end Template.register_tag('case', Case) end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
locomotive_liquid-2.2.3 | lib/liquid/tags/case.rb |
locomotive_liquid-2.2.2 | lib/liquid/tags/case.rb |
locomotive_liquid-2.1.3 | lib/liquid/tags/case.rb |