dm-chunked_query 0.1.2 → 0.2.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.
- data/ChangeLog.md +5 -0
- data/gemspec.yml +1 -1
- data/lib/dm-chunked_query/chunks.rb +27 -9
- data/lib/dm-chunked_query/mixin.rb +28 -0
- data/spec/chunks_spec.rb +20 -0
- metadata +3 -5
data/ChangeLog.md
CHANGED
data/gemspec.yml
CHANGED
@@ -30,9 +30,8 @@ module DataMapper
|
|
30
30
|
# @param [Range<Integer>, Integer] key
|
31
31
|
# The index or range of indices to access.
|
32
32
|
#
|
33
|
-
# @return [DataMapper::Collection
|
33
|
+
# @return [DataMapper::Collection]
|
34
34
|
# A collection of resources at the given index or indices.
|
35
|
-
# If the index is out of bounds, `nil` will be returned.
|
36
35
|
#
|
37
36
|
def [](key)
|
38
37
|
case key
|
@@ -52,14 +51,35 @@ module DataMapper
|
|
52
51
|
# @param [#to_i] index
|
53
52
|
# The index to access.
|
54
53
|
#
|
55
|
-
# @return [DataMapper::Collection
|
56
|
-
# The chunk of resources at the given index.
|
57
|
-
# bounds, `nil` will be returned.
|
54
|
+
# @return [DataMapper::Collection]
|
55
|
+
# The chunk of resources at the given index.
|
58
56
|
#
|
59
57
|
def at(index)
|
60
58
|
chunk_at(index.to_i)
|
61
59
|
end
|
62
60
|
|
61
|
+
#
|
62
|
+
# Returns the first chunk(s).
|
63
|
+
#
|
64
|
+
# @param [Integer] n
|
65
|
+
# The number of sub-chunks to include.
|
66
|
+
#
|
67
|
+
# @return [DataMapper::Collection]
|
68
|
+
# The first chunk of resources.
|
69
|
+
#
|
70
|
+
# @raise [ArgumentError]
|
71
|
+
# The number of sub-chunks was negative.
|
72
|
+
#
|
73
|
+
# @since 0.2.0
|
74
|
+
#
|
75
|
+
def first(n=1)
|
76
|
+
if n >= 0
|
77
|
+
chunk_at(0,n)
|
78
|
+
else
|
79
|
+
raise(ArgumentError,"negative array size")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
63
83
|
#
|
64
84
|
# Enumerates over each chunk in the collection of Chunks.
|
65
85
|
#
|
@@ -75,7 +95,7 @@ module DataMapper
|
|
75
95
|
def each
|
76
96
|
return enum_for(:each) unless block_given?
|
77
97
|
|
78
|
-
|
98
|
+
length.times do |index|
|
79
99
|
yield chunk_at(index)
|
80
100
|
end
|
81
101
|
|
@@ -119,9 +139,7 @@ module DataMapper
|
|
119
139
|
# The collection of resources that makes up the chunk.
|
120
140
|
#
|
121
141
|
def chunk_at(index,span=1)
|
122
|
-
|
123
|
-
@query[(index * @per_chunk), (span * @per_chunk)]
|
124
|
-
end
|
142
|
+
@query[(index * @per_chunk), (span * @per_chunk)]
|
125
143
|
end
|
126
144
|
|
127
145
|
end
|
@@ -15,6 +15,34 @@ module DataMapper
|
|
15
15
|
def chunks(per_chunk)
|
16
16
|
Chunks.new(self,per_chunk)
|
17
17
|
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# @see chunks
|
21
|
+
#
|
22
|
+
def chunks_of(per_chunk)
|
23
|
+
chunks(per_chunk)
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Enumerate over every chunk.
|
28
|
+
#
|
29
|
+
# @param [Integer] per_chunk
|
30
|
+
# The number of resources per-chunk.
|
31
|
+
#
|
32
|
+
# @yield [chunk]
|
33
|
+
# A chunk of resources within the query.
|
34
|
+
#
|
35
|
+
# @yieldparam [DataMapper::Collection] chunk
|
36
|
+
# A collection of resources that makes up the chunk.
|
37
|
+
#
|
38
|
+
# @return [Chunks]
|
39
|
+
# The abstract collection of chunks from the query.
|
40
|
+
#
|
41
|
+
# @since 0.2.0
|
42
|
+
#
|
43
|
+
def each_chunk(per_chunk,&block)
|
44
|
+
chunks.each(&block)
|
45
|
+
end
|
18
46
|
end
|
19
47
|
end
|
20
48
|
end
|
data/spec/chunks_spec.rb
CHANGED
@@ -51,6 +51,26 @@ describe DataMapper::ChunkedQuery::Chunks do
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
+
describe "#first" do
|
55
|
+
it "should return the first chunk by default" do
|
56
|
+
resources = subject.first
|
57
|
+
numbers = resources.map { |resource| resource.number }
|
58
|
+
|
59
|
+
numbers.should == (1..10).to_a
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should return multiple chunks when n > 1" do
|
63
|
+
resources = subject.first(2)
|
64
|
+
numbers = resources.map { |resource| resource.number }
|
65
|
+
|
66
|
+
numbers.should == (1..20).to_a
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should return an empty collection when n=0" do
|
70
|
+
subject.first(0).should be_empty
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
54
74
|
it "should allow enumerating through every chunk" do
|
55
75
|
resources = []
|
56
76
|
subject.each { |chunk| resources += chunk }
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: dm-chunked_query
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.2.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Postmodern
|
@@ -10,8 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
14
|
-
default_executable:
|
13
|
+
date: 2011-04-19 00:00:00 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: dm-core
|
@@ -96,7 +95,6 @@ files:
|
|
96
95
|
- spec/chunked_query_spec.rb
|
97
96
|
- spec/chunks_spec.rb
|
98
97
|
- spec/spec_helper.rb
|
99
|
-
has_rdoc: yard
|
100
98
|
homepage: http://github.com/postmodern/dm-chunked_query
|
101
99
|
licenses:
|
102
100
|
- MIT
|
@@ -120,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
118
|
requirements: []
|
121
119
|
|
122
120
|
rubyforge_project: dm-chunked_query
|
123
|
-
rubygems_version: 1.
|
121
|
+
rubygems_version: 1.7.2
|
124
122
|
signing_key:
|
125
123
|
specification_version: 3
|
126
124
|
summary: Allows performing chunked queries with DataMapper.
|