folio-pagination 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/.gitignore +17 -0
  2. data/.travis.yml +3 -0
  3. data/Gemfile +16 -0
  4. data/Guardfile +5 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +235 -0
  7. data/Rakefile +11 -0
  8. data/folio-pagination.gemspec +27 -0
  9. data/lib/folio/core_ext/enumerable.rb +51 -0
  10. data/lib/folio/invalid_page.rb +5 -0
  11. data/lib/folio/ordinal/page.rb +107 -0
  12. data/lib/folio/ordinal.rb +33 -0
  13. data/lib/folio/page.rb +86 -0
  14. data/lib/folio/per_page.rb +15 -0
  15. data/lib/folio/rails.rb +35 -0
  16. data/lib/folio/version.rb +3 -0
  17. data/lib/folio/will_paginate/active_record.rb +132 -0
  18. data/lib/folio/will_paginate/collection.rb +19 -0
  19. data/lib/folio/will_paginate/view_helpers/action_view.rb +10 -0
  20. data/lib/folio/will_paginate/view_helpers/link_renderer.rb +54 -0
  21. data/lib/folio/will_paginate/view_helpers/link_renderer_base.rb +44 -0
  22. data/lib/folio/will_paginate/view_helpers.rb +57 -0
  23. data/lib/folio-pagination.rb +3 -0
  24. data/lib/folio.rb +84 -0
  25. data/test/folio/core_ext/enumerable_test.rb +55 -0
  26. data/test/folio/ordinal/page_test.rb +173 -0
  27. data/test/folio/ordinal_test.rb +57 -0
  28. data/test/folio/page_test.rb +198 -0
  29. data/test/folio/per_page_test.rb +49 -0
  30. data/test/folio/rails_test.rb +15 -0
  31. data/test/folio/version_test.rb +8 -0
  32. data/test/folio/will_paginate/active_record_test.rb +118 -0
  33. data/test/folio/will_paginate/collection_test.rb +43 -0
  34. data/test/folio/will_paginate/view_helpers/link_renderer_base_test.rb +58 -0
  35. data/test/folio/will_paginate/view_helpers/link_renderer_test.rb +58 -0
  36. data/test/folio/will_paginate/view_helpers_test.rb +49 -0
  37. data/test/folio_test.rb +192 -0
  38. data/test/setup/active_record.rb +13 -0
  39. metadata +133 -0
@@ -0,0 +1,192 @@
1
+ require 'minitest/autorun'
2
+ require 'folio'
3
+
4
+ describe Folio do
5
+ describe "class per_page" do
6
+ it "should have a per_page attribute" do
7
+ Folio.must_respond_to :per_page
8
+ Folio.must_respond_to :per_page=
9
+ end
10
+
11
+ it "should allow setting by per_page=" do
12
+ was = Folio.per_page
13
+ Folio.per_page = 100
14
+ Folio.per_page.must_equal 100
15
+ Folio.per_page = was
16
+ end
17
+
18
+ it "should allow setting by argument to per_page" do
19
+ was = Folio.per_page
20
+ Folio.per_page(100)
21
+ Folio.per_page.must_equal 100
22
+ Folio.per_page = was
23
+ end
24
+
25
+ it "should default to 30" do
26
+ Folio.per_page.must_equal 30
27
+ end
28
+ end
29
+
30
+ before do
31
+ page_klass = Class.new do
32
+ include Folio::Page
33
+ end
34
+
35
+ @klass = Class.new do
36
+ define_method :build_page do
37
+ page = page_klass.new
38
+ page.ordinal_pages = false
39
+ page.first_page = :first
40
+ page.last_page = :last
41
+ page
42
+ end
43
+
44
+ def fill_page(page)
45
+ page.next_page = :next
46
+ page.previous_page = :previous
47
+ page
48
+ end
49
+
50
+ include Folio
51
+ end
52
+
53
+ @folio = @klass.new
54
+ end
55
+
56
+ describe "paginate" do
57
+ it "should get the page from the folio's build_page method" do
58
+ page = @folio.paginate
59
+ page.ordinal_pages.must_equal false
60
+ page.first_page.must_equal :first
61
+ page.last_page.must_equal :last
62
+ end
63
+
64
+ it "should pass the page through the folio's fill_page method" do
65
+ page = @folio.paginate
66
+ page.next_page.must_equal :next
67
+ page.previous_page.must_equal :previous
68
+ end
69
+
70
+ it "should populate current_page and per_page before passing it to fill_page" do
71
+ @klass.send(:define_method, :fill_page) do |page|
72
+ page.current_page.wont_be_nil
73
+ page.per_page.wont_be_nil
74
+ end
75
+ @folio.paginate
76
+ end
77
+
78
+ describe "page parameter" do
79
+ it "should populate onto the page" do
80
+ page = @folio.paginate(page: :current)
81
+ page.current_page.must_equal :current
82
+ end
83
+
84
+ it "should default to the page's first_page" do
85
+ page = @folio.paginate
86
+ page.current_page.must_equal page.first_page
87
+ end
88
+
89
+ it "should set to the page's first_page if explicitly nil" do
90
+ page = @folio.paginate(page: nil)
91
+ page.current_page.must_equal page.first_page
92
+ end
93
+
94
+ it "should not set to the page's first_page if explicitly false" do
95
+ page = @folio.paginate(page: false)
96
+ page.current_page.must_equal false
97
+ end
98
+ end
99
+
100
+ describe "per_page parameter" do
101
+ it "should populate onto the page" do
102
+ page = @folio.paginate(per_page: 100)
103
+ page.per_page.must_equal 100
104
+ end
105
+
106
+ it "should default to the folio's per_page" do
107
+ @folio.per_page = 100
108
+ page = @folio.paginate
109
+ page.per_page.must_equal 100
110
+ end
111
+ end
112
+
113
+ describe "total_entries parameter" do
114
+ it "should populate onto the page" do
115
+ page = @folio.paginate(total_entries: 100)
116
+ page.total_entries.must_equal 100
117
+ end
118
+
119
+ it "should default to the nil if the folio does not implement count" do
120
+ page = @folio.paginate
121
+ page.total_entries.must_be_nil
122
+ end
123
+
124
+ it "should default to the result of count if the folio implements count" do
125
+ @klass.send(:define_method, :count) { 100 }
126
+ page = @folio.paginate
127
+ page.total_entries.must_equal 100
128
+ end
129
+
130
+ it "should not-execute the count if total_entries provided" do
131
+ called = false
132
+ @klass.send(:define_method, :count) { called = true }
133
+ @folio.paginate(total_entries: 100)
134
+ called.must_equal false
135
+ end
136
+
137
+ it "should not-execute the count if total_entries provided as nil" do
138
+ called = false
139
+ @klass.send(:define_method, :count) { called = true }
140
+ page = @folio.paginate(total_entries: nil)
141
+ called.must_equal false
142
+ page.total_entries.must_be_nil
143
+ end
144
+ end
145
+ end
146
+
147
+ describe "per_page class attribute" do
148
+ it "should exist" do
149
+ @klass.must_respond_to :per_page
150
+ @klass.must_respond_to :per_page=
151
+ end
152
+
153
+ it "should be settable from per_page=" do
154
+ @klass.per_page = 100
155
+ @klass.per_page.must_equal 100
156
+ end
157
+
158
+ it "should be settable from per_page with argument" do
159
+ @klass.per_page(100)
160
+ @klass.per_page.must_equal 100
161
+ end
162
+
163
+ it "should default to Folio.per_page" do
164
+ was = Folio.per_page
165
+ Folio.per_page = 50
166
+ @klass.per_page.must_equal 50
167
+ Folio.per_page = was
168
+ end
169
+ end
170
+
171
+ describe "per_page instance attribute" do
172
+ it "should exist" do
173
+ @folio.must_respond_to :per_page
174
+ @folio.must_respond_to :per_page=
175
+ end
176
+
177
+ it "should be settable from per_page=" do
178
+ @folio.per_page = 100
179
+ @folio.per_page.must_equal 100
180
+ end
181
+
182
+ it "should be settable from per_page with argument" do
183
+ @folio.per_page(100)
184
+ @folio.per_page.must_equal 100
185
+ end
186
+
187
+ it "should default to class' per_page" do
188
+ @klass.per_page = 50
189
+ @folio.per_page.must_equal 50
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,13 @@
1
+ require 'active_record'
2
+
3
+ ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
4
+
5
+ module TestSetup
6
+ module ActiveRecord
7
+ def self.migrate
8
+ ::ActiveRecord::Migration.suppress_messages do
9
+ yield ::ActiveRecord::Migration
10
+ end
11
+ end
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: folio-pagination
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jacob Fugal
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-12-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: A pagination library.
47
+ email:
48
+ - jacob@instructure.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - .travis.yml
55
+ - Gemfile
56
+ - Guardfile
57
+ - LICENSE.txt
58
+ - README.md
59
+ - Rakefile
60
+ - folio-pagination.gemspec
61
+ - lib/folio-pagination.rb
62
+ - lib/folio.rb
63
+ - lib/folio/core_ext/enumerable.rb
64
+ - lib/folio/invalid_page.rb
65
+ - lib/folio/ordinal.rb
66
+ - lib/folio/ordinal/page.rb
67
+ - lib/folio/page.rb
68
+ - lib/folio/per_page.rb
69
+ - lib/folio/rails.rb
70
+ - lib/folio/version.rb
71
+ - lib/folio/will_paginate/active_record.rb
72
+ - lib/folio/will_paginate/collection.rb
73
+ - lib/folio/will_paginate/view_helpers.rb
74
+ - lib/folio/will_paginate/view_helpers/action_view.rb
75
+ - lib/folio/will_paginate/view_helpers/link_renderer.rb
76
+ - lib/folio/will_paginate/view_helpers/link_renderer_base.rb
77
+ - test/folio/core_ext/enumerable_test.rb
78
+ - test/folio/ordinal/page_test.rb
79
+ - test/folio/ordinal_test.rb
80
+ - test/folio/page_test.rb
81
+ - test/folio/per_page_test.rb
82
+ - test/folio/rails_test.rb
83
+ - test/folio/version_test.rb
84
+ - test/folio/will_paginate/active_record_test.rb
85
+ - test/folio/will_paginate/collection_test.rb
86
+ - test/folio/will_paginate/view_helpers/link_renderer_base_test.rb
87
+ - test/folio/will_paginate/view_helpers/link_renderer_test.rb
88
+ - test/folio/will_paginate/view_helpers_test.rb
89
+ - test/folio_test.rb
90
+ - test/setup/active_record.rb
91
+ homepage: https://github.com/instructure/folio
92
+ licenses:
93
+ - MIT
94
+ post_install_message:
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 1.8.23
113
+ signing_key:
114
+ specification_version: 3
115
+ summary: Folio is a library for pagination. It's meant to be nearly compatible with
116
+ WillPaginate, but with broader -- yet more well-defined -- semantics to allow for
117
+ sources whose page identifiers are non-ordinal.
118
+ test_files:
119
+ - test/folio/core_ext/enumerable_test.rb
120
+ - test/folio/ordinal/page_test.rb
121
+ - test/folio/ordinal_test.rb
122
+ - test/folio/page_test.rb
123
+ - test/folio/per_page_test.rb
124
+ - test/folio/rails_test.rb
125
+ - test/folio/version_test.rb
126
+ - test/folio/will_paginate/active_record_test.rb
127
+ - test/folio/will_paginate/collection_test.rb
128
+ - test/folio/will_paginate/view_helpers/link_renderer_base_test.rb
129
+ - test/folio/will_paginate/view_helpers/link_renderer_test.rb
130
+ - test/folio/will_paginate/view_helpers_test.rb
131
+ - test/folio_test.rb
132
+ - test/setup/active_record.rb
133
+ has_rdoc: