will_paginate_couchrest 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +1 -1
- data/README.rdoc +11 -1
- data/VERSION +1 -1
- data/lib/will_paginate_couchrest.rb +27 -12
- data/spec/will_paginate_couchrest_spec.rb +24 -3
- metadata +28 -14
data/LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -27,8 +27,18 @@ Automatically generate views with an extra reduce method used to generate the to
|
|
27
27
|
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
# Parameter :per_page must be provided or an error will be raised.
|
31
|
+
# Parameter :page will assume 1 if nil.
|
32
|
+
@users = User.paginate_by_nickname :page => 1, :per_page => 10, :key => 'Lorena'
|
31
33
|
|
34
|
+
# For pagination on all documents
|
35
|
+
@users = User.paginate_all :per_page => 10
|
36
|
+
|
37
|
+
# Standard views are created at the same time
|
38
|
+
@users = User.by_nickname :key => 'Lorena'
|
39
|
+
|
40
|
+
|
41
|
+
# Use standard will_paginate method or redefine as you see fit
|
32
42
|
will_paginate @users
|
33
43
|
|
34
44
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
@@ -10,10 +10,10 @@ module CouchRest
|
|
10
10
|
end
|
11
11
|
|
12
12
|
module ClassMethods
|
13
|
-
# Define a CouchDB paginate view. The name of the view will be the concatenation
|
13
|
+
# Define a CouchDB will paginate view. The name of the view will be the concatenation
|
14
14
|
# of <tt>paginate_by</tt> and the keys joined by <tt>_and_</tt>
|
15
|
-
#
|
16
|
-
# ==== Example views:
|
15
|
+
#
|
16
|
+
# ==== Example paginated views:
|
17
17
|
#
|
18
18
|
# class Post
|
19
19
|
# # view with default options
|
@@ -64,7 +64,6 @@ module CouchRest
|
|
64
64
|
#
|
65
65
|
# For further details on <tt>view_by</tt>'s other options, please see the
|
66
66
|
# standard documentation.
|
67
|
-
|
68
67
|
def paginated_view_by(*keys)
|
69
68
|
|
70
69
|
# Prepare the Traditional view
|
@@ -101,9 +100,18 @@ module CouchRest
|
|
101
100
|
paginated_view('#{view_name}', options)
|
102
101
|
end
|
103
102
|
RUBY_EVAL
|
104
|
-
|
105
103
|
end
|
106
104
|
|
105
|
+
##
|
106
|
+
# Generate a Will Paginate collection from all the available
|
107
|
+
# documents stored with a matching couchrest-type.
|
108
|
+
#
|
109
|
+
# Requires no declaration as the 'all' view is built into couchrest
|
110
|
+
# Extended Documents.
|
111
|
+
#
|
112
|
+
def paginate_all(options = {})
|
113
|
+
paginated_view(:all, options)
|
114
|
+
end
|
107
115
|
|
108
116
|
protected
|
109
117
|
|
@@ -117,14 +125,21 @@ module CouchRest
|
|
117
125
|
|
118
126
|
::WillPaginate::Collection.create( options[:page], options[:per_page] ) do |pager|
|
119
127
|
# perform view count first (should create designs if missing)
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
options.
|
124
|
-
|
125
|
-
|
126
|
-
|
128
|
+
if view_name.to_sym == :all
|
129
|
+
pager.total_entries = count()
|
130
|
+
else
|
131
|
+
total = view( view_name, options.update(:reduce => true) )['rows'].pop
|
132
|
+
pager.total_entries = total ? total['value'] : 0
|
133
|
+
end
|
134
|
+
p_options = options.merge(
|
135
|
+
:design_doc => self.to_s, :view_name => view_name,
|
136
|
+
:include_docs => true
|
127
137
|
)
|
138
|
+
# Only provide the reduce parameter when necessary. This is when the view has
|
139
|
+
# been set with a reduce method and requires the reduce boolean parameter
|
140
|
+
# to be either true or false on all requests.
|
141
|
+
p_options[:reduce] = false unless view_name.to_sym == :all
|
142
|
+
results = paginate(p_options)
|
128
143
|
pager.replace( results )
|
129
144
|
end
|
130
145
|
end
|
@@ -26,6 +26,22 @@ describe CouchRest::Mixins::WillPaginate do
|
|
26
26
|
# @some_doc.stub(:id).and_return(123)
|
27
27
|
end
|
28
28
|
|
29
|
+
it "should accept request when no results" do
|
30
|
+
docs = SomeDoc.paginate_by_name(:per_page => 5)
|
31
|
+
docs.total_entries.should eql(0)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should accept request without page" do
|
35
|
+
docs = nil
|
36
|
+
lambda { docs = SomeDoc.paginate_by_name(:per_page => 5) }.should_not raise_error
|
37
|
+
docs.current_page.should eql(1)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should throw an exception when missing per_page parameter" do
|
41
|
+
lambda { SomeDoc.paginate_by_name() }.should raise_error
|
42
|
+
end
|
43
|
+
|
44
|
+
|
29
45
|
describe "performing pagination with lots of documents" do
|
30
46
|
|
31
47
|
before(:each) do
|
@@ -38,7 +54,7 @@ describe CouchRest::Mixins::WillPaginate do
|
|
38
54
|
|
39
55
|
it "should produce a will paginate collection" do
|
40
56
|
docs = SomeDoc.paginate_by_name( :page => 1, :per_page => 5 )
|
41
|
-
docs.
|
57
|
+
docs.should be_a_kind_of(::WillPaginate::Collection)
|
42
58
|
docs.total_pages.should eql(4)
|
43
59
|
docs.first.name.should eql('document 00')
|
44
60
|
docs.length.should eql(5)
|
@@ -52,8 +68,13 @@ describe CouchRest::Mixins::WillPaginate do
|
|
52
68
|
docs.last.name.should eql('document 09')
|
53
69
|
end
|
54
70
|
|
55
|
-
|
56
|
-
|
71
|
+
it "should perform paginate on all entries" do
|
72
|
+
docs = SomeDoc.paginate_all(:page => 1, :per_page => 5)
|
73
|
+
docs.first.class.should eql(SomeDoc)
|
74
|
+
docs.total_pages.should eql(4)
|
75
|
+
docs.total_entries.should eql(20)
|
76
|
+
docs.length.should eql(5)
|
77
|
+
end
|
57
78
|
|
58
79
|
end
|
59
80
|
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: will_paginate_couchrest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- samlown
|
@@ -9,29 +14,36 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-05 00:00:00 +01:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: couchrest
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 35
|
23
30
|
version: "0.35"
|
24
|
-
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
25
33
|
- !ruby/object:Gem::Dependency
|
26
34
|
name: rspec
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
37
|
requirements:
|
31
38
|
- - ">="
|
32
39
|
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 1
|
42
|
+
- 2
|
43
|
+
- 9
|
33
44
|
version: 1.2.9
|
34
|
-
|
45
|
+
type: :development
|
46
|
+
version_requirements: *id002
|
35
47
|
description: generate views specifically with support for using will_paginate with them
|
36
48
|
email: me@samlown.com
|
37
49
|
executables: []
|
@@ -64,21 +76,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
64
76
|
requirements:
|
65
77
|
- - ">="
|
66
78
|
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 0
|
67
81
|
version: "0"
|
68
|
-
version:
|
69
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
83
|
requirements:
|
71
84
|
- - ">="
|
72
85
|
- !ruby/object:Gem::Version
|
86
|
+
segments:
|
87
|
+
- 0
|
73
88
|
version: "0"
|
74
|
-
version:
|
75
89
|
requirements: []
|
76
90
|
|
77
91
|
rubyforge_project:
|
78
|
-
rubygems_version: 1.3.
|
92
|
+
rubygems_version: 1.3.6
|
79
93
|
signing_key:
|
80
94
|
specification_version: 3
|
81
95
|
summary: adds will-paginate support to CouchRest
|
82
96
|
test_files:
|
83
|
-
- spec/will_paginate_couchrest_spec.rb
|
84
97
|
- spec/spec_helper.rb
|
98
|
+
- spec/will_paginate_couchrest_spec.rb
|