paginator 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 412dd437adc3fd2e1f4346d8f4a1625922b61a51
4
+ data.tar.gz: e73eb679ec867386d7fca8b010da284e5bb0fa29
5
+ SHA512:
6
+ metadata.gz: c2552a2b8740b47ace8e8d45d7b1ec31dc1141224abf1a68d849d6fad64beda5d6834d736305aeac921ccb14ba6e12f13eb0ac8472d7ed8be88a2704c29a8941
7
+ data.tar.gz: 5483016b70e70910c977c30b59a75d05c9029fefbde45a3aab2c3ca7036d236a930aff0c383d2f015d0c400c6f7e1fb3dfdb910fdfebfb3f958a9a9ca4531e96
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
@@ -0,0 +1 @@
1
+ 2.0.0-p247
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in paginator.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2006-2013 Bruce Williams
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,64 @@
1
+ Paginator
2
+ =========
3
+
4
+ Paginator is a simple pagination class that provides a generic interface suitable
5
+ for use in any Ruby program.
6
+
7
+ Paginator doesn't make any assumptions as to how data is retrieved; you just
8
+ have to provide it with the total number of objects and a way to pull a specific
9
+ set of objects based on the offset and number of objects per page.
10
+
11
+ Examples
12
+ --------
13
+
14
+ In both of these examples I'm using a `PER_PAGE` constant (the number of
15
+ items per page), but it's merely for labeling purposes.
16
+
17
+ You could, of course, just pass in the number of items per page
18
+ directly to the initializer without assigning it somewhere beforehand.
19
+
20
+ ### In Plain Ruby
21
+
22
+ ```ruby
23
+ bunch_o_data = (1..60).to_a
24
+ pager = Paginator.create(bunch_o_data.size, PER_PAGE) do |offset, per_page|
25
+ bunch_o_data[offset,per_page]
26
+ end
27
+ pager.each do |page|
28
+ puts "Page ##{page.number}"
29
+ page.each do |item|
30
+ puts item
31
+ end
32
+ end
33
+ ```
34
+
35
+ ### In Rails
36
+
37
+ Nothing changes with Paginator; you just use ActiveRecord from within
38
+ the block you provide.
39
+
40
+ A controller action:
41
+
42
+ ```ruby
43
+ def index
44
+ @pager = Paginator.create(Foo.count, PER_PAGE) do |offset, per_page|
45
+ Foo.limit(per_page).offset(offset)
46
+ end
47
+ @page = @pager.page(params[:page])
48
+ end
49
+ ```
50
+
51
+ In your view:
52
+
53
+ ```erb
54
+ <% @page.each do |foo| %>
55
+ <%# Show something for each item %>
56
+ <% end %>
57
+ <%= @page.number %>
58
+ <%= link_to("Prev", foos_url(page: @page.prev.number)) if @page.prev? %>
59
+ <%= link_to("Next", foos_url(page: @page.next.number)) if @page.next? %>
60
+ ```
61
+
62
+ ### License
63
+
64
+ See `LICENSE.txt`.
data/Rakefile CHANGED
@@ -1,21 +1,11 @@
1
- # -*- ruby -*-
1
+ require "bundler/gem_tasks"
2
2
 
3
- require 'rubygems'
4
- require 'hoe'
5
- require './lib/paginator.rb'
3
+ require 'rake/testtask'
6
4
 
7
- Hoe.new('paginator', Paginator::VERSION) do |p|
8
- p.rubyforge_name = 'paginator'
9
- p.summary = 'A generic paginator object for use in any Ruby program'
10
- p.description =<<EOD
11
- Paginator doesn't make any assumptions as to how data is retrieved; you just
12
- have to provide it with the total number of objects and a way to pull a specific
13
- set of objects based on the offset and number of objects per page.
14
- EOD
15
- p.url = "http://paginator.rubyforge.org"
16
- p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
17
- p.email = %q{bruce@codefluency.com}
18
- p.author = ["Bruce Williams"]
5
+ Rake::TestTask.new do |t|
6
+ t.libs << "test"
7
+ t.test_files = FileList['spec/*_spec.rb']
8
+ t.verbose = true
19
9
  end
20
10
 
21
- # vim: syntax=Ruby
11
+ task :default => :test
@@ -1,143 +1,14 @@
1
- require 'forwardable'
2
-
3
- class Paginator
4
-
5
- VERSION = '1.1.1'
6
-
7
- include Enumerable
1
+ module Paginator
8
2
 
9
3
  class ArgumentError < ::ArgumentError; end
10
4
  class MissingCountError < ArgumentError; end
11
- class MissingSelectError < ArgumentError; end
12
-
13
- attr_reader :per_page, :count
14
-
15
- # Instantiate a new Paginator object
16
- #
17
- # Provide:
18
- # * A total count of the number of objects to paginate
19
- # * The number of objects in each page
20
- # * A block that returns the array of items
21
- # * The block is passed the item offset
22
- # (and the number of items to show per page, for
23
- # convenience, if the arity is 2)
24
- def initialize(count, per_page, &select)
25
- @count, @per_page = count, per_page
26
- unless select
27
- raise MissingSelectError, "Must provide block to select data for each page"
28
- end
29
- @select = select
30
- end
31
-
32
- # Total number of pages
33
- def number_of_pages
34
- (@count / @per_page).to_i + (@count % @per_page > 0 ? 1 : 0)
35
- end
36
-
37
- # First page object
38
- def first
39
- page 1
40
- end
41
-
42
- # Last page object
43
- def last
44
- page number_of_pages
45
- end
46
-
47
- def each
48
- 1.upto(number_of_pages) do |number|
49
- yield page(number)
50
- end
51
- end
52
-
53
- # Retrieve page object by number
54
- def page(number)
55
- number = (n = number.to_i) > 0 ? n : 1
56
- Page.new(self, number, lambda {
57
- offset = (number - 1) * @per_page
58
- args = [offset]
59
- args << @per_page if @select.arity == 2
60
- @select.call(*args)
61
- })
62
- end
63
-
64
- # Page object
65
- #
66
- # Retrieves items for a page and provides metadata about the position
67
- # of the page in the paginator
68
- class Page
69
-
70
- include Enumerable
71
-
72
- attr_reader :number, :pager
73
-
74
- def initialize(pager, number, select) #:nodoc:
75
- @pager, @number = pager, number
76
- @offset = (number - 1) * pager.per_page
77
- @select = select
78
- end
79
-
80
- # Retrieve the items for this page
81
- # * Caches
82
- def items
83
- @items ||= @select.call
84
- end
85
-
86
- # Does this page have any items?
87
- def empty?
88
- items.empty?
89
- end
90
-
91
- # Checks to see if there's a page before this one
92
- def prev?
93
- @number > 1
94
- end
95
-
96
- # # Get previous page (if possible)
97
- def prev
98
- @pager.page(@number - 1) if prev?
99
- end
100
-
101
- # Checks to see if there's a page after this one
102
- def next?
103
- @number < @pager.number_of_pages
104
- end
105
-
106
- # Get next page (if possible)
107
- def next
108
- @pager.page(@number + 1) if next?
109
- end
110
-
111
- # The "item number" of the first item on this page
112
- def first_item_number
113
- 1 + @offset
114
- end
115
-
116
- # The "item number" of the last item on this page
117
- def last_item_number
118
- if next?
119
- @offset + @pager.per_page
120
- else
121
- @pager.count
122
- end
123
- end
124
-
125
- def ==(other) #:nodoc:
126
- @pager == other.pager && self.number == other.number
127
- end
128
-
129
- def each(&block)
130
- items.each(&block)
131
- end
132
-
133
- def method_missing(meth, *args, &block) #:nodoc:
134
- if @pager.respond_to?(meth)
135
- @pager.__send__(meth, *args, &block)
136
- else
137
- super
138
- end
139
- end
140
-
5
+ class MissingSelectError < ArgumentError; end
6
+
7
+ autoload :Pager, 'paginator/pager'
8
+ autoload :Page, 'paginator/page'
9
+
10
+ def self.create(count, per_page, &select)
11
+ Pager.new(count, per_page, &select)
141
12
  end
142
-
143
- end
13
+
14
+ end
@@ -0,0 +1,82 @@
1
+ module Paginator
2
+
3
+ # Page object
4
+ #
5
+ # Retrieves items for a page and provides metadata about the position
6
+ # of the page in the paginator
7
+ class Page
8
+
9
+ include Enumerable
10
+
11
+ attr_reader :number, :pager
12
+
13
+ def initialize(pager, number, select) #:nodoc:
14
+ @pager, @number = pager, number
15
+ @offset = (number - 1) * pager.per_page
16
+ @select = select
17
+ end
18
+
19
+ # Retrieve the items for this page
20
+ # * Caches
21
+ def items
22
+ @items ||= @select.call
23
+ end
24
+
25
+ # Does this page have any items?
26
+ def empty?
27
+ items.empty?
28
+ end
29
+
30
+ # Checks to see if there's a page before this one
31
+ def prev?
32
+ @number > 1
33
+ end
34
+
35
+ # Get previous page (if possible)
36
+ def prev
37
+ @pager.page(@number - 1) if prev?
38
+ end
39
+
40
+ # Checks to see if there's a page after this one
41
+ def next?
42
+ @number < @pager.number_of_pages
43
+ end
44
+
45
+ # Get next page (if possible)
46
+ def next
47
+ @pager.page(@number + 1) if next?
48
+ end
49
+
50
+ # The "item number" of the first item on this page
51
+ def first_item_number
52
+ 1 + @offset
53
+ end
54
+
55
+ # The "item number" of the last item on this page
56
+ def last_item_number
57
+ if next?
58
+ @offset + @pager.per_page
59
+ else
60
+ @pager.count
61
+ end
62
+ end
63
+
64
+ def ==(other) #:nodoc:
65
+ @pager == other.pager && self.number == other.number
66
+ end
67
+
68
+ def each(&block)
69
+ items.each(&block)
70
+ end
71
+
72
+ def method_missing(meth, *args, &block) #:nodoc:
73
+ if @pager.respond_to?(meth)
74
+ @pager.__send__(meth, *args, &block)
75
+ else
76
+ super
77
+ end
78
+ end
79
+
80
+ end
81
+
82
+ end
@@ -0,0 +1,59 @@
1
+ module Paginator
2
+
3
+ class Pager
4
+ include Enumerable
5
+
6
+ attr_reader :per_page, :count
7
+
8
+ # Instantiate a new Paginator object
9
+ #
10
+ # Provide:
11
+ # * A total count of the number of objects to paginate
12
+ # * The number of objects in each page
13
+ # * A block that returns the array of items
14
+ # * The block is passed the item offset
15
+ # (and the number of items to show per page, for
16
+ # convenience, if the arity is 2)
17
+ def initialize(count, per_page, &select)
18
+ @count, @per_page = count, per_page
19
+ unless select
20
+ raise MissingSelectError, "Must provide block to select data for each page"
21
+ end
22
+ @select = select
23
+ end
24
+
25
+ # Total number of pages
26
+ def number_of_pages
27
+ (@count / @per_page).to_i + (@count % @per_page > 0 ? 1 : 0)
28
+ end
29
+
30
+ # First page object
31
+ def first
32
+ page 1
33
+ end
34
+
35
+ # Last page object
36
+ def last
37
+ page number_of_pages
38
+ end
39
+
40
+ def each(&block)
41
+ return enum_for(:each) unless block_given?
42
+ 1.upto(number_of_pages) do |number|
43
+ yield page(number)
44
+ end
45
+ end
46
+
47
+ # Retrieve page object by number
48
+ def page(number)
49
+ number = (n = number.to_i) > 0 ? n : 1
50
+ Page.new(self, number, lambda {
51
+ offset = (number - 1) * @per_page
52
+ args = [offset]
53
+ args << @per_page if @select.arity == 2
54
+ @select.call(*args)
55
+ })
56
+ end
57
+ end
58
+
59
+ end
@@ -0,0 +1,3 @@
1
+ module Paginator
2
+ VERSION = '1.2.0'
3
+ end
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'paginator/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "paginator"
8
+ spec.version = Paginator::VERSION
9
+ spec.authors = ["Bruce Williams"]
10
+ spec.email = ["bruce.williams@livingsocial.com"]
11
+ spec.summary = 'A generic paginator object for use in any Ruby program'
12
+ spec.description = "Paginator doesn't make any assumptions as to how data is retrieved; you just have to provide it with tee total number of objects and a way to pull a specific set of objects based on the offset and number of objects per page."
13
+ spec.homepage = "http://github.com/bruce/paginator"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ end
@@ -1,66 +1,68 @@
1
- require 'test/unit'
1
+ require 'minitest/autorun'
2
+ require 'minitest/spec'
2
3
  require 'paginator'
3
4
 
4
- class PaginatorTest < Test::Unit::TestCase
5
+ PER_PAGE = 10
5
6
 
6
- PER_PAGE = 10
7
+ describe Paginator do
7
8
 
8
- def setup
9
+ before do
9
10
  @data = (0..43).to_a
10
- @pager = Paginator.new(@data.size, PER_PAGE) do |offset,per_page|
11
- @data[offset,per_page]
11
+ @pager = Paginator.create(@data.size, PER_PAGE) do |offset, per_page|
12
+ @data[offset, per_page]
12
13
  end
13
14
  end
14
-
15
- def test_initializing_paginator_raises_exception
15
+
16
+ it "needs a block" do
16
17
  assert_raises(Paginator::MissingSelectError) do
17
- @pager = Paginator.new(@data.size, PER_PAGE)
18
+ @pager = Paginator.create(@data.size, PER_PAGE)
18
19
  end
19
- end
20
-
21
- def test_can_get_last_page_from_page_object
22
- assert_equal @pager.last, @pager.page(2).last
23
20
  end
24
-
25
- def test_can_get_first_page_from_page_object
26
- assert_equal @pager.first, @pager.page(2).first
21
+
22
+ it "can get the last page" do
23
+ assert_equal @pager.last, @pager.page(5)
27
24
  end
28
25
 
29
- def test_does_not_exceed_per_page
26
+ it "can get the first page" do
27
+ assert_equal @pager.first, @pager.page(1)
28
+ end
29
+
30
+ it "does not exceed per_page" do
30
31
  @pager.each do |page|
31
32
  assert page.items.size <= PER_PAGE
32
33
  end
33
34
  end
34
-
35
- def test_only_last_page_has_less_items
35
+
36
+ it "only has less items on the last page" do
36
37
  @pager.each do |page|
37
38
  if page != @pager.last
38
39
  assert page.items.size <= PER_PAGE
39
40
  else
40
41
  assert page.items.size < PER_PAGE
41
42
  end
42
- end
43
+ end
43
44
  end
44
-
45
- def test_returns_correct_first_page
45
+
46
+ it "returns the correct first page" do
46
47
  assert_equal @pager.page(1).number, @pager.first.number
47
48
  end
48
-
49
- def test_returns_correct_last_page
49
+
50
+
51
+ it "returns the correct last page" do
50
52
  assert_equal @pager.page(5).number, @pager.last.number
51
53
  end
52
-
53
- def test_last_page_has_no_next_page
54
+
55
+ it "has no next page when on the last page" do
54
56
  assert !@pager.last.next?
55
57
  assert !@pager.last.next
56
58
  end
57
59
 
58
- def test_first_page_has_no_prev_page
60
+ it "has no previous page on the first page" do
59
61
  assert !@pager.first.prev?
60
62
  assert !@pager.first.prev
61
63
  end
62
-
63
- def test_page_enumerable
64
+
65
+ it "is enumerable" do
64
66
  @pager.each do |page|
65
67
  assert page
66
68
  page.each do |item|
@@ -72,14 +74,14 @@ class PaginatorTest < Test::Unit::TestCase
72
74
  assert_equal page.items, page.inject([]) {|list, item| list << item }
73
75
  end
74
76
  end
75
-
76
- def test_each_with_index
77
+
78
+ it "supports each.with_index" do
77
79
  page_offset = 0
78
- @pager.each_with_index do |page, page_index|
80
+ @pager.each.with_index do |page, page_index|
79
81
  assert page
80
82
  assert_equal page_offset, page_index
81
83
  item_offset = 0
82
- page.each_with_index do |item, item_index|
84
+ page.each.with_index do |item, item_index|
83
85
  assert item
84
86
  assert_equal item_offset, item_index
85
87
  item_offset += 1
@@ -87,28 +89,28 @@ class PaginatorTest < Test::Unit::TestCase
87
89
  page_offset += 1
88
90
  end
89
91
  end
90
-
91
- def test_number_of_pages
92
+
93
+ it "has the correct number of pages" do
92
94
  assert_equal 5, @pager.number_of_pages
93
95
  end
94
-
95
- def test_passing_block_to_initializer_with_arity_of_two_yields_per_page
96
- pager = Paginator.new(20,2) do |offset,per_page|
96
+
97
+ it "yields per_page for a block with an arity of 2" do
98
+ pager = Paginator.create(20, 2) do |offset, per_page|
97
99
  assert_equal 2, per_page
98
100
  end
99
101
  pager.page(1).items
100
102
  end
101
103
 
102
- def test_passing_block_to_initializer_with_arity_of_one_does_not_yield_per_page
103
- pager = Paginator.new(20,2) do |offset|
104
+ it "does not yield per_page for a block of arity 1" do
105
+ pager = Paginator.create(20, 2) do |offset|
104
106
  assert_equal 0, offset
105
107
  end
106
108
  pager.page(1).items
107
109
  end
108
-
109
- def test_page_object_knows_first_and_last_item_numbers
110
+
111
+ it "has pages that know the first and last page numbers" do
110
112
  items = (1..11).to_a
111
- pager = Paginator.new(items.size,3) do |offset, per_page|
113
+ pager = Paginator.create(items.size,3) do |offset, per_page|
112
114
  items[offset, per_page]
113
115
  end
114
116
  page = pager.page(1)
@@ -119,19 +121,10 @@ class PaginatorTest < Test::Unit::TestCase
119
121
  assert_equal 6, page.last_item_number
120
122
  page = pager.page(3)
121
123
  assert_equal 7, page.first_item_number
122
- assert_equal 9, page.last_item_number
124
+ assert_equal 9, page.last_item_number
123
125
  page = pager.page(4)
124
126
  assert_equal 10, page.first_item_number
125
- assert_equal 11, page.last_item_number
127
+ assert_equal 11, page.last_item_number
126
128
  end
127
129
 
128
130
  end
129
-
130
- class PaginatorTestWithMathN < PaginatorTest
131
-
132
- def setup
133
- require 'mathn'
134
- super
135
- end
136
-
137
- end
metadata CHANGED
@@ -1,71 +1,73 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: paginator
3
- version: !ruby/object:Gem::Version
4
- version: 1.1.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.0
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Bruce Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
-
12
- date: 2008-06-25 00:00:00 -05:00
13
- default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: hoe
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 1.6.0
24
- version:
25
- description: Paginator doesn't make any assumptions as to how data is retrieved; you just have to provide it with the total number of objects and a way to pull a specific set of objects based on the offset and number of objects per page.
26
- email: bruce@codefluency.com
27
- executables:
28
- - paginator
11
+ date: 2013-07-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ description: Paginator doesn't make any assumptions as to how data is retrieved; you
28
+ just have to provide it with tee total number of objects and a way to pull a specific
29
+ set of objects based on the offset and number of objects per page.
30
+ email:
31
+ - bruce.williams@livingsocial.com
32
+ executables: []
29
33
  extensions: []
30
-
31
- extra_rdoc_files:
32
- - History.txt
33
- - Manifest.txt
34
- - README.txt
35
- files:
36
- - History.txt
37
- - Manifest.txt
38
- - README.txt
34
+ extra_rdoc_files: []
35
+ files:
36
+ - .gitignore
37
+ - .ruby-version
38
+ - Gemfile
39
+ - LICENSE.txt
40
+ - README.md
39
41
  - Rakefile
40
- - bin/paginator
41
42
  - lib/paginator.rb
42
- - test/test_paginator.rb
43
- has_rdoc: true
44
- homepage: http://paginator.rubyforge.org
43
+ - lib/paginator/page.rb
44
+ - lib/paginator/pager.rb
45
+ - lib/paginator/version.rb
46
+ - paginator.gemspec
47
+ - spec/paginator_spec.rb
48
+ homepage: http://github.com/bruce/paginator
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
45
52
  post_install_message:
46
- rdoc_options:
47
- - --main
48
- - README.txt
49
- require_paths:
53
+ rdoc_options: []
54
+ require_paths:
50
55
  - lib
51
- required_ruby_version: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: "0"
56
- version:
57
- required_rubygems_version: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: "0"
62
- version:
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
63
66
  requirements: []
64
-
65
- rubyforge_project: paginator
66
- rubygems_version: 1.2.0
67
+ rubyforge_project:
68
+ rubygems_version: 2.0.3
67
69
  signing_key:
68
- specification_version: 2
70
+ specification_version: 4
69
71
  summary: A generic paginator object for use in any Ruby program
70
- test_files:
71
- - test/test_paginator.rb
72
+ test_files:
73
+ - spec/paginator_spec.rb
@@ -1,43 +0,0 @@
1
- == 1.1.0 / 2007-10-12
2
-
3
- * Paginator now mixes in Enumerable (supporting inject, etc, on pages)
4
- * Page now mixes in Enumerable (supporting inject, etc, on items)
5
-
6
- == 1.0.9 / 2007-02-17
7
-
8
- * Modified Pager#number_of_pages to support mathn's monkeypatching of Fixnum#/
9
- * Thanks, Paul King!
10
-
11
- == 1.0.8 / 2006-11-02
12
-
13
- * Added <tt>Page#first_item_number</tt> and <tt>Page#last_item_number</tt>
14
- * Thanks, Quannon Au!
15
-
16
- == 1.0.6 / 2006-11-02
17
-
18
- * Added each_with_index to Paginator and Page classes
19
-
20
- == 1.0.5 / 2006-10-27
21
-
22
- * Fix to Rakefile (addresses #6304)
23
-
24
- == 1.0.4 / 2006-10-27
25
-
26
- * Documentation fix
27
-
28
- == 1.0.3 / 2006-10-26
29
-
30
- * Documentation fix
31
-
32
- == 1.0.2 / 2006-10-25
33
-
34
- * If the block passed during Paginator has an arity of 1, the number
35
- of items per page will not be yielded to the block.
36
-
37
- == 1.0.1 / 2006-10-24
38
-
39
- * Made Paginator#page more accepting, and set it to default to 1
40
-
41
- == 1.0.0 / 2006-10-23
42
-
43
- * Initial release
@@ -1,7 +0,0 @@
1
- History.txt
2
- Manifest.txt
3
- README.txt
4
- Rakefile
5
- bin/paginator
6
- lib/paginator.rb
7
- test/test_paginator.rb
data/README.txt DELETED
@@ -1,84 +0,0 @@
1
- paginator
2
- by Bruce Williams
3
- http://codefluency.com
4
-
5
- == DESCRIPTION:
6
-
7
- Paginator is a simple pagination class that provides a generic interface suitable
8
- for use in any Ruby program.
9
-
10
- == FEATURES/PROBLEMS:
11
-
12
- Paginator doesn't make any assumptions as to how data is retrieved; you just
13
- have to provide it with the total number of objects and a way to pull a specific
14
- set of objects based on the offset and number of objects per page.
15
-
16
- == SYNOPSIS:
17
-
18
- In both of these examples I'm using a PER_PAGE constant (the number of items per page), but it's merely for labeling purposes.
19
-
20
- You could, of course, just pass in the number of items per page directly to the initializer without assigning it somewhere beforehand.
21
-
22
- === In a Rails Application
23
-
24
- def index
25
- @pager = ::Paginator.new(Foo.count, PER_PAGE) do |offset, per_page|
26
- Foo.find(:all, :limit => per_page, :offset => offset)
27
- end
28
- @page = @pager.page(params[:page])
29
- # respond_to here if you want it
30
- end
31
-
32
- # In your view
33
- <% @page.each do |foo| %>
34
- <%# Show something for each item %>
35
- <% end %>
36
- <%= @page.number %>
37
- <%= link_to("Prev", foos_url(:page => @page.prev.number)) if @page.prev? %>
38
- <%= link_to("Next", foos_url(:page => @page.next.number)) if @page.next? %>
39
-
40
- === Anything else
41
-
42
- bunch_o_data = (1..60).to_a
43
- pager = Paginator.new(bunch_o_data.size, PER_PAGE) do |offset, per_page|
44
- bunch_o_data[offset,per_page]
45
- end
46
- pager.each do |page|
47
- puts "Page ##{page.number}"
48
- page.each do |item|
49
- puts item
50
- end
51
- end
52
-
53
- == REQUIREMENTS:
54
-
55
- None.
56
-
57
- == INSTALL:
58
-
59
- No special instructions.
60
-
61
- == LICENSE:
62
-
63
- (The MIT License)
64
-
65
- Copyright (c) 2006-2007 Bruce Williams (http://codefluency.com)
66
-
67
- Permission is hereby granted, free of charge, to any person obtaining
68
- a copy of this software and associated documentation files (the
69
- 'Software'), to deal in the Software without restriction, including
70
- without limitation the rights to use, copy, modify, merge, publish,
71
- distribute, sublicense, and/or sell copies of the Software, and to
72
- permit persons to whom the Software is furnished to do so, subject to
73
- the following conditions:
74
-
75
- The above copyright notice and this permission notice shall be
76
- included in all copies or substantial portions of the Software.
77
-
78
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
79
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
80
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
81
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
82
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
83
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
84
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
File without changes