Method: ActionView::Base#_run

Defined in:
actionview/lib/action_view/base.rb

#_run(method, template, locals, buffer, add_to_stack: true, has_strict_locals: false, &block) ⇒ Object



261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
# File 'actionview/lib/action_view/base.rb', line 261

def _run(method, template, locals, buffer, add_to_stack: true, has_strict_locals: false, &block)
  _old_output_buffer, _old_virtual_path, _old_template = @output_buffer, @virtual_path, @current_template
  @current_template = template if add_to_stack
  @output_buffer = buffer

  if has_strict_locals
    begin
      public_send(method, locals, buffer, **locals, &block)
    rescue ArgumentError => argument_error
      raise(
        ArgumentError,
        argument_error.
          message.
            gsub("unknown keyword:", "unknown local:").
            gsub("missing keyword:", "missing local:").
            gsub("no keywords accepted", "no locals accepted").
            concat(" for #{@current_template.short_identifier}")
      )
    end
  else
    public_send(method, locals, buffer, &block)
  end
ensure
  @output_buffer, @virtual_path, @current_template = _old_output_buffer, _old_virtual_path, _old_template
end