Sha256: 85f238560a06b980a0cf9e65c301f9cbe9d003805d5b171696ebc5711303285a

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

module Zafu
  module Process
    # This module manages conditional rendering (if, else, elsif, case, when).
    module Conditional
      def r_if(cond = nil)
        cond ||= get_attribute_or_eval(false)
        return parser_error("condition error") unless cond
        expand_if(cond)
      end

      def r_case
        r_if('false')
      end

      def r_else
        r_elsif('true')
      end

      def r_when
        r_elsif
      end

      def r_elsif(cond = nil)
        return '' unless @context[:in_if]
        cond ||= get_attribute_or_eval(false)
        return parser_error("condition error") unless cond

        res = expand_with(:in_if => false, :markup => nil)

        # We use 'elsif' just in case there are more then one 'else' clause
        if markup = @context[:markup]
          @markup.tag ||= markup.tag
          @markup.steal_html_params_from(@params)
          markup.params.each do |k, v|
            next if @markup.param[k]
            @markup.set_param(k, v)
          end
          out "<% elsif #{cond} -%>#{@markup.wrap(res)}" # do not propagate
        else
          @markup.done = true # never wrap else/elsif clause
          out "<% elsif #{cond} -%>#{res}" # do not propagate
        end
      end

      # Expand blocks with conditional enabled (else, elsif, etc).
      def expand_if(condition, new_node_context = self.node)
        res = ""
        res << "<% if #{condition} -%>"
        res << @markup.wrap(expand_with(:node => new_node_context))
        res << expand_with(:in_if => true, :only => %w{else elsif when}, :markup => @markup)
        res << "<% end -%>"
        res
      end
    end # Context
  end # Process
end # Zafu

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
zafu-0.6.0 lib/zafu/process/conditional.rb