pagination_render_logic 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in pagination_render_logic.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 filip
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1 @@
1
+ It will hold the logic required for rendering different kinds of pagination templates.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,80 @@
1
+ module PaginationRenderLogic
2
+ # Provides logic for building digg style pagination
3
+ # First Previous 1 2 3 ... 22 23 24 25 26 [27] 28 29 30 31 32 ... 48 49 50 Next Last
4
+ module Digg
5
+ attr_accessor :total_pages, :current_page,
6
+ :after_first_page, :arround_current_page,
7
+ :middle_section, :first_page_section, :last_page_section
8
+
9
+ def config(args = {})
10
+ @total_pages = args[:total_pages] || 0
11
+ @after_first_page = args[:after_first_page] || 3
12
+ @arround_current_page = args[:arround_current_page] || 5
13
+ @current_page = args[:current_page] || 1
14
+ end
15
+
16
+ def config!
17
+ config
18
+ setup
19
+ end
20
+
21
+ def setup
22
+ @middle_section = ([current_page - arround_current_page, 1].max..[current_page + arround_current_page, total_pages].min).to_a
23
+ @first_page_section = (1..[after_first_page, total_pages].min).to_a
24
+ @last_page_section = ([1, total_pages - after_first_page + 1].max..total_pages).to_a
25
+ if (total_pages / 2) > current_page
26
+ merge_left
27
+ merge_right
28
+ else
29
+ merge_right
30
+ merge_left
31
+ end
32
+ end
33
+
34
+ def has_next_page?
35
+ @current_page < @total_pages
36
+ end
37
+
38
+ def has_last_page?
39
+ @current_page < @total_pages
40
+ end
41
+
42
+ def has_first_page?
43
+ @current_page > 1
44
+ end
45
+
46
+ def has_previous_page?
47
+ @current_page > 1
48
+ end
49
+
50
+ def has_links?
51
+ @total_pages > 1
52
+ end
53
+
54
+ def has_first_page_section?
55
+ not @first_page_section.empty?
56
+ end
57
+
58
+ def has_last_page_section?
59
+ not @last_page_section.empty?
60
+ end
61
+
62
+ private
63
+
64
+ def merge_left
65
+ if (not @middle_section.empty?) and @middle_section.first - 1 <= @first_page_section.last
66
+ @middle_section = @first_page_section | @middle_section
67
+ @first_page_section.clear
68
+ end
69
+ end
70
+
71
+ def merge_right
72
+ if (not @middle_section.empty?) and @middle_section.last + 1 >= @last_page_section.first
73
+ @middle_section = @middle_section | @last_page_section
74
+ @last_page_section.clear
75
+ end
76
+ end
77
+
78
+ end
79
+
80
+ end
@@ -0,0 +1,3 @@
1
+ module PaginationRenderLogic
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,3 @@
1
+ module PaginationRenderLogic
2
+ # Your code goes here...
3
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "pagination_render_logic/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "pagination_render_logic"
7
+ s.version = PaginationRenderLogic::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["sirfilip"]
10
+ s.email = ["github.sirfilip@gmail.com"]
11
+ s.homepage = "http://github.com/sirfilip/pagination_render_logic"
12
+ s.summary = %q{Will provide logic for rendering different types of pagination}
13
+ s.description = %q{Will provide logic for rendering different types of pagination. ex floating digg style pagination}
14
+
15
+ s.add_development_dependency("bundler")
16
+ s.add_development_dependency("rspec")
17
+
18
+ s.licenses = ["MIT"]
19
+
20
+ s.extra_rdoc_files = [
21
+ "LICENSE.txt",
22
+ "README.rdoc"
23
+ ]
24
+
25
+ s.rubyforge_project = "pagination_render_logic"
26
+
27
+ s.files = `git ls-files`.split("\n")
28
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
29
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
30
+ s.require_paths = ["lib"]
31
+ end
data/specs/digg.spec ADDED
@@ -0,0 +1,300 @@
1
+ require './spec_helper'
2
+ require 'pagination_render_logic/digg'
3
+
4
+ # First Previous 1 2 3 ... 22 23 24 25 26 [27] 28 29 30 31 32 ... 48 49 50 Next Last
5
+
6
+ class DiggRenderer
7
+ extend PaginationRenderLogic::Digg
8
+ end
9
+
10
+ class DiggObject
11
+ include PaginationRenderLogic::Digg
12
+ end
13
+
14
+ describe DiggRenderer do
15
+
16
+ before do
17
+ DiggRenderer.config :total_pages => 10, :current_page => 1,
18
+ :after_first_page => 3, :arround_current_page => 5
19
+ end
20
+
21
+ it "should be awesome" do
22
+ end
23
+
24
+ it "should set sections correctly" do
25
+ # [1] 2 3 4 5 6 ... 8 9 10 Next Last
26
+ DiggRenderer.total_pages = 10
27
+ DiggRenderer.current_page = 1
28
+ DiggRenderer.setup
29
+ DiggRenderer.should have(6).middle_section
30
+ DiggRenderer.should have(0).first_page_section
31
+ DiggRenderer.should have(3).last_page_section
32
+ DiggRenderer.middle_section.should eql((1..6).to_a)
33
+ DiggRenderer.last_page_section.should eql((8..10).to_a)
34
+
35
+ # [1] 2 3 4 5 6 7 8 9 Next Last
36
+ DiggRenderer.total_pages = 9
37
+ DiggRenderer.current_page = 1
38
+ DiggRenderer.setup
39
+ DiggRenderer.should have(9).middle_section
40
+ DiggRenderer.should have(0).first_page_section
41
+ DiggRenderer.should have(0).last_page_section
42
+ DiggRenderer.middle_section.should eql((1..9).to_a)
43
+
44
+ # 1 2 3 ... 5 6 7 8 9 [10] Next Last
45
+ DiggRenderer.total_pages = 10
46
+ DiggRenderer.current_page = 10
47
+ DiggRenderer.setup
48
+ DiggRenderer.should have(6).middle_section
49
+ DiggRenderer.should have(3).first_page_section
50
+ DiggRenderer.should have(0).last_page_section
51
+ DiggRenderer.middle_section.should eql((5..10).to_a)
52
+ DiggRenderer.first_page_section.should eql((1..3).to_a)
53
+
54
+ # First Previous 1 2 3 ... 22 23 24 25 26 [27] 28 29 30 31 32 ... 48 49 50 Next Last
55
+ DiggRenderer.total_pages = 50
56
+ DiggRenderer.current_page = 27
57
+ DiggRenderer.setup
58
+ DiggRenderer.should have(11).middle_section
59
+ DiggRenderer.should have(3).first_page_section
60
+ DiggRenderer.should have(3).last_page_section
61
+ DiggRenderer.middle_section.should eql((22..32).to_a)
62
+ DiggRenderer.first_page_section.should eql((1..3).to_a)
63
+ DiggRenderer.last_page_section.should eql((48..50).to_a)
64
+ end
65
+
66
+ it "should render links properly" do
67
+
68
+ # [1] 2 3 Next Last
69
+ DiggRenderer.total_pages = 3
70
+ DiggRenderer.current_page = 1
71
+ DiggRenderer.setup
72
+ DiggRenderer.should have(3).middle_section
73
+ DiggRenderer.should have(0).first_page_section
74
+ DiggRenderer.should have(0).last_page_section
75
+ DiggRenderer.middle_section.should eql((1..3).to_a)
76
+ DiggRenderer.should have_next_page
77
+ DiggRenderer.should have_last_page
78
+ DiggRenderer.should_not have_first_page
79
+ DiggRenderer.should_not have_previous_page
80
+
81
+ # First Previous 1 [2] 3 Next Last
82
+ DiggRenderer.total_pages = 3
83
+ DiggRenderer.current_page = 2
84
+ DiggRenderer.setup
85
+ DiggRenderer.should have(3).middle_section
86
+ DiggRenderer.should have(0).first_page_section
87
+ DiggRenderer.should have(0).last_page_section
88
+ DiggRenderer.middle_section.should eql((1..3).to_a)
89
+ DiggRenderer.should have_next_page
90
+ DiggRenderer.should have_last_page
91
+ DiggRenderer.should have_first_page
92
+ DiggRenderer.should have_previous_page
93
+
94
+ # First Previous 1 2 [3]
95
+ DiggRenderer.total_pages = 3
96
+ DiggRenderer.current_page = 3
97
+ DiggRenderer.setup
98
+ DiggRenderer.should have(3).middle_section
99
+ DiggRenderer.should have(0).first_page_section
100
+ DiggRenderer.should have(0).last_page_section
101
+ DiggRenderer.middle_section.should eql((1..3).to_a)
102
+ DiggRenderer.should_not have_next_page
103
+ DiggRenderer.should_not have_last_page
104
+ DiggRenderer.should have_first_page
105
+ DiggRenderer.should have_previous_page
106
+
107
+ # First Previous 1 [2] 3 4 5 Next Last
108
+ DiggRenderer.total_pages = 5
109
+ DiggRenderer.current_page = 2
110
+ DiggRenderer.setup
111
+ DiggRenderer.should have(5).middle_section
112
+ DiggRenderer.should have(0).first_page_section
113
+ DiggRenderer.should have(0).last_page_section
114
+ DiggRenderer.middle_section.should eql((1..5).to_a)
115
+ DiggRenderer.should have_next_page
116
+ DiggRenderer.should have_last_page
117
+ DiggRenderer.should have_first_page
118
+ DiggRenderer.should have_previous_page
119
+
120
+ # First Previous 1 [2] 3 4 Next Last
121
+ DiggRenderer.total_pages = 4
122
+ DiggRenderer.current_page = 2
123
+ DiggRenderer.setup
124
+ DiggRenderer.should have(4).middle_section
125
+ DiggRenderer.should have(0).first_page_section
126
+ DiggRenderer.should have(0).last_page_section
127
+ DiggRenderer.middle_section.should eql((1..4).to_a)
128
+ DiggRenderer.should have_next_page
129
+ DiggRenderer.should have_last_page
130
+ DiggRenderer.should have_first_page
131
+ DiggRenderer.should have_previous_page
132
+
133
+ # First Previous 1 [2] 3 4 5 6 7 8 9 Next Last
134
+ DiggRenderer.total_pages = 9
135
+ DiggRenderer.current_page = 2
136
+ DiggRenderer.setup
137
+ DiggRenderer.should have(9).middle_section
138
+ DiggRenderer.should have(0).first_page_section
139
+ DiggRenderer.should have(0).last_page_section
140
+ DiggRenderer.middle_section.should eql((1..9).to_a)
141
+ DiggRenderer.should have_next_page
142
+ DiggRenderer.should have_last_page
143
+ DiggRenderer.should have_first_page
144
+ DiggRenderer.should have_previous_page
145
+
146
+ # First Previous 1 [2] 3 4 5 6 7 8 9 10 Next Last
147
+ DiggRenderer.total_pages = 10
148
+ DiggRenderer.current_page = 2
149
+ DiggRenderer.setup
150
+ DiggRenderer.should have(10).middle_section
151
+ DiggRenderer.should have(0).first_page_section
152
+ DiggRenderer.should have(0).last_page_section
153
+ DiggRenderer.middle_section.should eql((1..10).to_a)
154
+ DiggRenderer.should have_next_page
155
+ DiggRenderer.should have_last_page
156
+ DiggRenderer.should have_first_page
157
+ DiggRenderer.should have_previous_page
158
+
159
+ # First Previous 1 [2] 3 4 5 6 7 ... 9 10 11 Next Last
160
+ DiggRenderer.total_pages = 11
161
+ DiggRenderer.current_page = 2
162
+ DiggRenderer.setup
163
+ DiggRenderer.should have(7).middle_section
164
+ DiggRenderer.should have(0).first_page_section
165
+ DiggRenderer.should have(3).last_page_section
166
+ DiggRenderer.last_page_section.should eql((9..11).to_a)
167
+ DiggRenderer.middle_section.should eql((1..7).to_a)
168
+ DiggRenderer.should have_next_page
169
+ DiggRenderer.should have_last_page
170
+ DiggRenderer.should have_first_page
171
+ DiggRenderer.should have_previous_page
172
+
173
+ # empty
174
+ DiggRenderer.total_pages = 0
175
+ DiggRenderer.current_page = 1
176
+ DiggRenderer.setup
177
+ DiggRenderer.should_not have_links
178
+
179
+ # empty
180
+ DiggRenderer.total_pages = 1
181
+ DiggRenderer.current_page = 1
182
+ DiggRenderer.setup
183
+ DiggRenderer.should_not have_links
184
+
185
+ # First Previous 1 2 [3] 4 5 6 7 8 9 10 11 Next Last
186
+ DiggRenderer.total_pages = 11
187
+ DiggRenderer.current_page = 3
188
+ DiggRenderer.setup
189
+ DiggRenderer.should have(11).middle_section
190
+ DiggRenderer.should have(0).first_page_section
191
+ DiggRenderer.should have(0).last_page_section
192
+ DiggRenderer.middle_section.should eql((1..11).to_a)
193
+ DiggRenderer.should have_next_page
194
+ DiggRenderer.should have_last_page
195
+ DiggRenderer.should have_first_page
196
+ DiggRenderer.should have_previous_page
197
+
198
+ # First Previous 1 2 3 4 5 [6] 7 8 9 10 11 Next Last
199
+ DiggRenderer.total_pages = 11
200
+ DiggRenderer.current_page = 6
201
+ DiggRenderer.setup
202
+ DiggRenderer.should have(11).middle_section
203
+ DiggRenderer.should have(0).first_page_section
204
+ DiggRenderer.should have(0).last_page_section
205
+ DiggRenderer.middle_section.should eql((1..11).to_a)
206
+ DiggRenderer.should have_next_page
207
+ DiggRenderer.should have_last_page
208
+ DiggRenderer.should have_first_page
209
+ DiggRenderer.should have_previous_page
210
+
211
+ # First Previous 1 2 3 4 5 6 [7] 8 9 10 11 Next Last
212
+ DiggRenderer.total_pages = 11
213
+ DiggRenderer.current_page = 7
214
+ DiggRenderer.setup
215
+ DiggRenderer.should have(11).middle_section
216
+ DiggRenderer.should have(0).first_page_section
217
+ DiggRenderer.should have(0).last_page_section
218
+ DiggRenderer.middle_section.should eql((1..11).to_a)
219
+ DiggRenderer.should have_next_page
220
+ DiggRenderer.should have_last_page
221
+ DiggRenderer.should have_first_page
222
+ DiggRenderer.should have_previous_page
223
+
224
+ # First Previous 1 2 3 4 5 6 7 [8] 9 10 11 Next Last
225
+ DiggRenderer.total_pages = 11
226
+ DiggRenderer.current_page = 8
227
+ DiggRenderer.setup
228
+ DiggRenderer.should have(11).middle_section
229
+ DiggRenderer.should have(0).first_page_section
230
+ DiggRenderer.should have(0).last_page_section
231
+ DiggRenderer.middle_section.should eql((1..11).to_a)
232
+ DiggRenderer.should have_next_page
233
+ DiggRenderer.should have_last_page
234
+ DiggRenderer.should have_first_page
235
+ DiggRenderer.should have_previous_page
236
+
237
+ # First Previous 1 2 3 4 5 6 7 8 [9] 10 11 Next Last
238
+ DiggRenderer.total_pages = 11
239
+ DiggRenderer.current_page = 9
240
+ DiggRenderer.setup
241
+ DiggRenderer.should have(11).middle_section
242
+ DiggRenderer.should have(0).first_page_section
243
+ DiggRenderer.should have(0).last_page_section
244
+ DiggRenderer.middle_section.should eql((1..11).to_a)
245
+ DiggRenderer.should have_next_page
246
+ DiggRenderer.should have_last_page
247
+ DiggRenderer.should have_first_page
248
+ DiggRenderer.should have_previous_page
249
+
250
+ # First Previous 1 2 3 ... 5 6 7 8 9 [10] 11 Next Last
251
+ DiggRenderer.total_pages = 11
252
+ DiggRenderer.current_page = 10
253
+ DiggRenderer.setup
254
+ DiggRenderer.should have(7).middle_section
255
+ DiggRenderer.should have_first_page_section
256
+ DiggRenderer.should_not have_last_page_section
257
+ DiggRenderer.should have(3).first_page_section
258
+ DiggRenderer.first_page_section.should eql((1..3).to_a)
259
+ DiggRenderer.should have(0).last_page_section
260
+ DiggRenderer.middle_section.should eql((5..11).to_a)
261
+ DiggRenderer.should have_next_page
262
+ DiggRenderer.should have_last_page
263
+ DiggRenderer.should have_first_page
264
+ DiggRenderer.should have_previous_page
265
+
266
+ # First Previous 1 2 3 ... 6 7 8 9 10 [11]
267
+ DiggRenderer.total_pages = 11
268
+ DiggRenderer.current_page = 11
269
+ DiggRenderer.setup
270
+ DiggRenderer.should have(6).middle_section
271
+ DiggRenderer.should have_first_page_section
272
+ DiggRenderer.should_not have_last_page_section
273
+ DiggRenderer.should have(3).first_page_section
274
+ DiggRenderer.first_page_section.should eql((1..3).to_a)
275
+ DiggRenderer.should have(0).last_page_section
276
+ DiggRenderer.middle_section.should eql((6..11).to_a)
277
+ DiggRenderer.should_not have_next_page
278
+ DiggRenderer.should_not have_last_page
279
+ DiggRenderer.should have_first_page
280
+ DiggRenderer.should have_previous_page
281
+
282
+ # First Previous 1 2 3 ... 22 23 24 25 26 [27] 28 29 30 31 32 ... 48 49 50 Next Last
283
+ DiggRenderer.total_pages = 50
284
+ DiggRenderer.current_page = 27
285
+ DiggRenderer.setup
286
+ DiggRenderer.should have(11).middle_section
287
+ DiggRenderer.middle_section.should eql((22..32).to_a)
288
+ DiggRenderer.should have_first_page_section
289
+ DiggRenderer.should have_last_page_section
290
+ DiggRenderer.should have(3).first_page_section
291
+ DiggRenderer.first_page_section.should eql((1..3).to_a)
292
+ DiggRenderer.should have(3).last_page_section
293
+ DiggRenderer.last_page_section.should eql((48..50).to_a)
294
+ DiggRenderer.should have_next_page
295
+ DiggRenderer.should have_last_page
296
+ DiggRenderer.should have_first_page
297
+ DiggRenderer.should have_previous_page
298
+ end
299
+
300
+ end
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+
11
+ require 'rspec'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pagination_render_logic
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - sirfilip
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-03-06 00:00:00 +01:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: bundler
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :development
37
+ version_requirements: *id002
38
+ description: Will provide logic for rendering different types of pagination. ex floating digg style pagination
39
+ email:
40
+ - github.sirfilip@gmail.com
41
+ executables: []
42
+
43
+ extensions: []
44
+
45
+ extra_rdoc_files:
46
+ - LICENSE.txt
47
+ - README.rdoc
48
+ files:
49
+ - .gitignore
50
+ - Gemfile
51
+ - LICENSE.txt
52
+ - README.rdoc
53
+ - Rakefile
54
+ - lib/pagination_render_logic.rb
55
+ - lib/pagination_render_logic/digg.rb
56
+ - lib/pagination_render_logic/version.rb
57
+ - pagination_render_logic.gemspec
58
+ - specs/digg.spec
59
+ - specs/spec_helper.rb
60
+ has_rdoc: true
61
+ homepage: http://github.com/sirfilip/pagination_render_logic
62
+ licenses:
63
+ - MIT
64
+ post_install_message:
65
+ rdoc_options: []
66
+
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: "0"
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: "0"
81
+ requirements: []
82
+
83
+ rubyforge_project: pagination_render_logic
84
+ rubygems_version: 1.6.1
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: Will provide logic for rendering different types of pagination
88
+ test_files: []
89
+