Module: WillPaginate

Defined in:
lib/will_paginate.rb,
lib/will_paginate/finder.rb,
lib/will_paginate/version.rb,
lib/will_paginate/collection.rb,
lib/will_paginate/named_scope.rb,
lib/will_paginate/deserializer.rb,
lib/will_paginate/view_helpers.rb

Overview

You will paginate!

First read about WillPaginate::Finder::ClassMethods, then see WillPaginate::ViewHelpers. The magical array you’re handling in-between is WillPaginate::Collection.

Happy paginating!

Defined Under Namespace

Modules: Deprecation, Deserializer, Finder, NamedScope, VERSION, ViewHelpers Classes: Collection, InvalidPage, LinkRenderer

Class Method Summary collapse

Class Method Details

.enableObject

shortcut for enable_actionpack and enable_activerecord combined



13
14
15
16
17
# File 'lib/will_paginate.rb', line 13

def enable
  enable_actionpack
  enable_activerecord
  enable_activeresource
end

.enable_actionpackObject

hooks WillPaginate::ViewHelpers into ActionView::Base



20
21
22
23
24
25
26
27
28
# File 'lib/will_paginate.rb', line 20

def enable_actionpack
  return if ActionView::Base.instance_methods.include? 'will_paginate'
  require 'will_paginate/view_helpers'
  ActionView::Base.send :include, ViewHelpers

  if defined?(ActionController::Base) and ActionController::Base.respond_to? :rescue_responses
    ActionController::Base.rescue_responses['WillPaginate::InvalidPage'] = :not_found
  end
end

.enable_activerecordObject

hooks WillPaginate::Finder into ActiveRecord::Base and classes that deal with associations



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/will_paginate.rb', line 32

def enable_activerecord
  return if ActiveRecord::Base.respond_to? :paginate
  require 'will_paginate/finder'
  ActiveRecord::Base.send :include, Finder

  # support pagination on associations
  a = ActiveRecord::Associations
  returning([ a::AssociationCollection ]) { |classes|
    # detect http://dev.rubyonrails.org/changeset/9230
    unless a::HasManyThroughAssociation.superclass == a::HasManyAssociation
      classes << a::HasManyThroughAssociation
    end
  }.each do |klass|
    klass.send :include, Finder::ClassMethods
    klass.class_eval { alias_method_chain :method_missing, :paginate }
  end
end

.enable_activeresourceObject



50
51
52
53
54
55
56
57
58
59
# File 'lib/will_paginate.rb', line 50

def enable_activeresource
  unless defined?(ActiveResource::Base)
    $stderr.puts "Can't find ActiveResource.  `gem install activeresource` to correct this."
    return
  end

  return if ActiveResource::Base.respond_to? :instantiate_collection_with_collection      
  require 'will_paginate/deserializer'
  ActiveResource::Base.class_eval { include Deserializer }
end

.enable_named_scope(patch = true) ⇒ Object

Enable named_scope, a feature of Rails 2.1, even if you have older Rails (tested on Rails 2.0.2 and 1.2.6).

You can pass false for patch parameter to skip monkeypatching associations. Use this if you feel that named_scope broke has_many, has_many :through or has_and_belongs_to_many associations in your app. By passing false, you can still use named_scope in your models, but not through associations.



69
70
71
72
73
74
75
# File 'lib/will_paginate.rb', line 69

def enable_named_scope(patch = true)
  return if defined? ActiveRecord::NamedScope
  require 'will_paginate/named_scope'
  require 'will_paginate/named_scope_patch' if patch

  ActiveRecord::Base.send :include, WillPaginate::NamedScope
end