module ProgressiveRender::Rails::Controller

Rails controller methods, this module is installed into ActionController These methods should not generally be called by user code besides 'render'

Public Instance Methods

progressive_render(template = nil) click to toggle source
# File lib/progressive_render/rails/controller.rb, line 10
def progressive_render(template = nil)
  logger.warn %(DEPRECATED: calling 'progressive_render' directly in the controller
    is deprecated and will be removed in future versions.
    It is no longer necessary to explicitly call the render method.)
  render template
end
render(options = nil, extra_options = {}, &block) click to toggle source
Calls superclass method
# File lib/progressive_render/rails/controller.rb, line 17
def render(options = nil, extra_options = {}, &block)
  # Fall back to the ActionView renderer if we're on the main page load
  # OR we are being called from inside our own code (in_progressive_render?)
  if progressive_request.main_load? || in_progressive_render?
    super
  else
    in_progressive_render do
      # To preserve legacy behavior pass options through to resolve_path if it's a string
      # ActiveRecord more properly handles the path so use that when possible.
      template = options if options.is_a? String
      progressive_renderer.render_fragment resolve_path(template), progressive_request.fragment_name
    end
  end
end

Private Instance Methods

in_progressive_render() { || ... } click to toggle source

To prevent the render call from reentrancy we need to remember if we're in our own render path. Our rendering code calls 'render' to access the real view renderer so we need a way to fall back to it.

# File lib/progressive_render/rails/controller.rb, line 51
def in_progressive_render
  @in_progressive_render = true
  yield
  @in_progressive_render = false
end
in_progressive_render?() click to toggle source
# File lib/progressive_render/rails/controller.rb, line 45
def in_progressive_render?
  @in_progressive_render
end
resolve_path(template) click to toggle source
# File lib/progressive_render/rails/controller.rb, line 34
def resolve_path(template)
  tc = Rails::PathResolver::TemplateContext.new
  tc.type       = :controller
  tc.controller = request.params['controller']
  tc.action     = request.params['action']

  pr = Rails::PathResolver.new(tc)

  pr.path_for(template)
end