mongoid-sequence2 0.2.4 → 0.2.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 +8 -8
- data/Changelogs.md +5 -0
- data/README.md +20 -0
- data/lib/mongoid-sequence2/sequence.rb +10 -1
- data/lib/mongoid-sequence2/sequences.rb +7 -3
- data/lib/mongoid-sequence2/version.rb +1 -1
- data/test/reference_test.rb +20 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OWM3NzA3NWExMGFmOWQzZTg3YWI3ZWJiMjYzOGM4YmJiNjAzNWUyZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGI3YTVkMjJjMGIzNDg5ZDhiZGM3YjY5YzgzMmViZjc4OTY0OWM4Zg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OWQzNTlhMjFkNmNkNTQzNmQ3NjI2NmU5MmUzODFkYjg2MDY5MmYwNGJiMThk
|
10
|
+
MjQ5YTY2OWY4NjE2MGY0M2U3YmYyM2YwZmRjNzkxYzU2MzRhNWYwMTJkODhk
|
11
|
+
ZmI3NTBlOTY2ZGJkNDRmOTUwZGE3NDcwNThmNDIwYzI2ZTBkNjY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDhlN2U0NjIyZTcyOWZlNTg1MzBlMWJlODliOTBjY2YzOGMxMjQ5MWY5YmQ2
|
14
|
+
MGQ1ZjVjZjgxNDJmN2NmZGRmMDI4NzFkNDQwOWVmZGY4NTdlY2RjMWQxMDE0
|
15
|
+
MzdlZWNlYTg4NDE4NjhlODc3OGRlZDVmOWMyOTNlNDA1NWZhZWE=
|
data/Changelogs.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 0.2.5
|
2
|
+
|
3
|
+
* #1 Add `next_sequence` which allows to have any per model sequence, without need to create given model's objects. ([dawid-sklodowski](https://github.com/dawid-sklodowski))
|
4
|
+
* `next_sequence` support give an special step value, but only work with no `auto_increment` field
|
5
|
+
|
1
6
|
## 0.2.4
|
2
7
|
|
3
8
|
* fix call `sequence` with `nil` error, usually just `include Mongoid::Sequence` and no `sequence` been called will throw `undefined method `each' for nil:NilClas`
|
data/README.md
CHANGED
@@ -60,6 +60,26 @@ s2 = Sequenced.create
|
|
60
60
|
s2.id #=> 2 # and so on
|
61
61
|
```
|
62
62
|
|
63
|
+
You can also have any per model sequence without need to create given model's objects:
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
class Sequenced
|
67
|
+
include Mongoid::Document
|
68
|
+
include Mongoid::Sequence
|
69
|
+
end
|
70
|
+
|
71
|
+
Sequenced.next_sequence('some_name_1') #=> 1
|
72
|
+
Sequenced.next_sequence('some_name_1') #=> 2
|
73
|
+
Sequenced.next_sequence('some_name_2') #=> 1
|
74
|
+
# can also give an special step
|
75
|
+
Sequenced.next_sequence('some_name_2', 2) #=> 3
|
76
|
+
```
|
77
|
+
|
78
|
+
**notice**:
|
79
|
+
|
80
|
+
for `v0.2.5`, `step` should only work with no `auto_increment` field, more info check `test/reference_test.rb`
|
81
|
+
|
82
|
+
|
63
83
|
## Consistency
|
64
84
|
|
65
85
|
Mongoid::Sequence uses the atomic [findAndModify](http://www.mongodb.org/display/DOCS/findAndModify+Command) command, so you shouldn't have to worry about the sequence's consistency.
|
@@ -17,12 +17,21 @@ module Mongoid
|
|
17
17
|
self.sequence_fields ||= []
|
18
18
|
self.sequence_fields << fieldname
|
19
19
|
end
|
20
|
+
|
21
|
+
def next_sequence(field, step = 1)
|
22
|
+
step ||= 1
|
23
|
+
Sequences.get_next_sequence(self.name.underscore, field, step)
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_sequence(field)
|
27
|
+
Sequences.get_sequence(self.name.underscore, field)
|
28
|
+
end
|
20
29
|
end
|
21
30
|
|
22
31
|
def set_sequence
|
23
32
|
if self.class.sequence_fields.present?
|
24
33
|
self.class.sequence_fields.each do |f|
|
25
|
-
self[f] =
|
34
|
+
self[f] = self.class.next_sequence(f)
|
26
35
|
end
|
27
36
|
end
|
28
37
|
end
|
@@ -7,9 +7,13 @@ module Mongoid
|
|
7
7
|
field :fieldname
|
8
8
|
field :seq, type: Integer
|
9
9
|
|
10
|
-
def self.get_next_sequence(collection, fieldname)
|
11
|
-
|
12
|
-
self.where(fieldname: "#{collection}_#{fieldname}").find_and_modify({'$inc' => {'seq' =>
|
10
|
+
def self.get_next_sequence(collection, fieldname, step = 1)
|
11
|
+
step ||= 1
|
12
|
+
self.where(fieldname: "#{collection}_#{fieldname}").find_and_modify({'$inc' => {'seq' => step}}, {'upsert' => 'true', :new => true}).seq
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.get_sequence(collection, fieldname)
|
16
|
+
seq = self.where(fieldname: "#{collection}_#{fieldname}").limit(1).first.try(:seq) || 1
|
13
17
|
end
|
14
18
|
end
|
15
19
|
end
|
data/test/reference_test.rb
CHANGED
@@ -5,4 +5,24 @@ class ReferenceTest < BaseTest
|
|
5
5
|
s = ThirdSequencedModel.create(auto_increment: 1)
|
6
6
|
assert_equal s.auto_increment, 1
|
7
7
|
end
|
8
|
+
|
9
|
+
def test_next_sequence
|
10
|
+
assert_equal ThirdSequencedModel.next_sequence('test_field'), 1
|
11
|
+
assert_equal ThirdSequencedModel.next_sequence('test_field'), 2
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_next_sequence_with_step
|
15
|
+
assert_equal ThirdSequencedModel.next_sequence('test_field', 2), 2
|
16
|
+
assert_equal ThirdSequencedModel.next_sequence('test_field', 1), 3
|
17
|
+
end
|
18
|
+
|
19
|
+
# 'step' should only work with no auto_increment field
|
20
|
+
def test_auto_increment_with_step
|
21
|
+
s1 = FirstSequencedModel.create
|
22
|
+
|
23
|
+
s = FirstSequencedModel.next_sequence('auto_increment', 3)
|
24
|
+
s2 = FirstSequencedModel.create(auto_increment: s)
|
25
|
+
assert_not_equal s2.auto_increment, 4
|
26
|
+
assert_equal FirstSequencedModel.get_sequence('auto_increment'), 5
|
27
|
+
end
|
8
28
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-sequence2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jhjguxin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongoid
|