godfat-pagify 0.5.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.
@@ -0,0 +1,19 @@
1
+
2
+ require 'test/helper'
3
+ require 'test/test_pagify'
4
+
5
+ class TestArray < TestPagify
6
+ def test_offset_bug
7
+ a = (0..9).to_a
8
+ pager = Pagify::ArrayPager.new a
9
+ pager.per_page = 5
10
+ assert_equal 5, pager[1].size
11
+ assert_equal 5, pager[2].size
12
+ assert_equal Pagify::NullPage.new(pager), pager[3]
13
+ end
14
+
15
+ def test_for_array
16
+ for_pager Pagify::ArrayPager.new(TestPagify.data)
17
+ end
18
+
19
+ end
@@ -0,0 +1,22 @@
1
+
2
+ require 'test/helper'
3
+ require 'test/test_pagify'
4
+
5
+ class TestBasic < TestPagify
6
+ def test_basic
7
+ pager = Pagify::BasicPager.new(
8
+ :fetcher => lambda{ |offset, per_page|
9
+ # if for rails,
10
+ # Data.find :all, :offset => offset, :limit => per_page
11
+ TestPagify.data[offset, per_page]
12
+ },
13
+ :counter => lambda{
14
+ # if for rails,
15
+ # Data.count
16
+ TestPagify.data.size
17
+ })
18
+
19
+ for_pager pager
20
+ end
21
+
22
+ end
@@ -0,0 +1,55 @@
1
+
2
+ require 'test/helper'
3
+ require 'test/suite_for_model'
4
+
5
+ require 'pagify/data_mapper'
6
+
7
+ class TestDataMapper < TestPagify
8
+ def test_for_data_mapper
9
+ for_pager Pagify::DataMapperPager.new(Topic)
10
+ end
11
+
12
+ class Topic
13
+ class << self
14
+ def count opts = {}
15
+ 101
16
+ end
17
+ def all opts = {}
18
+ TestPagify.data[opts[:offset], opts[:limit]]
19
+ end
20
+ def query
21
+ nil
22
+ end
23
+ private
24
+ def with_scope query
25
+ yield
26
+ end
27
+ end
28
+ end
29
+
30
+ DataMapper.setup(:default, 'sqlite3::memory:')
31
+
32
+ class User
33
+ include DataMapper::Resource
34
+ property :id, Serial
35
+ property :name, String
36
+ has n, :pets
37
+ end
38
+
39
+ class Pet
40
+ include DataMapper::Resource
41
+ property :id, Serial
42
+ property :name, String
43
+ belongs_to :user
44
+ end
45
+
46
+ User.auto_migrate!
47
+ Pet.auto_migrate!
48
+
49
+ include SuiteForModel
50
+
51
+ def all_pets_with_name_godfat user
52
+ user.pets.all(:name => 'godfat')
53
+ end
54
+
55
+ end
data/test/test_html.rb ADDED
@@ -0,0 +1,160 @@
1
+
2
+ require 'test/helper'
3
+
4
+ require 'pagify/helpers/html'
5
+
6
+ class TestHTML < MiniTest::Unit::TestCase
7
+ # def test_page_and_pager_has_same_html
8
+ # pager = Pagify::ArrayPager.new [1]
9
+ # assert_equal pager.html.object_id, pager[1].html.object_id
10
+ # end
11
+
12
+ def test_html
13
+ pager1 = Pagify::ArrayPager.new []
14
+ assert_equal ' ', pager1.html.setting[:separator]
15
+ assert_equal Pagify::Helpers::HTML.object_id, pager1.html.class.object_id
16
+
17
+ pager1.html.setting[:separator] = 'XD'
18
+ assert_equal 'XD', pager1.html.setting[:separator]
19
+ assert_equal ' ', pager1.html.class.setting[:separator]
20
+
21
+ pager2 = Pagify::ArrayPager.new []
22
+ assert_equal ' ', pager2.html.setting[:separator]
23
+
24
+ pager2.html.setting[:inner_links] = 6
25
+ assert_equal 6, pager2.html.setting[:inner_links]
26
+ assert_equal 4, pager1.html.setting[:inner_links]
27
+ assert_equal 4, pager2.html.class.setting[:inner_links]
28
+
29
+ pager2.html.class.setting[:outer_links] = 3
30
+ assert_equal 3, pager1.html.setting[:outer_links]
31
+ assert_equal 3, pager2.html.setting[:outer_links]
32
+
33
+ pager1.html.setting[:outer_links] = 4
34
+ assert_equal 4, pager1.html.setting[:outer_links]
35
+ assert_equal 3, pager2.html.setting[:outer_links]
36
+
37
+ pager1.html.setting.restore_default!
38
+ assert_equal ' ', pager1.html.setting[:separator]
39
+ assert_equal 4, pager1.html.setting[:inner_links]
40
+ assert_equal 6, pager2.html.setting[:inner_links]
41
+ assert_equal 3, pager1.html.setting[:outer_links]
42
+ assert_equal 3, pager2.html.setting[:outer_links]
43
+
44
+ pager2.html.class.setting.restore_default!
45
+ assert_equal 6, pager2.html.setting[:inner_links]
46
+ assert_equal 2, pager1.html.setting[:outer_links]
47
+ assert_equal 2, pager2.html.setting[:outer_links]
48
+ end
49
+
50
+ def test_generate_html
51
+ # skip 'not implemented'
52
+
53
+ pager = Pagify::ArrayPager.new((1..1000).to_a, :per_page => 10)
54
+ users = pager[50]
55
+
56
+ assert_equal(#'<a href="49">&lt; Previous</a> 50 <a href="51">Next &gt;</a><br />'+
57
+ '<a href="1">&laquo; First</a> ' +
58
+ '<a href="2">2</a> ' + # outer links
59
+ # '... ' +
60
+ # '<a href="31">31</a> ' + # step links, offset = step * step
61
+ # '... ' +
62
+ # '<a href="40">40</a> ' + # step links, amount = inner / 2
63
+ # '<a href="43">43</a> ' +
64
+ '... ' +
65
+ '<a href="46">46</a> ' + # inner links
66
+ '<a href="47">47</a> ' +
67
+ '<a href="48">48</a> ' +
68
+ '<a href="49">49</a> ' +
69
+ '50 ' +
70
+ '<a href="51">51</a> ' +
71
+ '<a href="52">52</a> ' +
72
+ '<a href="53">53</a> ' +
73
+ '<a href="54">54</a> ' + # inner links
74
+ '... ' +
75
+ # '<a href="57">57</a> ' +
76
+ # '<a href="60">60</a> ' + # step links, amount = inner / 2
77
+ # '... ' +
78
+ # '<a href="69">69</a> ' + # step links, offset = step * step
79
+ # '... ' +
80
+ '<a href="99">99</a> ' + # outer links
81
+ '<a href="100">Last &raquo;</a>',
82
+ users.pager.html.links(50, &:to_s) )
83
+ end
84
+
85
+ def test_with_class
86
+ pager = Pagify::ArrayPager.new((1..1000).to_a, :per_page => 10)
87
+ pager.html.setting[:class] = 'pagify'
88
+ pager.html.setting[:separator] = ',,'
89
+ pager.html.setting[:ellipsis] = 'zzz'
90
+ users = pager[50]
91
+
92
+ assert_equal(#'<a href="49">&lt; Previous</a> 50 <a href="51">Next &gt;</a><br />'+
93
+ '<a href="1" class="pagify">&laquo; First</a>,,' +
94
+ '<a href="2" class="pagify">2</a>,,' + # outer links
95
+ 'zzz,,' +
96
+ '<a href="46" class="pagify">46</a>,,' + # inner links
97
+ '<a href="47" class="pagify">47</a>,,' +
98
+ '<a href="48" class="pagify">48</a>,,' +
99
+ '<a href="49" class="pagify">49</a>,,' +
100
+ '50,,' +
101
+ '<a href="51" class="pagify">51</a>,,' +
102
+ '<a href="52" class="pagify">52</a>,,' +
103
+ '<a href="53" class="pagify">53</a>,,' +
104
+ '<a href="54" class="pagify">54</a>,,' + # inner links
105
+ 'zzz,,' +
106
+ '<a href="99" class="pagify">99</a>,,' + # outer links
107
+ '<a href="100" class="pagify">Last &raquo;</a>',
108
+ users.pager.html.links(50, &:to_s) )
109
+ end
110
+
111
+ def test_no_page
112
+ pager = Pagify::ArrayPager.new([1], :per_page => 10)
113
+ nothing_there pager
114
+ pager.html.setting[:outer_links] = 10
115
+ nothing_there pager
116
+ pager.html.setting[:inner_links] = 1
117
+ nothing_there pager
118
+ pager.html.setting[:inner_links] = 5
119
+ nothing_there pager
120
+ end
121
+
122
+ def nothing_there pager
123
+ assert_equal('', pager.html.links(1, &:to_s))
124
+ end
125
+
126
+ def test_nothing
127
+ pager = Pagify::ArrayPager.new([1,2,3])
128
+ assert_equal '', pager.html.links_navigate(1, &:to_s)
129
+ end
130
+
131
+ def test_null_pager
132
+ pager = Pagify::NullPager.instance
133
+ assert_equal '', pager.html.links(1)
134
+ assert_equal '', pager.html.links(nil)
135
+ assert_equal '', pager.html.links('')
136
+ assert_equal '', pager.html.links(2)
137
+ assert_equal '', pager.html.links(-1)
138
+ end
139
+
140
+ def test_2_pages
141
+ pager = Pagify::ArrayPager.new([1,2,3], :per_page => 2)
142
+ assert_equal '&laquo; First <a href="2">Last &raquo;</a>', pager.html.links(1, &:to_s)
143
+ assert_equal '<a href="1">&laquo; First</a> Last &raquo;', pager.html.links(2, &:to_s)
144
+
145
+ assert_equal '<a href="2">Next &gt;</a>', pager.html.links_navigate(1, &:to_s)
146
+ assert_equal '<a href="1">&lt; Previous</a>', pager.html.links_navigate(2, &:to_s)
147
+ end
148
+
149
+ def test_3_pages
150
+ pager = Pagify::ArrayPager.new([1,2,3,4,5], :per_page => 2)
151
+ assert_equal '&laquo; First <a href="2">2</a> <a href="3">Last &raquo;</a>', pager.html.links(1, &:to_s)
152
+ assert_equal '<a href="1">&laquo; First</a> 2 <a href="3">Last &raquo;</a>', pager.html.links(2, &:to_s)
153
+ assert_equal '<a href="1">&laquo; First</a> <a href="2">2</a> Last &raquo;', pager.html.links(3, &:to_s)
154
+
155
+ assert_equal '<a href="2">Next &gt;</a>', pager.html.links_navigate(1, &:to_s)
156
+ assert_equal '<a href="1">&lt; Previous</a> <a href="3">Next &gt;</a>', pager.html.links_navigate(2, &:to_s)
157
+ assert_equal '<a href="2">&lt; Previous</a>', pager.html.links_navigate(3, &:to_s)
158
+ end
159
+
160
+ end
data/test/test_null.rb ADDED
@@ -0,0 +1,22 @@
1
+
2
+ require 'test/helper'
3
+
4
+ class TestNull < MiniTest::Unit::TestCase
5
+ def test_null_pager
6
+ nullpage = Pagify::NullPager.instance.page(0)
7
+ assert_equal 0, nullpage.page
8
+ assert_equal nullpage.object_id, nullpage.next.object_id
9
+ assert_equal 0, nullpage.size
10
+ assert_equal [], nullpage.data
11
+ assert_equal nullpage.object_id, nullpage.pager.page(0).object_id
12
+
13
+ assert_equal nullpage.object_id, Pagify::NullPager.instance.page(1).object_id
14
+ assert_equal nullpage.pager.object_id, Pagify::NullPage.new.pager.object_id
15
+
16
+ dummy_pager = Pagify::BasicPager.new(:null_page => true,
17
+ :fetcher => lambda{|*a|[]}, :counter => lambda{0})
18
+
19
+ assert_equal Pagify::NullPage.new(dummy_pager), dummy_pager.page(1)
20
+ end
21
+
22
+ end
@@ -0,0 +1,41 @@
1
+
2
+ require 'test/helper'
3
+
4
+ class TestPagify < MiniTest::Unit::TestCase
5
+ def self.data; @data ||= (0..100).to_a; end
6
+ def for_pager pager
7
+ # assume data.size is 101, data is [0,1,2,3...]
8
+ pager.per_page = 10
9
+ assert_equal 11, pager.size
10
+
11
+ null_page = Pagify::NullPage.new(pager)
12
+
13
+ assert_equal null_page, pager[0]
14
+ assert_equal((0..9).to_a, pager.page(1).to_a)
15
+ assert_equal((10..19).to_a, pager[2].to_a)
16
+ assert_equal(20, pager.page(3).first)
17
+ assert_equal((90..99).to_a, pager[10].to_a)
18
+ assert_equal([100], pager.page(11).to_a)
19
+ assert_equal null_page, pager.page(12)
20
+
21
+ assert_equal(pager[1], pager[2].prev)
22
+ assert_equal(pager.page(11), pager[10].next)
23
+ assert_equal null_page, pager[1].prev
24
+ assert_equal Pagify::NullPage.new(pager), pager[10].next.next
25
+
26
+ assert_equal pager[4].data, pager[4].fetch
27
+ assert_equal(pager[1], pager.pages.first)
28
+ assert_equal(pager[2], pager.to_a[1])
29
+ assert_equal(5050, pager.inject(0){|r, i| r += i.inject(&:+) })
30
+
31
+ assert_equal 4, pager[4].page
32
+
33
+ assert_equal 10, pager[2].begin
34
+ assert_equal 19, pager[2].end
35
+ assert_equal 100, pager[11].end
36
+
37
+ pager.null_page = false
38
+
39
+ assert_nil pager[12]
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: godfat-pagify
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - "Lin Jen-Shin (a.k.a. godfat \xE7\x9C\x9F\xE5\xB8\xB8)"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-12-11 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: bones
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.1.0
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: extlib
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - <=
30
+ - !ruby/object:Gem::Version
31
+ version: 0.9.8
32
+ version:
33
+ - !ruby/object:Gem::Dependency
34
+ name: dm-core
35
+ version_requirement:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - <=
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.7
41
+ version:
42
+ - !ruby/object:Gem::Dependency
43
+ name: dm-aggregates
44
+ version_requirement:
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - <=
48
+ - !ruby/object:Gem::Version
49
+ version: 0.9.7
50
+ version:
51
+ - !ruby/object:Gem::Dependency
52
+ name: activerecord
53
+ version_requirement:
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: 2.0.0
59
+ version:
60
+ - !ruby/object:Gem::Dependency
61
+ name: minitest
62
+ version_requirement:
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 1.3.0
68
+ version:
69
+ description: pagination tools for plain Ruby, DataMapper, ActiveRecord, and other ORM.
70
+ email: godfat (XD) godfat.org
71
+ executables: []
72
+
73
+ extensions: []
74
+
75
+ extra_rdoc_files:
76
+ - CHANGES
77
+ - LICENSE
78
+ - NOTICE
79
+ - README
80
+ - TODO
81
+ - pagify.gemspec
82
+ files:
83
+ - CHANGES
84
+ - LICENSE
85
+ - NOTICE
86
+ - README
87
+ - Rakefile
88
+ - TODO
89
+ - lib/pagify.rb
90
+ - lib/pagify/active_record.rb
91
+ - lib/pagify/array.rb
92
+ - lib/pagify/basic.rb
93
+ - lib/pagify/data_mapper.rb
94
+ - lib/pagify/helpers/abstract.rb
95
+ - lib/pagify/helpers/details/setting.rb
96
+ - lib/pagify/helpers/details/setup.rb
97
+ - lib/pagify/helpers/html.rb
98
+ - lib/pagify/null.rb
99
+ - lib/pagify/pagers/active_record.rb
100
+ - lib/pagify/pagers/array.rb
101
+ - lib/pagify/pagers/basic.rb
102
+ - lib/pagify/pagers/data_mapper.rb
103
+ - lib/pagify/pagers/details/page_accept_string_or_blank.rb
104
+ - lib/pagify/pagers/null.rb
105
+ - lib/pagify/pages/basic.rb
106
+ - lib/pagify/pages/null.rb
107
+ - lib/pagify/pagifiers/abstract.rb
108
+ - lib/pagify/pagifiers/active_record.rb
109
+ - lib/pagify/pagifiers/array.rb
110
+ - lib/pagify/pagifiers/data_mapper.rb
111
+ - lib/pagify/version.rb
112
+ - pagify.gemspec
113
+ - spec/pagify_spec.rb
114
+ - spec/spec_helper.rb
115
+ - tasks/ann.rake
116
+ - tasks/bones.rake
117
+ - tasks/gem.rake
118
+ - tasks/git.rake
119
+ - tasks/manifest.rake
120
+ - tasks/notes.rake
121
+ - tasks/post_load.rake
122
+ - tasks/rdoc.rake
123
+ - tasks/rubyforge.rake
124
+ - tasks/setup.rb
125
+ - tasks/spec.rake
126
+ - tasks/svn.rake
127
+ - tasks/test.rake
128
+ - test/helper.rb
129
+ - test/suite_for_model.rb
130
+ - test/test_active_record.rb
131
+ - test/test_array.rb
132
+ - test/test_basic.rb
133
+ - test/test_data_mapper.rb
134
+ - test/test_html.rb
135
+ - test/test_null.rb
136
+ - test/test_pagify.rb
137
+ has_rdoc: true
138
+ homepage: http://github.com/godfat/pagify
139
+ post_install_message:
140
+ rdoc_options:
141
+ - --diagram
142
+ - --charset=utf-8
143
+ - --inline-source
144
+ - --line-numbers
145
+ - --promiscuous
146
+ - --main
147
+ - README
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: "0"
155
+ version:
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: "0"
161
+ version:
162
+ requirements: []
163
+
164
+ rubyforge_project: ludy
165
+ rubygems_version: 1.2.0
166
+ signing_key:
167
+ specification_version: 2
168
+ summary: pagination tools for plain Ruby, DataMapper, ActiveRecord, and other ORM.
169
+ test_files:
170
+ - test/test_active_record.rb
171
+ - test/test_array.rb
172
+ - test/test_basic.rb
173
+ - test/test_data_mapper.rb
174
+ - test/test_html.rb
175
+ - test/test_null.rb
176
+ - test/test_pagify.rb