mongoid-scroll 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +22 -7
- data/CHANGELOG.md +6 -1
- data/Gemfile +1 -1
- data/examples/moped_scroll_feed.rb +1 -1
- data/lib/mongoid/scroll/cursor.rb +3 -1
- data/lib/mongoid/scroll/version.rb +1 -1
- data/spec/mongoid/criteria_spec.rb +14 -0
- data/spec/mongoid/scroll_cursor_spec.rb +26 -6
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49f6957fe1cfab726fa346c141eb979487590912
|
4
|
+
data.tar.gz: e791fd49a8bf4aa187aaccb5222ada9f1e0dcf89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5cdf23a3ee65c76874d71ff8d78cb948c478e8f75b53cc930717493d2bc7ebc13b3787c06c4527eec197bd241b7b7ac4f62ca4ce5eb01cf67f56e54b2438a17b
|
7
|
+
data.tar.gz: 9606b19764c8aa3a578e1f7b7f278d9cc4f1ce1849aaa5de5804024dd9a7399b9a4d337febe88dea7f415692268ea1c171091ca6eff0bcc467f15f3f1799d7e3
|
data/.rubocop_todo.yml
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
-
# This configuration was generated by
|
2
|
-
#
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2015-08-08 11:38:01 -0400 using RuboCop version 0.33.0.
|
3
4
|
# The point is for the user to remove these configuration records
|
4
5
|
# one by one as the offenses are removed from the code base.
|
5
6
|
# Note that changes in the inspected code, or installation of new
|
6
7
|
# versions of RuboCop, may require this file to be generated again.
|
7
8
|
|
8
|
-
# Offense count:
|
9
|
+
# Offense count: 5
|
9
10
|
Metrics/AbcSize:
|
10
11
|
Max: 70
|
11
12
|
|
@@ -13,7 +14,7 @@ Metrics/AbcSize:
|
|
13
14
|
Metrics/CyclomaticComplexity:
|
14
15
|
Max: 11
|
15
16
|
|
16
|
-
# Offense count:
|
17
|
+
# Offense count: 83
|
17
18
|
# Configuration parameters: AllowURI, URISchemes.
|
18
19
|
Metrics/LineLength:
|
19
20
|
Max: 170
|
@@ -27,14 +28,28 @@ Metrics/MethodLength:
|
|
27
28
|
Metrics/PerceivedComplexity:
|
28
29
|
Max: 12
|
29
30
|
|
30
|
-
# Offense count:
|
31
|
+
# Offense count: 13
|
31
32
|
Style/Documentation:
|
32
|
-
|
33
|
+
Exclude:
|
34
|
+
- 'examples/mongoid_scroll_feed.rb'
|
35
|
+
- 'lib/mongoid/criterion/scrollable.rb'
|
36
|
+
- 'lib/mongoid/scroll/cursor.rb'
|
37
|
+
- 'lib/mongoid/scroll/errors/base.rb'
|
38
|
+
- 'lib/mongoid/scroll/errors/invalid_cursor_error.rb'
|
39
|
+
- 'lib/mongoid/scroll/errors/multiple_sort_fields_error.rb'
|
40
|
+
- 'lib/mongoid/scroll/errors/no_such_field_error.rb'
|
41
|
+
- 'lib/mongoid/scroll/errors/unsupported_field_type_error.rb'
|
42
|
+
- 'lib/mongoid/scroll/mongoid.rb'
|
43
|
+
- 'lib/mongoid/scroll/version.rb'
|
44
|
+
- 'lib/moped/scrollable.rb'
|
45
|
+
- 'spec/support/feed/embedded_item.rb'
|
46
|
+
- 'spec/support/feed/item.rb'
|
33
47
|
|
34
48
|
# Offense count: 1
|
35
49
|
# Configuration parameters: Exclude.
|
36
50
|
Style/FileName:
|
37
|
-
|
51
|
+
Exclude:
|
52
|
+
- 'lib/mongoid-scroll.rb'
|
38
53
|
|
39
54
|
# Offense count: 6
|
40
55
|
# Configuration parameters: SupportedStyles.
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
|
+
0.3.2 (8/8/2015)
|
2
|
+
----------------
|
3
|
+
|
4
|
+
* [#7](https://github.com/dblock/mongoid-scroll/pull/7): Fix: pre-merge cursor criteria fields - [@sweir27](https://github.com/sweir27).
|
5
|
+
|
1
6
|
0.3.1 (7/27/2015)
|
2
|
-
|
7
|
+
-----------------
|
3
8
|
|
4
9
|
* Compatibility with Mongoid 5.x beta - [@dblock](https://github.com/dblock).
|
5
10
|
* [#4](https://github.com/dblock/mongoid-scroll/pull/4): Fix: support chaining `$or` criteria - [@sweir27](https://github.com/sweir27).
|
data/Gemfile
CHANGED
@@ -28,7 +28,7 @@ next_cursor = nil
|
|
28
28
|
loop do
|
29
29
|
current_cursor = next_cursor
|
30
30
|
next_cursor = nil
|
31
|
-
Mongoid.default_session['feed_items'].find.limit(scroll_by).sort(position: 1).scroll(current_cursor,
|
31
|
+
Mongoid.default_session['feed_items'].find.limit(scroll_by).sort(position: 1).scroll(current_cursor, field_type: Integer, field_name: 'position') do |item, cursor|
|
32
32
|
puts "#{item['position']}: #{item['title']}"
|
33
33
|
next_cursor = cursor
|
34
34
|
total_shown += 1
|
@@ -14,7 +14,9 @@ module Mongoid
|
|
14
14
|
compare_direction = direction == 1 ? '$gt' : '$lt'
|
15
15
|
cursor_criteria = { field_name => { compare_direction => mongo_value } } if mongo_value
|
16
16
|
tiebreak_criteria = { field_name => mongo_value, :_id => { compare_direction => tiebreak_id } } if mongo_value && tiebreak_id
|
17
|
-
|
17
|
+
cursor_selector = Origin::Selector.new
|
18
|
+
cursor_selector.merge!('$or' => [cursor_criteria, tiebreak_criteria].compact) if cursor_criteria || tiebreak_criteria
|
19
|
+
cursor_selector.__evolve_object_id__
|
18
20
|
end
|
19
21
|
|
20
22
|
class << self
|
@@ -130,6 +130,20 @@ describe Mongoid::Criteria do
|
|
130
130
|
expect(records.size).to eq 1
|
131
131
|
expect(records.map(&:name)).to eq ['Feed Item 2']
|
132
132
|
end
|
133
|
+
it 'merges cursor criteria when no sort field is given' do
|
134
|
+
criteria = Feed::Item.where(:a_time.gt => Time.new(2013, 7, 22, 1, 2, 3))
|
135
|
+
feed_item_1 = Feed::Item.where(name: 'Feed Item 1').first
|
136
|
+
cursor_input = "#{feed_item_1.id}:#{feed_item_1.id}"
|
137
|
+
field_type = Mongoid::Scroll.mongoid3? ? Moped::BSON::ObjectId : BSON::ObjectId
|
138
|
+
cursor_options = { field_type: field_type, field_name: '_id', direction: 1 }
|
139
|
+
cursor = Mongoid::Scroll::Cursor.new(cursor_input, cursor_options)
|
140
|
+
records = []
|
141
|
+
criteria.limit(2).scroll(cursor) do |record, next_cursor|
|
142
|
+
records << record
|
143
|
+
cursor = next_cursor
|
144
|
+
end
|
145
|
+
expect(records.size).to eq 2
|
146
|
+
end
|
133
147
|
end
|
134
148
|
context 'with embeddable objects' do
|
135
149
|
before do
|
@@ -15,6 +15,26 @@ describe Mongoid::Scroll::Cursor do
|
|
15
15
|
/The cursor supplied is invalid: invalid./
|
16
16
|
end
|
17
17
|
end
|
18
|
+
context 'an id field cursor' do
|
19
|
+
let(:feed_item) { Feed::Item.create!(a_string: 'astring') }
|
20
|
+
field_type = Mongoid::Scroll.mongoid3? ? Moped::BSON::ObjectId : BSON::ObjectId
|
21
|
+
subject do
|
22
|
+
Mongoid::Scroll::Cursor.new "#{feed_item.id}:#{feed_item.id}", field_name: '_id', field_type: field_type, direction: 1
|
23
|
+
end
|
24
|
+
its(:value) { should eq feed_item.id.to_s }
|
25
|
+
its(:tiebreak_id) { should eq feed_item.id }
|
26
|
+
its(:criteria) do
|
27
|
+
if Mongoid::Scroll.mongoid3?
|
28
|
+
should eq('$or' => [
|
29
|
+
{ '_id' => { '$gt' => Moped::BSON::ObjectId("#{feed_item.id}") } }
|
30
|
+
])
|
31
|
+
else
|
32
|
+
should eq('$or' => [
|
33
|
+
{ '_id' => { '$gt' => BSON::ObjectId("#{feed_item.id}") } }
|
34
|
+
])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
18
38
|
context 'a string field cursor' do
|
19
39
|
let(:feed_item) { Feed::Item.create!(a_string: 'astring') }
|
20
40
|
subject do
|
@@ -25,7 +45,7 @@ describe Mongoid::Scroll::Cursor do
|
|
25
45
|
its(:criteria) do
|
26
46
|
should eq('$or' => [
|
27
47
|
{ 'a_string' => { '$gt' => feed_item.a_string } },
|
28
|
-
{ 'a_string' => feed_item.a_string,
|
48
|
+
{ 'a_string' => feed_item.a_string, '_id' => { '$gt' => feed_item.id } }
|
29
49
|
])
|
30
50
|
end
|
31
51
|
end
|
@@ -39,7 +59,7 @@ describe Mongoid::Scroll::Cursor do
|
|
39
59
|
its(:criteria) do
|
40
60
|
should eq('$or' => [
|
41
61
|
{ 'a_integer' => { '$gt' => feed_item.a_integer } },
|
42
|
-
{ 'a_integer' => feed_item.a_integer,
|
62
|
+
{ 'a_integer' => feed_item.a_integer, '_id' => { '$gt' => feed_item.id } }
|
43
63
|
])
|
44
64
|
end
|
45
65
|
end
|
@@ -54,7 +74,7 @@ describe Mongoid::Scroll::Cursor do
|
|
54
74
|
its(:criteria) do
|
55
75
|
should eq('$or' => [
|
56
76
|
{ 'a_datetime' => { '$gt' => feed_item.a_datetime } },
|
57
|
-
{ 'a_datetime' => feed_item.a_datetime,
|
77
|
+
{ 'a_datetime' => feed_item.a_datetime, '_id' => { '$gt' => feed_item.id } }
|
58
78
|
])
|
59
79
|
end
|
60
80
|
end
|
@@ -69,7 +89,7 @@ describe Mongoid::Scroll::Cursor do
|
|
69
89
|
its(:criteria) do
|
70
90
|
should eq('$or' => [
|
71
91
|
{ 'a_date' => { '$gt' => feed_item.a_date.to_datetime } },
|
72
|
-
{ 'a_date' => feed_item.a_date.to_datetime,
|
92
|
+
{ 'a_date' => feed_item.a_date.to_datetime, '_id' => { '$gt' => feed_item.id } }
|
73
93
|
])
|
74
94
|
end
|
75
95
|
end
|
@@ -84,7 +104,7 @@ describe Mongoid::Scroll::Cursor do
|
|
84
104
|
its(:criteria) do
|
85
105
|
should eq('$or' => [
|
86
106
|
{ 'a_time' => { '$gt' => feed_item.a_time } },
|
87
|
-
{ 'a_time' => feed_item.a_time,
|
107
|
+
{ 'a_time' => feed_item.a_time, '_id' => { '$gt' => feed_item.id } }
|
88
108
|
])
|
89
109
|
end
|
90
110
|
end
|
@@ -99,7 +119,7 @@ describe Mongoid::Scroll::Cursor do
|
|
99
119
|
its(:criteria) do
|
100
120
|
should eq('$or' => [
|
101
121
|
{ 'a_time' => { '$gt' => feed_item.a_time } },
|
102
|
-
{ 'a_time' => feed_item.a_time,
|
122
|
+
{ 'a_time' => feed_item.a_time, '_id' => { '$gt' => feed_item.id } }
|
103
123
|
])
|
104
124
|
end
|
105
125
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-scroll
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Doubrovkine
|
@@ -9,34 +9,34 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-08-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3.0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '3.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: i18n
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
description:
|
@@ -45,11 +45,11 @@ executables: []
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
-
- .gitignore
|
49
|
-
- .rspec
|
50
|
-
- .rubocop.yml
|
51
|
-
- .rubocop_todo.yml
|
52
|
-
- .travis.yml
|
48
|
+
- ".gitignore"
|
49
|
+
- ".rspec"
|
50
|
+
- ".rubocop.yml"
|
51
|
+
- ".rubocop_todo.yml"
|
52
|
+
- ".travis.yml"
|
53
53
|
- CHANGELOG.md
|
54
54
|
- Gemfile
|
55
55
|
- LICENSE.md
|
@@ -89,12 +89,12 @@ require_paths:
|
|
89
89
|
- lib
|
90
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
|
-
- -
|
92
|
+
- - ">="
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '0'
|
95
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- -
|
97
|
+
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: 1.3.6
|
100
100
|
requirements: []
|