module PageletRails::Concerns::Controller

Public Instance Methods

layout_name() click to toggle source
# File lib/pagelet_rails/concerns/controller.rb, line 29
def layout_name
  layout = params[:layout] || pagelet_options.layout

  "pagelet_rails/#{layout}"
end
pagelet_request?() click to toggle source
# File lib/pagelet_rails/concerns/controller.rb, line 35
def pagelet_request?
  request.headers['X-Pagelet'].present? || params[:target_container]
end

Private Instance Methods

append_pagelet_view_paths() click to toggle source
# File lib/pagelet_rails/concerns/controller.rb, line 41
def append_pagelet_view_paths
  # lookup_context.prefixes.clear
  view = "#{controller_name}/views"
  if lookup_context.prefixes.exclude?(view)
    lookup_context.prefixes.unshift view
  end

  # https://github.com/rails/actionpack-action_caching/issues/32
  if lookup_context.formats.exclude?(:html)
    lookup_context.formats.unshift :html
  end
end
merge_original_pagelet_options() click to toggle source
# File lib/pagelet_rails/concerns/controller.rb, line 54
def merge_original_pagelet_options
  if params[:original_pagelet_options]
    opts = PageletRails::Encryptor.decode(params[:original_pagelet_options])
    pagelet_options(opts)
    pagelet_options(original_options: opts)
  end
end
pagelet_encoded_original_options(new_opts = {}) click to toggle source
# File lib/pagelet_rails/concerns/controller.rb, line 62
def pagelet_encoded_original_options new_opts = {}
  encode_data = pagelet_options.original_options.to_h
    .with_indifferent_access.except('remote').deep_merge(new_opts)
  PageletRails::Encryptor.encode(encode_data)
end
pagelet_render_remotely?() click to toggle source
# File lib/pagelet_rails/concerns/controller.rb, line 68
def pagelet_render_remotely?
  case pagelet_options.remote
  when :stream
    render_remotely = true
  when :turbolinks
    # render now if request coming from turbolinks
    is_turbolinks_request = request.headers['Turbolinks-Referrer'].present?
    render_remotely = !is_turbolinks_request
  when true, :ajax
    render_remotely = true
  when :ssi
    render_remotely = true
  else
    render_remotely = false
  end

  render_remotely
end
redirect_to(*args) click to toggle source
Calls superclass method
# File lib/pagelet_rails/concerns/controller.rb, line 87
def redirect_to *args
  begin
    redirect_url = url_for(*args)
    path_opts = Rails.application.routes.recognize_path(redirect_url)
  rescue ActionController::RoutingError
    return super
  end

  controller_class = path_opts[:controller].camelize.concat('Controller').safe_constantize
  is_pagelet = controller_class && controller_class.include?(PageletRails::Concerns::Controller)

  if is_pagelet
    options = args.extract_options!
    new_params = options.merge(original_pagelet_options: pagelet_encoded_original_options)

    render plain: pagelet(url_for(*args, new_params))
  else
    super
  end
end