Sha256: b85c46c3c5b3cc63f19557917a1f70a2b70a55fa5748283cd0ff5761a4a39c82

Contents?: true

Size: 1.51 KB

Versions: 3

Compression:

Stored size: 1.51 KB

Contents

module Pjax
  extend ActiveSupport::Concern

  included do
    layout proc { |c| pjax_request? ? pjax_layout : 'application' }
    helper_method :pjax_request?

    rescue_from Pjax::Unsupported, :with => :pjax_unsupported

    before_filter :strip_pjax_param, :if => :pjax_request?
    before_filter :set_pjax_url,     :if => :pjax_request?
  end

  class Error < StandardError; end
  class Unsupported < Error; end

  protected
    def pjax_request?
      env['HTTP_X_PJAX'].present?
    end

    def pjax_layout
      false
    end

    def pjax_container
      return unless pjax_request?
      request.headers['X-PJAX-Container']
    end

    def pjax_unsupported
      head :not_acceptable
    end

    # Call in a before_filter or in an action to disable pjax on an action.
    #
    # Examples
    #
    #     before_filter :prevent_pjax!
    #
    #     def login
    #       prevent_pjax!
    #       # ...
    #     end
    #
    def prevent_pjax!
      raise Pjax::Unsupported if pjax_request?
    end

    def strip_pjax_param
      params.delete(:_pjax)
      request.env['QUERY_STRING'] = request.env['QUERY_STRING'].sub(/_pjax=[^&]+&?/, '')

      request.env.delete('rack.request.query_string')
      request.env.delete('rack.request.query_hash')
      request.env.delete('action_dispatch.request.query_parameters')

      request.instance_variable_set('@original_fullpath', nil)
      request.instance_variable_set('@fullpath', nil)
    end

    def set_pjax_url
      response.headers['X-PJAX-URL'] = request.url
    end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
pjax_rails-0.3.4 lib/pjax.rb
pjax_rails-0.3.3 lib/pjax.rb
pjax_rails-0.3.2 lib/pjax.rb