Sha256: 5e0123e89468b70af81ada5e6be6c61718939ddbad3be5bd9995cac79479ba42

Contents?: true

Size: 1.43 KB

Versions: 5

Compression:

Stored size: 1.43 KB

Contents

require 'safemode'
require 'erb'

module ActionView
  module TemplateHandlers
    class SafeErb < TemplateHandler
      include Compilable rescue nil # does not exist prior Rails 2.1
      extend SafemodeHandler

      def self.line_offset
        0
      end

      def compile(template)
        # Rails 2.0 passes the template source, while Rails 2.1 passes the
        # template instance
        src = template.respond_to?(:source) ? template.source : template
        filename = template.filename rescue nil
        erb_trim_mode = '-'

        # code = ::ERB.new(src, nil, @view.erb_trim_mode).src
        code = ::ERB.new("<% __in_erb_template=true %>#{src}", nil, erb_trim_mode, '@output_buffer').src
        # Ruby 1.9+ prepends an encoding to the source. However this is
        # useless because you can only set an encoding on the first line
        src.sub(/\A#coding:.*\n/, '') : src

        code.gsub!('\\','\\\\\\') # backslashes would disappear in compile_template/modul_eval, so we escape them

        code = <<-CODE
          handler = ActionView::TemplateHandlers::SafeHaml
          assigns = handler.valid_assigns(@template.assigns)
          methods = handler.delegate_methods(self)
          code = %Q(#{code});

          box = Safemode::Box.new(self, methods, #{filename.inspect}, 0)
          box.eval(code, assigns, local_assigns, &lambda{ |*args| yield(*args) })
        CODE
        # puts code
        code
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
safemode-1.5.0 lib/action_view/template_handlers/safe_erb.rb
safemode-1.4.0 lib/action_view/template_handlers/safe_erb.rb
safemode-1.3.8 lib/action_view/template_handlers/safe_erb.rb
safemode-1.3.7 lib/action_view/template_handlers/safe_erb.rb
safemode-1.3.6 lib/action_view/template_handlers/safe_erb.rb