123456789_123456789_123456789_123456789_123456789_

Class: ActionView::Template::Renderable

Do not use. This class is for internal use only.
Relationships & Source Files
Inherits: Object
Defined in: actionview/lib/action_view/template/renderable.rb

Overview

Action View Renderable Template for objects that respond to #render_in

Class Method Summary

Instance Method Summary

Constructor Details

.new(renderable, &block) ⇒ Renderable

[ GitHub ]

  
# File 'actionview/lib/action_view/template/renderable.rb', line 7

def initialize(renderable, &block)
  @renderable = renderable
  @block = block
end

Instance Method Details

#format

[ GitHub ]

  
# File 'actionview/lib/action_view/template/renderable.rb', line 38

def format
  @renderable.try(:format)
end

#identifier

[ GitHub ]

  
# File 'actionview/lib/action_view/template/renderable.rb', line 12

def identifier
  @renderable.class.name
end

#render(context, locals)

[ GitHub ]

  
# File 'actionview/lib/action_view/template/renderable.rb', line 16

def render(context, locals)
  render_in_method = Kernel.instance_method(:method).bind_call(@renderable, :render_in)

  if render_in_method.arity == 1
    ActionView.deprecator.warn <<~WARN
      Action View support for #render_in without options is deprecated.

      Change #render_in to accept keyword arguments.
    WARN

    @renderable.render_in(context, &@block)
  else
    @renderable.render_in(context, locals: locals, &@block)
  end
rescue NameError
  if !@renderable.respond_to?(:render_in)
    raise ArgumentError, "'#{@renderable.inspect}' is not a renderable object. It must implement #render_in."
  else
    raise
  end
end