godfat-pagify 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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