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