mongoid-sequence2 0.2.0 → 0.2.3
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/Changelogs.md +5 -0
- data/Gemfile +1 -0
- data/README.md +11 -0
- data/lib/mongoid-sequence2/sequence.rb +29 -0
- data/lib/mongoid-sequence2/sequences.rb +15 -0
- data/lib/mongoid-sequence2/version.rb +2 -2
- data/lib/mongoid-sequence2.rb +26 -38
- data/mongoid-sequence2.gemspec +2 -1
- data/test/config/mongoid.yml +10 -0
- data/test/setup_test.rb +83 -0
- data/test/test_helper.rb +3 -2
- metadata +40 -5
- checksums.yaml +0 -15
data/Changelogs.md
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -12,6 +12,17 @@ https://github.com/agile42/mongoid_sequence2/ **from francis**
|
|
12
12
|
|
13
13
|
## Usage
|
14
14
|
|
15
|
+
### setup
|
16
|
+
|
17
|
+
since `v0.2.3` you can specific custom default storage options for `Mongoid::Sequences`, eg:
|
18
|
+
|
19
|
+
#config/initializers/sequence2.rb
|
20
|
+
Mongoid::Sequence2.setup do |config|
|
21
|
+
config.collection_name = :__sequences
|
22
|
+
config.session = :default
|
23
|
+
end
|
24
|
+
|
25
|
+
|
15
26
|
Include `Mongoid::Sequence` in your class and call `sequence(:field)`.
|
16
27
|
|
17
28
|
Like this:
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Sequence
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
set_callback :validate, :before, :set_sequence, :unless => :persisted?
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.included(base)
|
10
|
+
base.extend(ClassMethods)
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
attr_accessor :sequence_fields
|
15
|
+
|
16
|
+
def sequence(fieldname)
|
17
|
+
self.sequence_fields ||= []
|
18
|
+
self.sequence_fields << fieldname
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_sequence
|
23
|
+
self.class.sequence_fields.each do |f|
|
24
|
+
self[f] = Sequences.get_next_sequence(self.class.name.underscore, f)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Mongoid
|
2
|
+
class Sequences
|
3
|
+
include Mongoid::Document
|
4
|
+
store_in session: "#{Mongoid::Sequence2.session}",
|
5
|
+
collection: "#{Mongoid::Sequence2.collection_name}"
|
6
|
+
|
7
|
+
field :fieldname
|
8
|
+
field :seq, type: Integer
|
9
|
+
|
10
|
+
def self.get_next_sequence(collection, fieldname)
|
11
|
+
#Sequences.where(fieldname: "#{collection}_#{fieldname}").find_and_modify({'$inc' => {'seq' => 1}}, {'upsert' => 'true', :new => true}).seq
|
12
|
+
self.where(fieldname: "#{collection}_#{fieldname}").find_and_modify({'$inc' => {'seq' => 1}}, {'upsert' => 'true', :new => true}).seq
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/mongoid-sequence2.rb
CHANGED
@@ -1,44 +1,32 @@
|
|
1
|
-
require "mongoid-sequence2/version"
|
2
1
|
require "active_support/concern"
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
included do
|
9
|
-
set_callback :validate, :before, :set_sequence, :unless => :persisted?
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.included(base)
|
13
|
-
base.extend(ClassMethods)
|
14
|
-
end
|
15
|
-
|
16
|
-
module ClassMethods
|
17
|
-
attr_accessor :sequence_fields
|
18
|
-
|
19
|
-
def sequence(fieldname)
|
20
|
-
self.sequence_fields ||= []
|
21
|
-
self.sequence_fields << fieldname
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class Sequences
|
26
|
-
include Mongoid::Document
|
27
|
-
store_in collection: "__sequences"
|
28
|
-
|
29
|
-
field :fieldname
|
30
|
-
field :seq, type: Integer
|
31
|
-
|
32
|
-
def self.get_next_sequence(collection, fieldname)
|
33
|
-
Sequences.where(fieldname: "#{collection}_#{fieldname}").find_and_modify({'$inc' => {'seq' => 1}}, {'upsert' => 'true', :new => true}).seq
|
34
|
-
end
|
35
|
-
end
|
3
|
+
require "mongoid-sequence2/version"
|
4
|
+
# require "mongoid-sequence2/sequences"
|
5
|
+
# require "mongoid-sequence2/sequence"
|
36
6
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
7
|
+
module Mongoid
|
8
|
+
autoload :Sequence, "mongoid-sequence2/sequence"
|
9
|
+
autoload :Sequences, "mongoid-sequence2/sequences"
|
10
|
+
|
11
|
+
module Sequence2
|
12
|
+
# Defines the collection in which the `Mongoid::Sequences` store_in.
|
13
|
+
mattr_accessor :collection_name
|
14
|
+
@@collection_name = :__sequences
|
15
|
+
|
16
|
+
# Defines the session in which the `Mongoid::Sequences` store_in.
|
17
|
+
mattr_accessor :session
|
18
|
+
@@session = :default
|
19
|
+
# Allow configuring Mongoid::Sequence2 with a block
|
20
|
+
# now provide the specific custom default storage options for `Mongoid::Sequences`
|
21
|
+
#
|
22
|
+
# Example:
|
23
|
+
#
|
24
|
+
# Mongoid::Sequence2.setup do |config|
|
25
|
+
# config.session = :default
|
26
|
+
# config.collection = :__sequences
|
27
|
+
# end
|
28
|
+
def self.setup
|
29
|
+
yield self
|
41
30
|
end
|
42
|
-
|
43
31
|
end
|
44
32
|
end
|
data/mongoid-sequence2.gemspec
CHANGED
@@ -12,10 +12,11 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.add_dependency("activesupport", "~> 3.1")
|
13
13
|
gem.add_development_dependency("rake", "~> 0.9")
|
14
14
|
gem.add_development_dependency "database_cleaner", "~> 0.9.1"
|
15
|
+
gem.add_development_dependency "test-unit", "~> 2.5.5"
|
15
16
|
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
17
|
gem.files = `git ls-files`.split("\n")
|
17
18
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
19
|
gem.name = "mongoid-sequence2"
|
19
20
|
gem.require_paths = ["lib"]
|
20
|
-
gem.version = Mongoid::
|
21
|
+
gem.version = Mongoid::Sequence2::VERSION
|
21
22
|
end
|
data/test/config/mongoid.yml
CHANGED
@@ -78,3 +78,13 @@ test:
|
|
78
78
|
# low amounts for fast failures.
|
79
79
|
max_retries: 1
|
80
80
|
retry_interval: 0
|
81
|
+
custom_session:
|
82
|
+
database: mongoid-sequence_test
|
83
|
+
hosts:
|
84
|
+
- localhost:27017
|
85
|
+
options:
|
86
|
+
consistency: :strong
|
87
|
+
# In the test environment we lower the retries and retry interval to
|
88
|
+
# low amounts for fast failures.
|
89
|
+
max_retries: 1
|
90
|
+
retry_interval: 0
|
data/test/setup_test.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class SetupSessionTest < BaseTest
|
4
|
+
self.test_order = :defined
|
5
|
+
# http://stackoverflow.com/questions/11185517/why-does-testunit-test-order-not-working-as-expected
|
6
|
+
|
7
|
+
|
8
|
+
def reload_sequences
|
9
|
+
Mongoid::Sequences.store_in session: "#{Mongoid::Sequence2.session}",
|
10
|
+
collection: "#{Mongoid::Sequence2.collection_name}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def reset_setup
|
14
|
+
Mongoid::Sequence2.setup do |config|
|
15
|
+
config.collection_name = :__sequences
|
16
|
+
config.session = :default
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def reset_sequences
|
21
|
+
reset_setup
|
22
|
+
reload_sequences
|
23
|
+
end
|
24
|
+
|
25
|
+
######test session
|
26
|
+
def test_default_session
|
27
|
+
reset_setup
|
28
|
+
|
29
|
+
assert_equal Mongoid::Sequence2.session, :default
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_sequences_default_session
|
33
|
+
reset_sequences
|
34
|
+
|
35
|
+
assert_equal Mongoid::Sequences.mongo_session, Mongoid::Sessions.default
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_custom_session
|
39
|
+
Mongoid::Sequence2.setup do |config|
|
40
|
+
config.session = :custom_session
|
41
|
+
end
|
42
|
+
assert_equal Mongoid::Sequence2.session, :custom_session
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_sequences_custom_session
|
46
|
+
Mongoid::Sequence2.setup do |config|
|
47
|
+
config.session = :custom_session
|
48
|
+
end
|
49
|
+
|
50
|
+
reload_sequences
|
51
|
+
|
52
|
+
assert_equal Mongoid::Sequences.mongo_session, Mongoid::Sessions.with_name(:custom_session)
|
53
|
+
end
|
54
|
+
|
55
|
+
######test collection_name
|
56
|
+
|
57
|
+
def test_default_collection_name
|
58
|
+
reset_setup
|
59
|
+
assert_equal Mongoid::Sequence2.collection_name, :__sequences
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_sequences_default_collection_name
|
63
|
+
reset_sequences
|
64
|
+
|
65
|
+
assert_equal Mongoid::Sequences.collection_name, :__sequences
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_custom_collection_name
|
69
|
+
Mongoid::Sequence2.setup do |config|
|
70
|
+
config.collection_name = :sequences
|
71
|
+
end
|
72
|
+
assert_equal Mongoid::Sequence2.collection_name, :sequences
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_sequences_custom_collection_name
|
76
|
+
Mongoid::Sequence2.setup do |config|
|
77
|
+
config.collection_name = :sequences
|
78
|
+
end
|
79
|
+
|
80
|
+
reload_sequences
|
81
|
+
assert_equal Mongoid::Sequences.collection_name, :sequences
|
82
|
+
end
|
83
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require 'test/unit'
|
3
2
|
require "bundler/setup"
|
4
3
|
require "test/unit"
|
5
4
|
require "mongoid"
|
6
5
|
require 'database_cleaner'
|
7
6
|
|
8
|
-
|
7
|
+
$:.push File.expand_path("../lib", __FILE__)
|
8
|
+
require "mongoid-sequence2"
|
9
|
+
# require File.expand_path("../../lib/mongoid-sequence2", __FILE__)
|
9
10
|
|
10
11
|
Mongoid.load!("./test/config/mongoid.yml", :test)
|
11
12
|
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
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.3
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- jhjguxin
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-26 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: mongoid
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -23,6 +25,7 @@ dependencies:
|
|
23
25
|
type: :runtime
|
24
26
|
prerelease: false
|
25
27
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
26
29
|
requirements:
|
27
30
|
- - ! '>='
|
28
31
|
- !ruby/object:Gem::Version
|
@@ -33,6 +36,7 @@ dependencies:
|
|
33
36
|
- !ruby/object:Gem::Dependency
|
34
37
|
name: activesupport
|
35
38
|
requirement: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
36
40
|
requirements:
|
37
41
|
- - ~>
|
38
42
|
- !ruby/object:Gem::Version
|
@@ -40,6 +44,7 @@ dependencies:
|
|
40
44
|
type: :runtime
|
41
45
|
prerelease: false
|
42
46
|
version_requirements: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
43
48
|
requirements:
|
44
49
|
- - ~>
|
45
50
|
- !ruby/object:Gem::Version
|
@@ -47,6 +52,7 @@ dependencies:
|
|
47
52
|
- !ruby/object:Gem::Dependency
|
48
53
|
name: rake
|
49
54
|
requirement: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
50
56
|
requirements:
|
51
57
|
- - ~>
|
52
58
|
- !ruby/object:Gem::Version
|
@@ -54,6 +60,7 @@ dependencies:
|
|
54
60
|
type: :development
|
55
61
|
prerelease: false
|
56
62
|
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
57
64
|
requirements:
|
58
65
|
- - ~>
|
59
66
|
- !ruby/object:Gem::Version
|
@@ -61,6 +68,7 @@ dependencies:
|
|
61
68
|
- !ruby/object:Gem::Dependency
|
62
69
|
name: database_cleaner
|
63
70
|
requirement: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
64
72
|
requirements:
|
65
73
|
- - ~>
|
66
74
|
- !ruby/object:Gem::Version
|
@@ -68,10 +76,27 @@ dependencies:
|
|
68
76
|
type: :development
|
69
77
|
prerelease: false
|
70
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
71
80
|
requirements:
|
72
81
|
- - ~>
|
73
82
|
- !ruby/object:Gem::Version
|
74
83
|
version: 0.9.1
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: test-unit
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ~>
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: 2.5.5
|
92
|
+
type: :development
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ~>
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 2.5.5
|
75
100
|
description: Mongoid::Sequence2 gives you the ability to specify fields to behave
|
76
101
|
like a sequence number (exactly like the "id" column in conventional SQL flavors).
|
77
102
|
email:
|
@@ -87,6 +112,8 @@ files:
|
|
87
112
|
- README.md
|
88
113
|
- Rakefile
|
89
114
|
- lib/mongoid-sequence2.rb
|
115
|
+
- lib/mongoid-sequence2/sequence.rb
|
116
|
+
- lib/mongoid-sequence2/sequences.rb
|
90
117
|
- lib/mongoid-sequence2/version.rb
|
91
118
|
- mongoid-sequence2.gemspec
|
92
119
|
- test/config/mongoid.yml
|
@@ -96,30 +123,38 @@ files:
|
|
96
123
|
- test/models/paranoia_sequenced_model.rb
|
97
124
|
- test/models/second_sequenced_model.rb
|
98
125
|
- test/paranoia_test.rb
|
126
|
+
- test/setup_test.rb
|
99
127
|
- test/test_helper.rb
|
100
128
|
- test/uniqueness_test.rb
|
101
129
|
homepage: https://github.com/jhjguxin/mongoid-sequence2
|
102
130
|
licenses: []
|
103
|
-
metadata: {}
|
104
131
|
post_install_message:
|
105
132
|
rdoc_options: []
|
106
133
|
require_paths:
|
107
134
|
- lib
|
108
135
|
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
109
137
|
requirements:
|
110
138
|
- - ! '>='
|
111
139
|
- !ruby/object:Gem::Version
|
112
140
|
version: '0'
|
141
|
+
segments:
|
142
|
+
- 0
|
143
|
+
hash: -336202797
|
113
144
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
114
146
|
requirements:
|
115
147
|
- - ! '>='
|
116
148
|
- !ruby/object:Gem::Version
|
117
149
|
version: '0'
|
150
|
+
segments:
|
151
|
+
- 0
|
152
|
+
hash: -336202797
|
118
153
|
requirements: []
|
119
154
|
rubyforge_project:
|
120
|
-
rubygems_version:
|
155
|
+
rubygems_version: 1.8.25
|
121
156
|
signing_key:
|
122
|
-
specification_version:
|
157
|
+
specification_version: 3
|
123
158
|
summary: Specify fields to behave like a sequence number (exactly like the "id" column
|
124
159
|
in conventional SQL flavors).
|
125
160
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
YzI5ZmZkNzNjNjVmNTUzNjE4NGJmYTQ5YWYxZWNlYmNmMjdhODg4YQ==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
Y2QyNWU3NGY1MWMwODYwOGI3MzliNjBjMjQ1NWE1ZTU3ZTdlYTYzZg==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
YjExYjE3M2E1OTg4Y2RkMTMyZDIwZDA5N2U3ZDM1YjEzOTE4M2I3NzFhNWIw
|
10
|
-
NzcxZTc5NTMyYmMzODlhZjM0OWI5YzAxMTM3ODFmNDU5NjVkMzM5NTJhMDEx
|
11
|
-
ZmNmMTEzNzQzZDg3Mjc5OGI0MDQzZDg5YjYxZGQyNjUxMDYwOWI=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZDRhNGQ1YjA1NGZlZjkyMTYxYTZlMGVkNTA4YzViNWIwZWIyNWUwM2NmZGQ1
|
14
|
-
OTE3NGYzY2RkMmQzYzZmNmViMjNkZmI2NjliZjU0OGUyYmFiN2ZlMTNiM2Qz
|
15
|
-
MjliYmE3MTI1MmQ1MDhlYmMxZmIzMzM0ZTFhOTQwNWUxYTEyNmI=
|