kaminari-surface 0.1.0

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.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +5 -0
  4. data/.rdoc_options +16 -0
  5. data/.rspec +1 -0
  6. data/ChangeLog.md +4 -0
  7. data/Gemfile +3 -0
  8. data/LICENSE.txt +20 -0
  9. data/README.md +96 -0
  10. data/Rakefile +25 -0
  11. data/TRACKER.md +17 -0
  12. data/capture.gif +0 -0
  13. data/example/.gitignore +17 -0
  14. data/example/Gemfile +52 -0
  15. data/example/Gemfile.lock +179 -0
  16. data/example/README.rdoc +28 -0
  17. data/example/Rakefile +6 -0
  18. data/example/app/assets/javascripts/application.js +16 -0
  19. data/example/app/assets/stylesheets/application.css +15 -0
  20. data/example/app/controllers/application_controller.rb +5 -0
  21. data/example/app/controllers/products_controller.rb +6 -0
  22. data/example/app/helpers/application_helper.rb +2 -0
  23. data/example/app/models/product.rb +2 -0
  24. data/example/app/views/layouts/application.html.erb +23 -0
  25. data/example/app/views/products/index.haml +18 -0
  26. data/example/bin/bundle +3 -0
  27. data/example/bin/rails +9 -0
  28. data/example/bin/rake +9 -0
  29. data/example/bin/setup +29 -0
  30. data/example/bin/spring +15 -0
  31. data/example/config.ru +4 -0
  32. data/example/config/application.rb +26 -0
  33. data/example/config/boot.rb +3 -0
  34. data/example/config/database.yml +25 -0
  35. data/example/config/environment.rb +5 -0
  36. data/example/config/environments/development.rb +41 -0
  37. data/example/config/environments/production.rb +79 -0
  38. data/example/config/environments/test.rb +42 -0
  39. data/example/config/initializers/assets.rb +11 -0
  40. data/example/config/initializers/backtrace_silencers.rb +7 -0
  41. data/example/config/initializers/cookies_serializer.rb +3 -0
  42. data/example/config/initializers/filter_parameter_logging.rb +4 -0
  43. data/example/config/initializers/inflections.rb +16 -0
  44. data/example/config/initializers/mime_types.rb +4 -0
  45. data/example/config/initializers/session_store.rb +3 -0
  46. data/example/config/initializers/surface.rb +74 -0
  47. data/example/config/initializers/wrap_parameters.rb +14 -0
  48. data/example/config/locales/en.yml +23 -0
  49. data/example/config/routes.rb +58 -0
  50. data/example/config/secrets.yml +22 -0
  51. data/example/db/migrate/20160501023444_create_products.rb +9 -0
  52. data/example/db/schema.rb +22 -0
  53. data/example/db/seeds.rb +7 -0
  54. data/example/lib/tasks/seed.rake +9 -0
  55. data/example/public/404.html +67 -0
  56. data/example/public/422.html +67 -0
  57. data/example/public/500.html +66 -0
  58. data/example/public/favicon.ico +0 -0
  59. data/example/public/robots.txt +5 -0
  60. data/example/test/fixtures/products.yml +7 -0
  61. data/example/test/models/product_test.rb +7 -0
  62. data/example/test/test_helper.rb +10 -0
  63. data/kaminari-surface.gemspec +51 -0
  64. data/lib/kaminari/surface.rb +15 -0
  65. data/lib/kaminari/surface/data_mapper_extension.rb +15 -0
  66. data/lib/kaminari/surface/page_scope_methods.rb +78 -0
  67. data/lib/kaminari/surface/paginatable_array_extension.rb +27 -0
  68. data/lib/kaminari/surface/version.rb +5 -0
  69. data/spec/acceptance/active_record_spec.rb +83 -0
  70. data/spec/acceptance/data_mapper_spec.rb +83 -0
  71. data/spec/acceptance/mongo_mapper_spec.rb +84 -0
  72. data/spec/acceptance/mongoid_spec.rb +84 -0
  73. data/spec/spec_helper.rb +112 -0
  74. data/spec/surface/page_scope_methods_spec.rb +129 -0
  75. data/spec/surface_spec.rb +8 -0
  76. metadata +364 -0
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'MongoMapper integration' do
4
+ before(:context) do
5
+ SampleModels::MongoMapper::Widget.delete_all
6
+ 23.times { SampleModels::MongoMapper::Widget.create }
7
+ end
8
+
9
+ context 'first page when no surfacing requested' do
10
+ subject(:widgets) { SampleModels::MongoMapper::Widget.page(1).per(5) }
11
+
12
+ it 'has 5 pages' do
13
+ expect(widgets.total_pages).to eq(5)
14
+ end
15
+
16
+ it 'has 5 widgets' do
17
+ expect(widgets.to_a.size).to eq(5)
18
+ end
19
+
20
+ it 'has 23 total widgets' do
21
+ expect(widgets.total_count).to eq(23)
22
+ end
23
+ end
24
+
25
+ context 'first page when surfacing is 0' do
26
+ subject(:widgets) { SampleModels::MongoMapper::Widget.page(1).per(5) }
27
+
28
+ it 'has 5 pages' do
29
+ expect(widgets.total_pages).to eq(5)
30
+ end
31
+ end
32
+
33
+ context 'first page when surfacing is 3' do
34
+ subject(:widgets) { SampleModels::MongoMapper::Widget.page(1).per(5).surface(3) }
35
+
36
+ it 'has 4 pages' do
37
+ expect(widgets.total_pages).to eq(4)
38
+ end
39
+
40
+ it 'has 5 widgets' do
41
+ expect(widgets.to_a.size).to eq(5)
42
+ end
43
+ end
44
+
45
+ context 'last page when surfacing is 3' do
46
+ subject(:widgets){ SampleModels::MongoMapper::Widget.page(4).per(5).surface(3) }
47
+
48
+ it 'has 8 widgets' do
49
+ expect(widgets.to_a.size).to eq(8)
50
+ end
51
+ end
52
+
53
+ context 'last page when surfacing is 8 (per + remainder)' do
54
+ subject(:widgets) { SampleModels::MongoMapper::Widget.page(3).per(5).surface(8) }
55
+
56
+ it 'has 3 pages' do
57
+ expect(widgets.total_pages).to eq(3)
58
+ end
59
+
60
+ it 'has 13 widgets' do
61
+ expect(widgets.to_a.size).to eq(13)
62
+ end
63
+
64
+ it 'has 23 total widgets' do
65
+ expect(widgets.total_count).to eq(23)
66
+ end
67
+ end
68
+
69
+ context 'when `per` is called after `surface`' do
70
+ subject(:widgets){ ->{ SampleModels::MongoMapper::Widget.page(1).surface(5).per(5) } }
71
+
72
+ it 'should raise an `ArgumentError`' do
73
+ expect(subject).to raise_error(ArgumentError)
74
+ end
75
+ end
76
+
77
+ context 'when `padding` is called after `surface`' do
78
+ subject(:widgets){ ->{ SampleModels::MongoMapper::Widget.page(1).surface(5).padding(5) } }
79
+
80
+ it 'should raise an `ArgumentError`' do
81
+ expect(subject).to raise_error(ArgumentError)
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Mongoid integration' do
4
+ before(:context) do
5
+ SampleModels::Mongoid::Widget.delete_all
6
+ 23.times { SampleModels::Mongoid::Widget.create }
7
+ end
8
+
9
+ context 'first page when no surfacing requested' do
10
+ subject(:widgets) { SampleModels::Mongoid::Widget.page(1).per(5) }
11
+
12
+ it 'has 5 pages' do
13
+ expect(widgets.total_pages).to eq(5)
14
+ end
15
+
16
+ it 'has 5 widgets' do
17
+ expect(widgets.to_a.size).to eq(5)
18
+ end
19
+
20
+ it 'has 23 total widgets' do
21
+ expect(widgets.total_count).to eq(23)
22
+ end
23
+ end
24
+
25
+ context 'first page when surfacing is 0' do
26
+ subject(:widgets) { SampleModels::Mongoid::Widget.page(1).per(5) }
27
+
28
+ it 'has 5 pages' do
29
+ expect(widgets.total_pages).to eq(5)
30
+ end
31
+ end
32
+
33
+ context 'first page when surfacing is 3' do
34
+ subject(:widgets) { SampleModels::Mongoid::Widget.page(1).per(5).surface(3) }
35
+
36
+ it 'has 4 pages' do
37
+ expect(widgets.total_pages).to eq(4)
38
+ end
39
+
40
+ it 'has 5 widgets' do
41
+ expect(widgets.to_a.size).to eq(5)
42
+ end
43
+ end
44
+
45
+ context 'last page when surfacing is 3' do
46
+ subject(:widgets){ SampleModels::Mongoid::Widget.page(4).per(5).surface(3) }
47
+
48
+ it 'has 8 widgets' do
49
+ expect(widgets.to_a.size).to eq(8)
50
+ end
51
+ end
52
+
53
+ context 'last page when surfacing is 8 (per + remainder)' do
54
+ subject(:widgets) { SampleModels::Mongoid::Widget.page(3).per(5).surface(8) }
55
+
56
+ it 'has 3 pages' do
57
+ expect(widgets.total_pages).to eq(3)
58
+ end
59
+
60
+ it 'has 13 widgets' do
61
+ expect(widgets.to_a.size).to eq(13)
62
+ end
63
+
64
+ it 'has 23 total widgets' do
65
+ expect(widgets.total_count).to eq(23)
66
+ end
67
+ end
68
+
69
+ context 'when `per` is called after `surface`' do
70
+ subject(:widgets){ ->{ SampleModels::Mongoid::Widget.page(1).surface(5).per(5) } }
71
+
72
+ it 'should raise an `ArgumentError`' do
73
+ expect(subject).to raise_error(ArgumentError)
74
+ end
75
+ end
76
+
77
+ context 'when `padding` is called after `surface`' do
78
+ subject(:widgets){ ->{ SampleModels::Mongoid::Widget.page(1).surface(5).padding(5) } }
79
+
80
+ it 'should raise an `ArgumentError`' do
81
+ expect(subject).to raise_error(ArgumentError)
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,112 @@
1
+ require 'rspec'
2
+ require 'faker'
3
+ require 'active_record'
4
+ require 'data_mapper'
5
+
6
+ require 'kaminari/surface/version'
7
+ require 'kaminari/surface'
8
+
9
+ include Kaminari::Surface
10
+
11
+ # ActiveRecord
12
+
13
+ require 'kaminari/models/active_record_extension'
14
+ ::ActiveRecord::Base.send :include, Kaminari::ActiveRecordExtension
15
+
16
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3",
17
+ :database => ":memory:")
18
+
19
+ ActiveRecord::Schema.define(:version => 1) do
20
+ create_table :widgets do |t|
21
+ t.string :name
22
+ end
23
+ end
24
+
25
+ module SampleModels
26
+ module ActiveRecord
27
+ class Widget < ::ActiveRecord::Base
28
+ self.table_name = 'widgets'
29
+
30
+ before_save :generate_name
31
+
32
+ def generate_name
33
+ self.name ||= Faker::Commerce.product_name
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ # DataMapper
40
+
41
+ require 'kaminari/data_mapper'
42
+
43
+ DataMapper.setup(:default, 'sqlite::memory:')
44
+
45
+ module SampleModels
46
+ module DataMapper
47
+ class Widget
48
+ include ::DataMapper::Resource
49
+
50
+ property :id , Serial
51
+ property :name , String
52
+
53
+ before :save, :generate_name
54
+
55
+ def generate_name
56
+ self.name ||= Faker::Commerce.product_name
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ DataMapper.finalize
63
+ DataMapper.auto_migrate!
64
+
65
+ # Mongoid
66
+
67
+ require 'mongoid'
68
+ require 'kaminari/mongoid'
69
+
70
+ Mongoid.configure do |config|
71
+ config.sessions = {
72
+ default: {
73
+ hosts: ['0.0.0.0:27017'],
74
+ database: 'kaminari_test'
75
+ }
76
+ }
77
+ end
78
+
79
+ module SampleModels
80
+ module Mongoid
81
+ class Widget
82
+ include ::Mongoid::Document
83
+
84
+ field :name, type: String, default: ->{ Faker::Commerce.product_name }
85
+ end
86
+ end
87
+ end
88
+
89
+ # MongoMapper
90
+
91
+ require 'mongo_mapper'
92
+ require 'kaminari/mongo_mapper'
93
+
94
+ module SampleModels
95
+ module MongoMapper
96
+ class Widget
97
+ include ::MongoMapper::Document
98
+ key :name, String
99
+
100
+ before_save :generate_name
101
+
102
+ private
103
+ def generate_name
104
+ self.name ||= Faker::Commerce.product_name
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+
111
+ MongoMapper.connection = Mongo::Connection.new '0.0.0.0', 27017
112
+ MongoMapper.database = 'kaminari_test'
@@ -0,0 +1,129 @@
1
+ require 'spec_helper'
2
+ require 'kaminari/surface/page_scope_methods'
3
+ require 'kaminari/models/array_extension'
4
+ require 'pry'
5
+
6
+ RSpec.describe Kaminari::Surface::PageScopeMethods do
7
+ let(:items) do
8
+ Kaminari::PaginatableArray.new((1..23).to_a)
9
+ end
10
+
11
+ describe '#per' do
12
+ context 'when called after surface' do
13
+ subject { ->{ items.page(1).surface(5).per(5) }}
14
+
15
+ it 'should raise an `ArgumentError`' do
16
+ expect(subject).to raise_error(ArgumentError)
17
+ end
18
+ end
19
+ end
20
+
21
+ describe '#padding' do
22
+ context 'when called after surface' do
23
+ subject { ->{ items.page(1).surface(5).padding(5) }}
24
+
25
+ it 'should raise an `ArgumentError`' do
26
+ expect(subject).to raise_error(ArgumentError)
27
+ end
28
+ end
29
+ end
30
+
31
+ describe '#surface' do
32
+ context 'when requesting first page with 0 surface' do
33
+ subject { items.page(1).per(5).surface(0) }
34
+
35
+ it 'has offset 0' do
36
+ expect(subject.offset_value).to eq(0)
37
+ end
38
+
39
+ it 'has limit 5' do
40
+ expect(subject.limit_value).to eq(5)
41
+ end
42
+ end
43
+
44
+ context 'when requesting last page with 0 surface' do
45
+ subject { items.page(5).per(5).surface(0) }
46
+
47
+ it 'has offset 20' do
48
+ expect(subject.offset_value).to eq(20)
49
+ end
50
+
51
+ it 'has limit 5' do
52
+ expect(subject.limit_value).to eq(5)
53
+ end
54
+ end
55
+
56
+ context 'when requesting first page with 3 surface' do
57
+ subject { items.page(1).per(5).surface(3) }
58
+
59
+ it 'has offset 0' do
60
+ expect(subject.offset_value).to eq(0)
61
+ end
62
+
63
+ it 'has limit 5' do
64
+ expect(subject.limit_value).to eq(5)
65
+ end
66
+ end
67
+
68
+ context 'when requesting last page with 3 surface' do
69
+ subject { items.page(4).per(5).surface(3) }
70
+
71
+ it 'has offset 15' do
72
+ expect(subject.offset_value).to eq(15)
73
+ end
74
+
75
+ it 'has limit 8' do
76
+ expect(subject.limit_value).to eq(8)
77
+ end
78
+ end
79
+ end
80
+
81
+ # The implementation of `current_page` in the surfacing extension uses a stored `per_page`
82
+ # value instead of the `limit_value` used in the original kaminari version since the limit
83
+ # value may be modified by `surface`.
84
+ describe '#current_page' do
85
+ context 'when surfacing results on the last page' do
86
+ subject { items.page(4).per(5).surface(5).current_page }
87
+ it { is_expected.to be(4) }
88
+ end
89
+
90
+ context 'when we exceeded the page count' do
91
+ subject { items.page(5).per(5).surface(5).current_page }
92
+ it { is_expected.to be(5) } # Still respond, but empty result set
93
+ end
94
+ end
95
+
96
+ describe '#total_pages' do
97
+ context 'when surfacing results' do
98
+ subject { items.page(1).per(5).surface(5).total_pages }
99
+ it { is_expected.to be(4) }
100
+ end
101
+
102
+ context 'without surfacing' do
103
+ subject { items.page(1).per(5).total_pages }
104
+ it { is_expected.to be(5) }
105
+ end
106
+
107
+ context 'with 0 surface' do
108
+ subject { items.page(1).per(5).surface(0).total_pages }
109
+ it { is_expected.to be(5) }
110
+ end
111
+ end
112
+
113
+ describe '#num_pages' do
114
+ context 'when surfacing results' do
115
+ subject { items.page(1).per(5).surface(5).num_pages }
116
+ it { is_expected.to be(4) }
117
+ end
118
+
119
+ context 'without surfacing' do
120
+ subject { items.page(1).per(5).num_pages }
121
+ it { is_expected.to be(5) }
122
+ end
123
+
124
+ context 'with 0 surface' do
125
+ subject { items.page(1).per(5).surface(0).num_pages }
126
+ it { is_expected.to be(5) }
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+ require 'kaminari/surface'
3
+
4
+ describe Kaminari::Surface do
5
+ it "should have a VERSION constant" do
6
+ expect(subject.const_get('VERSION')).to_not be_empty
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,364 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kaminari-surface
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Kassemi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: kaminari
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.16'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faker
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.4'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rdoc
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '4.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '4.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubygems-tasks
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.2'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: activerecord
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: sqlite3
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: data_mapper
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: dm-sqlite-adapter
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: kaminari-data_mapper
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: mongoid
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: kaminari-mongoid
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: mongo_mapper
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: kaminari-mongo_mapper
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ description: An extension to Kaminari pagination that brings the final page of a search
252
+ results to the surface, and prevents unnecessary paging requests.
253
+ email: jkassemi@gmail.com
254
+ executables: []
255
+ extensions: []
256
+ extra_rdoc_files: []
257
+ files:
258
+ - ".document"
259
+ - ".gitignore"
260
+ - ".rdoc_options"
261
+ - ".rspec"
262
+ - ChangeLog.md
263
+ - Gemfile
264
+ - LICENSE.txt
265
+ - README.md
266
+ - Rakefile
267
+ - TRACKER.md
268
+ - capture.gif
269
+ - example/.gitignore
270
+ - example/Gemfile
271
+ - example/Gemfile.lock
272
+ - example/README.rdoc
273
+ - example/Rakefile
274
+ - example/app/assets/javascripts/application.js
275
+ - example/app/assets/stylesheets/application.css
276
+ - example/app/controllers/application_controller.rb
277
+ - example/app/controllers/products_controller.rb
278
+ - example/app/helpers/application_helper.rb
279
+ - example/app/models/product.rb
280
+ - example/app/views/layouts/application.html.erb
281
+ - example/app/views/products/index.haml
282
+ - example/bin/bundle
283
+ - example/bin/rails
284
+ - example/bin/rake
285
+ - example/bin/setup
286
+ - example/bin/spring
287
+ - example/config.ru
288
+ - example/config/application.rb
289
+ - example/config/boot.rb
290
+ - example/config/database.yml
291
+ - example/config/environment.rb
292
+ - example/config/environments/development.rb
293
+ - example/config/environments/production.rb
294
+ - example/config/environments/test.rb
295
+ - example/config/initializers/assets.rb
296
+ - example/config/initializers/backtrace_silencers.rb
297
+ - example/config/initializers/cookies_serializer.rb
298
+ - example/config/initializers/filter_parameter_logging.rb
299
+ - example/config/initializers/inflections.rb
300
+ - example/config/initializers/mime_types.rb
301
+ - example/config/initializers/session_store.rb
302
+ - example/config/initializers/surface.rb
303
+ - example/config/initializers/wrap_parameters.rb
304
+ - example/config/locales/en.yml
305
+ - example/config/routes.rb
306
+ - example/config/secrets.yml
307
+ - example/db/migrate/20160501023444_create_products.rb
308
+ - example/db/schema.rb
309
+ - example/db/seeds.rb
310
+ - example/lib/tasks/seed.rake
311
+ - example/public/404.html
312
+ - example/public/422.html
313
+ - example/public/500.html
314
+ - example/public/favicon.ico
315
+ - example/public/robots.txt
316
+ - example/test/fixtures/products.yml
317
+ - example/test/models/product_test.rb
318
+ - example/test/test_helper.rb
319
+ - kaminari-surface.gemspec
320
+ - lib/kaminari/surface.rb
321
+ - lib/kaminari/surface/data_mapper_extension.rb
322
+ - lib/kaminari/surface/page_scope_methods.rb
323
+ - lib/kaminari/surface/paginatable_array_extension.rb
324
+ - lib/kaminari/surface/version.rb
325
+ - spec/acceptance/active_record_spec.rb
326
+ - spec/acceptance/data_mapper_spec.rb
327
+ - spec/acceptance/mongo_mapper_spec.rb
328
+ - spec/acceptance/mongoid_spec.rb
329
+ - spec/spec_helper.rb
330
+ - spec/surface/page_scope_methods_spec.rb
331
+ - spec/surface_spec.rb
332
+ homepage: https://github.com/jkassemi/kaminari-surface
333
+ licenses:
334
+ - MIT
335
+ metadata: {}
336
+ post_install_message:
337
+ rdoc_options: []
338
+ require_paths:
339
+ - lib
340
+ required_ruby_version: !ruby/object:Gem::Requirement
341
+ requirements:
342
+ - - ">="
343
+ - !ruby/object:Gem::Version
344
+ version: '0'
345
+ required_rubygems_version: !ruby/object:Gem::Requirement
346
+ requirements:
347
+ - - ">="
348
+ - !ruby/object:Gem::Version
349
+ version: '0'
350
+ requirements: []
351
+ rubyforge_project:
352
+ rubygems_version: 2.2.2
353
+ signing_key:
354
+ specification_version: 4
355
+ summary: Surface the final search result page when desirable
356
+ test_files:
357
+ - spec/acceptance/active_record_spec.rb
358
+ - spec/acceptance/data_mapper_spec.rb
359
+ - spec/acceptance/mongo_mapper_spec.rb
360
+ - spec/acceptance/mongoid_spec.rb
361
+ - spec/spec_helper.rb
362
+ - spec/surface/page_scope_methods_spec.rb
363
+ - spec/surface_spec.rb
364
+ has_rdoc: