class Confinement::Renderer::Erb

Public Instance Methods

call(source, view_context, path:, &block) click to toggle source
# File lib/confinement.rb, line 496
def call(source, view_context, path:, &block)
  method_name =
    if path
      "_#{Digest::MD5.hexdigest(source)}__#{path.to_s.tr("^A-Za-z", "_")}"
    else
      "_#{Digest::MD5.hexdigest(source)}"
    end

  compile(method_name, source, view_context, path: path)

  view_context.public_send(method_name, &block)
end

Private Instance Methods

compile(method_name, source, view_context, path:) click to toggle source
# File lib/confinement.rb, line 511
      def compile(method_name, source, view_context, path:)
        if !view_context.respond_to?(method_name)
          compiled_erb =
            Erubi::CaptureEndEngine
            .new(source, bufvar: :@_buf, ensure: true, yield_returns_buffer: true)
            .src

          eval_location =
            if path
              [path.to_s, 0]
            else
              []
            end

          view_context.instance_eval(<<~RUBY, *eval_location)
            def #{method_name}
              #{compiled_erb}
            end
          RUBY
        end
      end