page_up 0.0.4 → 0.0.5
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/page_up/fragment.rb +41 -0
- data/lib/page_up/pages.rb +1 -0
- data/lib/page_up/version.rb +1 -1
- data/lib/page_up.rb +1 -0
- data/spec/page_up/fragment_spec.rb +44 -0
- data/spec/page_up/pages_spec.rb +0 -1
- data.tar.gz.sig +0 -0
- metadata +5 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bc4dafe82f5d801b24a6471c6c852e24dce7b7b8
|
|
4
|
+
data.tar.gz: ef4e91f8807d28faf5370381b69eb0b9df4ffe98
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b82269e408155eae4e5ece5e69215f450d716998bdb7c9cbc1936fa3ec0e74d852f1407387bc75c207af577b830c292289480c0404fbc7459298dae47cdb7838
|
|
7
|
+
data.tar.gz: ff17bb46b8a1359fa2daa6f45ebc0e1fb3cd1faf4caa9fcaff49973ea6289968d518309f5adf35c60e94b544694acb8f48fdc04454dbffc5541df08583fe556a
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module PageUp
|
|
2
|
+
class Fragment
|
|
3
|
+
NullResult = 'NullResult'
|
|
4
|
+
|
|
5
|
+
def initialize fragment, page, per_page
|
|
6
|
+
@page, @per_page = page, per_page
|
|
7
|
+
@fragment = [].fill(NullResult, 0, offset) + fragment
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def [] range
|
|
11
|
+
until covers? range
|
|
12
|
+
next_page = page_for(range)
|
|
13
|
+
result = @callback.call next_page, @per_page
|
|
14
|
+
result.each_with_index do |value, index|
|
|
15
|
+
@fragment[index + offset(next_page)] = value
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
@fragment[range]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def use &block
|
|
22
|
+
@callback = block
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def page_for range
|
|
28
|
+
first_null = range.find { |index| @fragment.fetch(index,NullResult) == NullResult } || range.end + 1
|
|
29
|
+
(first_null / @per_page) + 1
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def offset page = @page
|
|
33
|
+
(page - 1) * @per_page
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def covers? range
|
|
37
|
+
!range.any? { |index| @fragment.fetch(index,NullResult) == NullResult }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
data/lib/page_up/pages.rb
CHANGED
data/lib/page_up/version.rb
CHANGED
data/lib/page_up.rb
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'page_up/fragment'
|
|
2
|
+
|
|
3
|
+
describe 'fragmented pages' do
|
|
4
|
+
let(:source) { ( 1..100).to_a }
|
|
5
|
+
let(:fragment) { (21..40 ).to_a }
|
|
6
|
+
let(:pages) { PageUp::Fragment.new fragment, 2, 20 }
|
|
7
|
+
|
|
8
|
+
context 'when the range requested is within the fragment' do
|
|
9
|
+
it 'returns the local results' do
|
|
10
|
+
expect(pages[20...40]).to eq fragment
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context 'when the range is outside the fragment' do
|
|
15
|
+
let(:pages_requested) { [] }
|
|
16
|
+
|
|
17
|
+
before do
|
|
18
|
+
pages.use do |page, per_page|
|
|
19
|
+
pages_requested << [page, per_page]
|
|
20
|
+
source.slice (page -1)* per_page, per_page
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'will call the block supplied to use with page and the amount per page' do
|
|
25
|
+
pages[40...60]
|
|
26
|
+
expect(pages_requested).to eq [[3,20]]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'will call the block with only the desired pages' do
|
|
30
|
+
pages[60...80]
|
|
31
|
+
expect(pages_requested).to eq [[4,20]]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'will call the block multiple times if required' do
|
|
35
|
+
pages[70...90]
|
|
36
|
+
expect(pages_requested).to eq [[4,20],[5,20]]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'will return the desired fragment' do
|
|
40
|
+
expect(pages[70...90]).to eq (71..90).to_a
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
data/spec/page_up/pages_spec.rb
CHANGED
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: page_up
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jon Rowe
|
|
@@ -29,7 +29,7 @@ cert_chain:
|
|
|
29
29
|
2feWfO4gCNmvfFjULOAYHq9JHEjN5SLSXvj5HdSnDcCyIfJKn5Ya3JahWQaWIsXf
|
|
30
30
|
/NPE/mB57TOwj+d7XUa2NC4HUadF8R51IYEcIB0PpIEzJlKtfXFcOZxO
|
|
31
31
|
-----END CERTIFICATE-----
|
|
32
|
-
date: 2013-
|
|
32
|
+
date: 2013-11-05 00:00:00.000000000 Z
|
|
33
33
|
dependencies:
|
|
34
34
|
- !ruby/object:Gem::Dependency
|
|
35
35
|
name: rake
|
|
@@ -87,9 +87,11 @@ files:
|
|
|
87
87
|
- README.md
|
|
88
88
|
- Rakefile
|
|
89
89
|
- lib/page_up.rb
|
|
90
|
+
- lib/page_up/fragment.rb
|
|
90
91
|
- lib/page_up/pages.rb
|
|
91
92
|
- lib/page_up/version.rb
|
|
92
93
|
- page_up.gemspec
|
|
94
|
+
- spec/page_up/fragment_spec.rb
|
|
93
95
|
- spec/page_up/pages_spec.rb
|
|
94
96
|
homepage: https://github.com/JonRowe/page_up
|
|
95
97
|
licenses:
|
|
@@ -116,4 +118,5 @@ signing_key:
|
|
|
116
118
|
specification_version: 4
|
|
117
119
|
summary: Simple paginator
|
|
118
120
|
test_files:
|
|
121
|
+
- spec/page_up/fragment_spec.rb
|
|
119
122
|
- spec/page_up/pages_spec.rb
|
metadata.gz.sig
CHANGED
|
Binary file
|