public
Fork of mislav/will_paginate
Description: Most awesome pagination solution for Rails
Homepage: http://github.com/mislav/will_paginate/wikis
Clone URL: git://github.com/technoweenie/will_paginate.git
opt-in for named_scope with WillPaginate.enable_named_scope (because of 
heavy monkeypatching, it's off by default)
mislav (author)
Sat Apr 05 07:37:12 -0700 2008
commit  e65d717597ff6164d14efdb298b045c478c6ba7c
tree    a6b82e322dc174fd897e44b39bd939d061e649b8
parent  17a05b7d173364214125978ce1a7c73958407899
...
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
 
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 
 
 
 
 
 
 
 
 
 
98
99
100
...
33
34
35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
37
38
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
41
42
43
44
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
47
48
49
50
51
52
53
54
55
56
57
58
0
@@ -33,68 +33,26 @@ module WillPaginate
0
       require 'will_paginate/finder'
0
       ActiveRecord::Base.class_eval { include Finder }
0
 
0
- if patch_named_scope = !defined?(ActiveRecord::NamedScope)
0
- # bring in a Rails 2.1 feature
0
- require 'will_paginate/named_scope'
0
-
0
- ActiveRecord::Base.class_eval do
0
- include WillPaginate::NamedScope
0
- end
0
-
0
- ActiveRecord::Associations::AssociationProxy.class_eval do
0
- protected
0
- def with_scope(*args, &block)
0
- @reflection.klass.send :with_scope, *args, &block
0
- end
0
- end
0
- end
0
-
0
       # support pagination on associations
0
       [ ActiveRecord::Associations::AssociationCollection,
0
           ActiveRecord::Associations::HasManyThroughAssociation ].each do |klass|
0
         klass.class_eval do
0
- protected
0
- def method_missing(method, *args)
0
- if @target.respond_to?(method) || (!@reflection.klass.respond_to?(method) && Class.respond_to?(method))
0
- if block_given?
0
- super { |*block_args| yield(*block_args) }
0
- else
0
- super
0
- end
0
- elsif @reflection.klass.scopes.include?(method)
0
- @reflection.klass.scopes[method].call(self, *args)
0
- else
0
- with_scope construct_scope do
0
- if block_given?
0
- @reflection.klass.send(method, *args) { |*block_args| yield(*block_args) }
0
- else
0
- @reflection.klass.send(method, *args)
0
- end
0
- end
0
- end
0
- end
0
- end if patch_named_scope
0
-
0
- klass.class_eval do
0
           include Finder::ClassMethods
0
           alias_method_chain :method_missing, :paginate
0
         end
0
       end
0
+ end
0
 
0
- ActiveRecord::Associations::HasAndBelongsToManyAssociation.class_eval do
0
- protected
0
- def method_missing(method, *args, &block)
0
- if @target.respond_to?(method) || (!@reflection.klass.respond_to?(method) && Class.respond_to?(method))
0
- super
0
- elsif @reflection.klass.scopes.include?(method)
0
- @reflection.klass.scopes[method].call(self, *args)
0
- else
0
- @reflection.klass.with_scope(:find => { :conditions => @finder_sql, :joins => @join_sql, :readonly => false }) do
0
- @reflection.klass.send(method, *args, &block)
0
- end
0
- end
0
- end
0
- end if ActiveRecord::VERSION::MAJOR < 2 and patch_named_scope
0
+ # Enable named_scope, a feature of Rails 2.1, even if you have older Rails
0
+ # (tested on Rails 2.0.2 and 1.2.6).
0
+ def enable_named_scope(patch = true)
0
+ return if defined? ActiveRecord::NamedScope
0
+ require 'will_paginate/named_scope'
0
+ require 'will_paginate/named_scope_patch' if patch
0
+
0
+ ActiveRecord::Base.class_eval do
0
+ include WillPaginate::NamedScope
0
+ end
0
     end
0
   end
0
 
...
3
4
5
 
6
7
8
...
3
4
5
6
7
8
9
0
@@ -3,6 +3,7 @@ require 'lib/activerecord_test_case'
0
 
0
 require 'will_paginate'
0
 WillPaginate.enable_activerecord
0
+WillPaginate.enable_named_scope
0
 
0
 class FinderTest < ActiveRecordTestCase
0
   fixtures :topics, :replies, :users, :projects, :developers_projects

Comments

    No one has commented yet.