First read about WillPaginate::Finder::ClassMethods, then see WillPaginate::ViewHelpers. The magical array you’re handling in-between is WillPaginate::Collection.
Happy paginating!
# File lib/will_paginate.rb, line 52 def self.construct_count_options_from_args(*args) result = super result[0] = '*' if result[0].is_a?(String) and result[0] =~ /\.\*$/ result end
shortcut for enable_actionpack and enable_activerecord combined
# File lib/will_paginate.rb, line 14 def enable enable_actionpack enable_activerecord end
hooks WillPaginate::ViewHelpers into ActionView::Base
# File lib/will_paginate.rb, line 20 def enable_actionpack return if ActionView::Base.instance_methods.include_method? :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
hooks WillPaginate::Finder into ActiveRecord::Base and classes that deal with associations
# 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 # monkeypatch Rails ticket #2189: "count breaks has_many :through" ActiveRecord::Base.class_eval do protected def self.construct_count_options_from_args(*args) result = super result[0] = '*' if result[0].is_a?(String) and result[0] =~ /\.\*$/ result end end end
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.
# File lib/will_paginate.rb, line 68 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
Generated with the Darkfish Rdoc Generator 2.