Sha256: 46afe3c49e4dd50f34db42f01784d9c9b7d6ba543389122483cba7981300e5e8

Contents?: true

Size: 1.82 KB

Versions: 2

Compression:

Stored size: 1.82 KB

Contents

require 'railroader/processors/template_processor'

# Processes ERB templates
# (those ending in .html.erb or .rthml).
class Railroader::ErbTemplateProcessor < Railroader::TemplateProcessor

  # s(:call, TARGET, :method, ARGS)
  def process_call exp
    target = exp.target
    if sexp? target
      target = process target
    end
    method = exp.method

    # _erbout is the default output variable for erb
    if node_type? target, :lvar and target.value == :_erbout
      if method == :concat or method == :<<
        @inside_concat = true
        exp.arglist = process(exp.arglist)
        @inside_concat = false

        if exp.second_arg
          raise "Did not expect more than a single argument to _erbout.concat"
        end

        arg = normalize_output(exp.first_arg)

        if arg.node_type == :str # ignore plain strings
          ignore
        else
          add_output arg
        end
      elsif method == :force_encoding
        ignore
      else
        abort "Unrecognized action on _erbout: #{method}"
      end
    elsif target == nil and method == :render
      exp.arglist = process(exp.arglist)
      make_render_in_view exp
    else
      exp.target = target
      exp.arglist = process(exp.arglist)
      exp
    end
  end

  # Process block, removing irrelevant expressions
  def process_block exp
    exp = exp.dup
    exp.shift
    if @inside_concat
      @inside_concat = false
      exp[0..-2].each do |e|
        process e
      end
      @inside_concat = true
      process exp.last
    else
      exp.map! do |e|
        res = process e
        if res.empty? or res == ignore
          nil
        elsif node_type?(res, :lvar) and res.value == :_erbout
          nil

        else
          res
        end
      end
      block = Sexp.new(:rlist).concat(exp).compact
      block.line(exp.line)
      block
    end
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
railroader-4.3.8 lib/railroader/processors/erb_template_processor.rb
railroader-4.3.7 lib/railroader/processors/erb_template_processor.rb