mongo-lock 1.1.4 → 1.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.
- checksums.yaml +8 -8
- data/Gemfile.lock +41 -38
- data/README.md +7 -4
- data/lib/mongo-lock.rb +22 -37
- data/lib/mongo-lock/configuration.rb +38 -4
- data/lib/mongo-lock/drivers/base.rb +41 -0
- data/lib/mongo-lock/drivers/mongo.rb +99 -0
- data/lib/mongo-lock/drivers/moped.rb +62 -0
- data/lib/mongo-lock/send_with_raise_methods.rb +28 -0
- data/lib/mongo-lock/version.rb +1 -1
- data/mongo-lock.gemspec +4 -3
- data/spec/configuration_spec.rb +66 -0
- data/spec/configure_spec.rb +8 -2
- data/spec/examples/acquire_example.rb +219 -0
- data/spec/examples/acquired_example.rb +54 -0
- data/spec/examples/available_example.rb +70 -0
- data/spec/examples/clear_expired_example.rb +100 -0
- data/spec/examples/ensure_indexes_example.rb +38 -0
- data/spec/examples/expired_example.rb +41 -0
- data/spec/examples/extend_by_example.rb +137 -0
- data/spec/examples/release_all_example.rb +117 -0
- data/spec/examples/release_example.rb +166 -0
- data/spec/initialise_spec.rb +2 -0
- data/spec/mongo_driver_spec.rb +22 -0
- data/spec/moped_driver_spec.rb +22 -0
- data/spec/rake_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -7
- data/spec/support/mongo_helper.rb +41 -0
- metadata +58 -23
- data/lib/mongo-lock/mongo_queries.rb +0 -97
- data/spec/acquire_spec.rb +0 -217
- data/spec/acquired_spec.rb +0 -53
- data/spec/available_spec.rb +0 -68
- data/spec/clear_expired_spec.rb +0 -98
- data/spec/ensure_indexes_spec.rb +0 -34
- data/spec/expired_spec.rb +0 -39
- data/spec/extend_by_spec.rb +0 -135
- data/spec/release_all_spec.rb +0 -115
- data/spec/release_spec.rb +0 -164
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
YjQzMDE4M2FmOTA3ZWM0NTc2ZjcwYzk0OTFjOGE5NzRlMDllNDMyZA==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
NmMxZDYzMDQ4ODRkOWE4ZWUyMjE1OGY0OTc1ZTkwNTZmMDc5MTc1YQ==
|
|
7
7
|
!binary "U0hBNTEy":
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
YTk0MDJlMmYwYTRiNzI4ZTdhMjRhZWVkYWViYTYxNzM2NGZiZTEyNjA4NzRi
|
|
10
|
+
MmE5MWI1OWE0NGE2OTA1ZjA2Yjg5YzNhMTNmOTJjYzFiZDBmYjJhMWNiNzky
|
|
11
|
+
YzI1ODFkZTAzNzA3ODllNGVhNWFmZjVjMjI3MGM2MGVlNmQyMmE=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
ODU1MDU2NWVkYTVkZGVhMDgzZWYzZWExNDgxYmUxYWNjNzIwOTRjMTVlMDc5
|
|
14
|
+
MTBhNzU4MDRhMTQ5MzYzOWEwM2U4ZDE2NjhiNGE1YWMwYzZiNGEwMjFlZjhk
|
|
15
|
+
NzA3MDUyMTc1YjZhMWMzZjBlODY1NGExMTgwYWEyNzljYTQ5NjU=
|
data/Gemfile.lock
CHANGED
|
@@ -1,38 +1,39 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
mongo-lock (1.
|
|
4
|
+
mongo-lock (1.2.0)
|
|
5
5
|
|
|
6
6
|
GEM
|
|
7
7
|
remote: https://rubygems.org/
|
|
8
8
|
specs:
|
|
9
|
-
actionmailer (4.0.
|
|
10
|
-
actionpack (= 4.0.
|
|
9
|
+
actionmailer (4.0.4)
|
|
10
|
+
actionpack (= 4.0.4)
|
|
11
11
|
mail (~> 2.5.4)
|
|
12
|
-
actionpack (4.0.
|
|
13
|
-
activesupport (= 4.0.
|
|
12
|
+
actionpack (4.0.4)
|
|
13
|
+
activesupport (= 4.0.4)
|
|
14
14
|
builder (~> 3.1.0)
|
|
15
15
|
erubis (~> 2.7.0)
|
|
16
16
|
rack (~> 1.5.2)
|
|
17
17
|
rack-test (~> 0.6.2)
|
|
18
|
-
activemodel (4.0.
|
|
19
|
-
activesupport (= 4.0.
|
|
18
|
+
activemodel (4.0.4)
|
|
19
|
+
activesupport (= 4.0.4)
|
|
20
20
|
builder (~> 3.1.0)
|
|
21
|
-
activerecord (4.0.
|
|
22
|
-
activemodel (= 4.0.
|
|
21
|
+
activerecord (4.0.4)
|
|
22
|
+
activemodel (= 4.0.4)
|
|
23
23
|
activerecord-deprecated_finders (~> 1.0.2)
|
|
24
|
-
activesupport (= 4.0.
|
|
24
|
+
activesupport (= 4.0.4)
|
|
25
25
|
arel (~> 4.0.0)
|
|
26
26
|
activerecord-deprecated_finders (1.0.3)
|
|
27
|
-
activesupport (4.0.
|
|
28
|
-
i18n (~> 0.6, >= 0.6.
|
|
27
|
+
activesupport (4.0.4)
|
|
28
|
+
i18n (~> 0.6, >= 0.6.9)
|
|
29
29
|
minitest (~> 4.2)
|
|
30
30
|
multi_json (~> 1.3)
|
|
31
31
|
thread_safe (~> 0.1)
|
|
32
32
|
tzinfo (~> 0.3.37)
|
|
33
33
|
arel (4.0.2)
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
bson (1.10.0)
|
|
35
|
+
bson_ext (1.10.0)
|
|
36
|
+
bson (~> 1.10.0)
|
|
36
37
|
builder (3.1.4)
|
|
37
38
|
coderay (1.1.0)
|
|
38
39
|
coveralls (0.7.0)
|
|
@@ -55,9 +56,10 @@ GEM
|
|
|
55
56
|
method_source (0.8.2)
|
|
56
57
|
mime-types (1.25.1)
|
|
57
58
|
minitest (4.7.5)
|
|
58
|
-
mongo (1.
|
|
59
|
-
bson (~> 1.
|
|
60
|
-
|
|
59
|
+
mongo (1.10.0)
|
|
60
|
+
bson (~> 1.10.0)
|
|
61
|
+
moped (1.5.2)
|
|
62
|
+
multi_json (1.9.2)
|
|
61
63
|
polyglot (0.3.4)
|
|
62
64
|
pry (0.9.12.6)
|
|
63
65
|
coderay (~> 1.0)
|
|
@@ -66,38 +68,38 @@ GEM
|
|
|
66
68
|
rack (1.5.2)
|
|
67
69
|
rack-test (0.6.2)
|
|
68
70
|
rack (>= 1.0)
|
|
69
|
-
rails (4.0.
|
|
70
|
-
actionmailer (= 4.0.
|
|
71
|
-
actionpack (= 4.0.
|
|
72
|
-
activerecord (= 4.0.
|
|
73
|
-
activesupport (= 4.0.
|
|
71
|
+
rails (4.0.4)
|
|
72
|
+
actionmailer (= 4.0.4)
|
|
73
|
+
actionpack (= 4.0.4)
|
|
74
|
+
activerecord (= 4.0.4)
|
|
75
|
+
activesupport (= 4.0.4)
|
|
74
76
|
bundler (>= 1.3.0, < 2.0)
|
|
75
|
-
railties (= 4.0.
|
|
77
|
+
railties (= 4.0.4)
|
|
76
78
|
sprockets-rails (~> 2.0.0)
|
|
77
|
-
railties (4.0.
|
|
78
|
-
actionpack (= 4.0.
|
|
79
|
-
activesupport (= 4.0.
|
|
79
|
+
railties (4.0.4)
|
|
80
|
+
actionpack (= 4.0.4)
|
|
81
|
+
activesupport (= 4.0.4)
|
|
80
82
|
rake (>= 0.8.7)
|
|
81
83
|
thor (>= 0.18.1, < 2.0)
|
|
82
|
-
rake (10.
|
|
84
|
+
rake (10.3.1)
|
|
83
85
|
rest-client (1.6.7)
|
|
84
86
|
mime-types (>= 1.16)
|
|
85
87
|
rspec (2.14.1)
|
|
86
88
|
rspec-core (~> 2.14.0)
|
|
87
89
|
rspec-expectations (~> 2.14.0)
|
|
88
90
|
rspec-mocks (~> 2.14.0)
|
|
89
|
-
rspec-core (2.14.
|
|
91
|
+
rspec-core (2.14.8)
|
|
90
92
|
rspec-expectations (2.14.5)
|
|
91
93
|
diff-lcs (>= 1.1.3, < 2.0)
|
|
92
|
-
rspec-mocks (2.14.
|
|
93
|
-
ruby-progressbar (1.4.
|
|
94
|
+
rspec-mocks (2.14.6)
|
|
95
|
+
ruby-progressbar (1.4.2)
|
|
94
96
|
simplecov (0.8.2)
|
|
95
97
|
docile (~> 1.1.0)
|
|
96
98
|
multi_json
|
|
97
99
|
simplecov-html (~> 0.8.0)
|
|
98
100
|
simplecov-html (0.8.0)
|
|
99
|
-
slop (3.
|
|
100
|
-
sprockets (2.
|
|
101
|
+
slop (3.5.0)
|
|
102
|
+
sprockets (2.12.1)
|
|
101
103
|
hike (~> 1.2)
|
|
102
104
|
multi_json (~> 1.0)
|
|
103
105
|
rack (~> 1.0)
|
|
@@ -108,25 +110,26 @@ GEM
|
|
|
108
110
|
sprockets (~> 2.8)
|
|
109
111
|
term-ansicolor (1.3.0)
|
|
110
112
|
tins (~> 1.0)
|
|
111
|
-
thor (0.
|
|
112
|
-
thread_safe (0.
|
|
113
|
-
atomic
|
|
113
|
+
thor (0.19.1)
|
|
114
|
+
thread_safe (0.3.3)
|
|
114
115
|
tilt (1.4.1)
|
|
115
|
-
tins (1.
|
|
116
|
+
tins (1.1.0)
|
|
116
117
|
treetop (1.4.15)
|
|
117
118
|
polyglot
|
|
118
119
|
polyglot (>= 0.3.1)
|
|
119
|
-
tzinfo (0.3.
|
|
120
|
+
tzinfo (0.3.39)
|
|
120
121
|
|
|
121
122
|
PLATFORMS
|
|
122
123
|
ruby
|
|
123
124
|
|
|
124
125
|
DEPENDENCIES
|
|
125
126
|
activesupport
|
|
127
|
+
bson_ext
|
|
126
128
|
coveralls
|
|
127
129
|
fuubar
|
|
128
130
|
mongo
|
|
129
131
|
mongo-lock!
|
|
132
|
+
moped
|
|
130
133
|
pry
|
|
131
|
-
rails
|
|
134
|
+
rails (~> 4.0.0)
|
|
132
135
|
rspec
|
data/README.md
CHANGED
|
@@ -55,7 +55,10 @@ A lock has an owner. Mongo::Lock defaults to using an owner id of HOSTNAME:PID:T
|
|
|
55
55
|
## Configuration
|
|
56
56
|
|
|
57
57
|
Mongo::Lock makes no effort to help configure the MongoDB connection - that's
|
|
58
|
-
what the Mongo
|
|
58
|
+
what the Mongo driver is for, you can use either Moped or the Mongo Ruby Driver.
|
|
59
|
+
If you are using Mongoid you want to be using the Moped driver. Mongo::Lock will
|
|
60
|
+
automatically choose the right driver for the collection you provide and raise an
|
|
61
|
+
error if you try and mix them.
|
|
59
62
|
|
|
60
63
|
```ruby
|
|
61
64
|
Mongo::Lock.configure collection: Mongo::Connection.new("localhost").db("somedb").collection("locks")
|
|
@@ -119,7 +122,7 @@ If a lock cannot be acquired, released or extended it will return false, you can
|
|
|
119
122
|
|
|
120
123
|
```ruby
|
|
121
124
|
Mongo::Lock.configure do |config|
|
|
122
|
-
config.
|
|
125
|
+
config.should_raise = true # Whether to raise an error when acquire, release or extend fail.
|
|
123
126
|
end
|
|
124
127
|
```
|
|
125
128
|
|
|
@@ -293,7 +296,7 @@ unless lock.extend_by 10
|
|
|
293
296
|
end
|
|
294
297
|
```
|
|
295
298
|
|
|
296
|
-
If the
|
|
299
|
+
If the should\_raise error option is set to true or you append ! to the end of the method name and you call any of the acquire, release, extend_by or extend methods they will raise a Mongo::Lock::NotAcquiredError, Mongo::Lock::NotReleasedError or Mongo::Lock::NotExtendedError instead of returning false.
|
|
297
300
|
|
|
298
301
|
```ruby
|
|
299
302
|
begin
|
|
@@ -305,7 +308,7 @@ end
|
|
|
305
308
|
# Or
|
|
306
309
|
|
|
307
310
|
begin
|
|
308
|
-
Mongo::Lock.acquire 'my_key',
|
|
311
|
+
Mongo::Lock.acquire 'my_key', should\_raise: true
|
|
309
312
|
rescue Mongo::Lock::LockNotAcquiredError => e
|
|
310
313
|
# Maybe try again tomorrow
|
|
311
314
|
end
|
data/lib/mongo-lock.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'mongo-lock/configuration'
|
|
2
|
-
require 'mongo-lock/
|
|
2
|
+
require 'mongo-lock/drivers/base'
|
|
3
3
|
require 'mongo-lock/class_convenience_methods'
|
|
4
|
+
require 'mongo-lock/send_with_raise_methods'
|
|
4
5
|
|
|
5
6
|
# If we are using Rails then we will include the Mongo::Lock railtie.
|
|
6
7
|
if defined?(Rails)
|
|
@@ -11,17 +12,19 @@ module Mongo
|
|
|
11
12
|
class Lock
|
|
12
13
|
|
|
13
14
|
extend Mongo::Lock::ClassConvenienceMethods
|
|
15
|
+
include Mongo::Lock::SendWithRaiseMethods
|
|
14
16
|
|
|
15
17
|
class NotAcquiredError < StandardError ; end
|
|
16
18
|
class NotReleasedError < StandardError ; end
|
|
17
19
|
class NotExtendedError < StandardError ; end
|
|
20
|
+
class InvalidCollectionError < StandardError ; end
|
|
21
|
+
class MixedCollectionsError < StandardError ; end
|
|
18
22
|
|
|
19
23
|
attr_accessor :configuration
|
|
20
24
|
attr_accessor :key
|
|
21
25
|
attr_accessor :acquired
|
|
22
26
|
attr_accessor :expires_at
|
|
23
27
|
attr_accessor :released
|
|
24
|
-
attr_accessor :query
|
|
25
28
|
|
|
26
29
|
def self.configure options = {}, &block
|
|
27
30
|
defaults = {
|
|
@@ -29,7 +32,8 @@ module Mongo
|
|
|
29
32
|
limit: 100,
|
|
30
33
|
frequency: 1,
|
|
31
34
|
expire_in: 10,
|
|
32
|
-
|
|
35
|
+
should_raise: false,
|
|
36
|
+
driver: options[:driver] || (require('mongo-lock/drivers/mongo') && ::Mongo::Lock::Drivers::Mongo),
|
|
33
37
|
owner: Proc.new { "#{`hostname`.strip}:#{Process.pid}:#{Thread.object_id}" }
|
|
34
38
|
}
|
|
35
39
|
defaults = defaults.merge(@@default_configuration) if defined?(@@default_configuration) && @@default_configuration
|
|
@@ -46,7 +50,7 @@ module Mongo
|
|
|
46
50
|
|
|
47
51
|
def self.ensure_indexes
|
|
48
52
|
configuration.collections.each_pair do |key, collection|
|
|
49
|
-
|
|
53
|
+
configuration.driver.ensure_indexes collection
|
|
50
54
|
end
|
|
51
55
|
end
|
|
52
56
|
|
|
@@ -54,7 +58,7 @@ module Mongo
|
|
|
54
58
|
options = configuration.process_collection_options options
|
|
55
59
|
|
|
56
60
|
options[:collections].each do |collection|
|
|
57
|
-
|
|
61
|
+
configuration.driver.clear_expired collection
|
|
58
62
|
end
|
|
59
63
|
end
|
|
60
64
|
|
|
@@ -62,14 +66,13 @@ module Mongo
|
|
|
62
66
|
options = configuration.process_collection_options options
|
|
63
67
|
|
|
64
68
|
options[:collections].each do |collection|
|
|
65
|
-
|
|
69
|
+
configuration.driver.release_collection collection, options[:owner]
|
|
66
70
|
end
|
|
67
71
|
end
|
|
68
72
|
|
|
69
73
|
def initialize key, options = {}
|
|
70
74
|
self.configuration = Configuration.new self.class.configuration.to_hash, options
|
|
71
75
|
self.key = retrieve_lock_key key
|
|
72
|
-
self.query = Mongo::Lock::MongoQueries.new self
|
|
73
76
|
acquire_if_acquired
|
|
74
77
|
end
|
|
75
78
|
|
|
@@ -97,6 +100,7 @@ module Mongo
|
|
|
97
100
|
end
|
|
98
101
|
|
|
99
102
|
def try_acquire options, i, time_spent, &block
|
|
103
|
+
|
|
100
104
|
# If timeout has expired
|
|
101
105
|
if options[:timeout_in] && options[:timeout_in] < time_spent
|
|
102
106
|
return raise_or_false options
|
|
@@ -106,7 +110,7 @@ module Mongo
|
|
|
106
110
|
return raise_or_false options
|
|
107
111
|
|
|
108
112
|
# If there is an existing lock
|
|
109
|
-
elsif existing_lock =
|
|
113
|
+
elsif existing_lock = driver.find_or_insert(options)
|
|
110
114
|
# If the lock is owned by me
|
|
111
115
|
if existing_lock['owner'] == options[:owner]
|
|
112
116
|
self.acquired = true
|
|
@@ -144,7 +148,7 @@ module Mongo
|
|
|
144
148
|
|
|
145
149
|
# We must have acquired the lock to release it
|
|
146
150
|
elsif !acquired?
|
|
147
|
-
if acquire options.merge(
|
|
151
|
+
if acquire options.merge(should_raise: false)
|
|
148
152
|
return release options
|
|
149
153
|
else
|
|
150
154
|
return raise_or_false options, NotReleasedError
|
|
@@ -153,7 +157,7 @@ module Mongo
|
|
|
153
157
|
else
|
|
154
158
|
self.released = true
|
|
155
159
|
self.acquired = false
|
|
156
|
-
|
|
160
|
+
driver.remove options
|
|
157
161
|
return true
|
|
158
162
|
end
|
|
159
163
|
end
|
|
@@ -166,7 +170,7 @@ module Mongo
|
|
|
166
170
|
return raise_or_false options, NotExtendedError
|
|
167
171
|
|
|
168
172
|
else
|
|
169
|
-
|
|
173
|
+
driver.find_and_update time, options
|
|
170
174
|
true
|
|
171
175
|
end
|
|
172
176
|
end
|
|
@@ -178,28 +182,10 @@ module Mongo
|
|
|
178
182
|
|
|
179
183
|
def available? options = {}
|
|
180
184
|
options = inherit_options options
|
|
181
|
-
existing_lock =
|
|
185
|
+
existing_lock = driver.find_existing
|
|
182
186
|
!existing_lock || existing_lock['owner'] == options[:owner]
|
|
183
187
|
end
|
|
184
188
|
|
|
185
|
-
# Raise methods
|
|
186
|
-
|
|
187
|
-
def acquire! options = {}
|
|
188
|
-
send_with_raise :acquire, options
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
def release! options = {}
|
|
192
|
-
send_with_raise :release, options
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
def extend_by! time, options = {}
|
|
196
|
-
send_with_raise :extend_by, time, options
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
def extend! options = {}
|
|
200
|
-
send_with_raise :extend, options
|
|
201
|
-
end
|
|
202
|
-
|
|
203
189
|
# Current state
|
|
204
190
|
|
|
205
191
|
def acquired?
|
|
@@ -216,6 +202,10 @@ module Mongo
|
|
|
216
202
|
|
|
217
203
|
# Utils
|
|
218
204
|
|
|
205
|
+
def driver
|
|
206
|
+
@driver ||= configuration.driver.new self
|
|
207
|
+
end
|
|
208
|
+
|
|
219
209
|
def retrieve_lock_key key
|
|
220
210
|
case
|
|
221
211
|
when key.respond_to?(:lock_key) then key.lock_key
|
|
@@ -225,16 +215,11 @@ module Mongo
|
|
|
225
215
|
end
|
|
226
216
|
|
|
227
217
|
def acquire_if_acquired
|
|
228
|
-
self.acquired = true if
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
def send_with_raise method, *args
|
|
232
|
-
args.last[:raise] = true
|
|
233
|
-
self.send(method, *args)
|
|
218
|
+
self.acquired = true if driver.is_acquired?
|
|
234
219
|
end
|
|
235
220
|
|
|
236
221
|
def raise_or_false options, error = NotAcquiredError
|
|
237
|
-
raise error if options[:
|
|
222
|
+
raise error if options[:should_raise]
|
|
238
223
|
false
|
|
239
224
|
end
|
|
240
225
|
|
|
@@ -8,7 +8,8 @@ module Mongo
|
|
|
8
8
|
attr_accessor :frequency
|
|
9
9
|
attr_accessor :expire_in
|
|
10
10
|
attr_accessor :owner
|
|
11
|
-
attr_accessor :
|
|
11
|
+
attr_accessor :should_raise
|
|
12
|
+
attr_accessor :driver
|
|
12
13
|
|
|
13
14
|
def initialize defaults, options, &block
|
|
14
15
|
options = defaults.merge(options)
|
|
@@ -23,7 +24,7 @@ module Mongo
|
|
|
23
24
|
end
|
|
24
25
|
|
|
25
26
|
def collection= collection
|
|
26
|
-
collections[:default] = collection
|
|
27
|
+
collections[:default] = choose_driver collection
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
def collection collection = :default
|
|
@@ -36,7 +37,7 @@ module Mongo
|
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
def collections= collections
|
|
39
|
-
@collections = collections
|
|
40
|
+
@collections = choose_driver collections
|
|
40
41
|
end
|
|
41
42
|
|
|
42
43
|
def set_collections_keep_default collections
|
|
@@ -48,6 +49,38 @@ module Mongo
|
|
|
48
49
|
@collections ||= {}
|
|
49
50
|
end
|
|
50
51
|
|
|
52
|
+
def choose_driver provided_collections
|
|
53
|
+
collections = provided_collections.clone
|
|
54
|
+
collections = collections.values if collections.is_a? Hash
|
|
55
|
+
|
|
56
|
+
if collections.is_a? Array
|
|
57
|
+
collection = collections.first
|
|
58
|
+
collection_class = collections.map{ |x| x.class }.uniq
|
|
59
|
+
raise MixedCollectionsError.new "Collections must be of the same class" if collection_class.size > 1
|
|
60
|
+
else
|
|
61
|
+
collection = collections
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
if collection.is_a? Moped::Collection
|
|
65
|
+
require 'mongo-lock/drivers/moped'
|
|
66
|
+
self.driver = Mongo::Lock::Drivers::Moped
|
|
67
|
+
elsif collection.is_a?(Mongo::Collection) or collection.nil? or collection.is_a?(String) or collection.is_a?(Symbol)
|
|
68
|
+
require 'mongo-lock/drivers/mongo'
|
|
69
|
+
self.driver = Mongo::Lock::Drivers::Mongo
|
|
70
|
+
else
|
|
71
|
+
raise InvalidCollectionError.new "#{collection.class.name} is not a valid collection class"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
provided_collections
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def driver= driver
|
|
78
|
+
if driver.is_a? String
|
|
79
|
+
driver = "::Mongo::Lock::Drivers::#{driver.camelize}".constantize
|
|
80
|
+
end
|
|
81
|
+
@driver = driver
|
|
82
|
+
end
|
|
83
|
+
|
|
51
84
|
def to_hash
|
|
52
85
|
{
|
|
53
86
|
collections: collections,
|
|
@@ -56,7 +89,8 @@ module Mongo
|
|
|
56
89
|
frequency: frequency,
|
|
57
90
|
expire_in: expire_in,
|
|
58
91
|
owner: owner,
|
|
59
|
-
|
|
92
|
+
driver: driver,
|
|
93
|
+
should_raise: should_raise
|
|
60
94
|
}
|
|
61
95
|
end
|
|
62
96
|
|