mongoid-locker 0.3.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: cf3cf7653f3a1d1719beb2b0a4e355f08ca0c377
4
- data.tar.gz: ac2d977fd88b44794f8222b4897b8550de9881db
2
+ SHA256:
3
+ metadata.gz: 46e4667e791c955ae115a24070ff3b1383c8d272f7263cb9f0199b9b9c82ab46
4
+ data.tar.gz: ba19a3dc36bdf0522c2cc7d9dca31a8e89f0ac01c3d3073f476a64605db26cc2
5
5
  SHA512:
6
- metadata.gz: 476b1ff144e25f07ce7f8cd1829b42ff8ab2ad0cb3f2c66fef259a3c2a19b00cfc9cdc11aa5f7988ac3d39ae36b7e29d223ad70bf263e3705114965cd6179baa
7
- data.tar.gz: 9849fccf0948617c075368cd7d6514eb91ca9ef677328859381ae606ff1f7b455251ec04f5bbc604e421405aaa1ba14fbcda1c83549f2bcdd977a6d23fb08b05
6
+ metadata.gz: be8ec0af58ec384c7c1e374fd5ca5bbe133b95fb2be445628f6026a64665a866ebaf4396423f775fc8de51101c6cf920f61669859d32433d7bae2f9353e45a71
7
+ data.tar.gz: 2148730176e46068be6b9bca45ef9b6f4d83107561e0b60ad8ada1254d40ada77ac69ea64cc792b21f565cde1b4ff338a4d740d11bf90866c9136d4cc831e715
@@ -1,58 +1,78 @@
1
- # This configuration was generated by `rubocop --auto-gen-config`
2
- # on 2015-10-21 11:03:44 -0400 using RuboCop version 0.29.1.
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2018-09-01 16:46:40 +0300 using RuboCop version 0.58.2.
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: 1
9
+ # Offense count: 6
10
+ # Configuration parameters: Include.
11
+ # Include: **/*.gemfile, **/Gemfile, **/gems.rb
12
+ Bundler/DuplicatedGem:
13
+ Exclude:
14
+ - 'Gemfile'
15
+
16
+ # Offense count: 2
9
17
  Metrics/AbcSize:
10
- Max: 18
18
+ Max: 20
11
19
 
12
- # Offense count: 37
13
- # Configuration parameters: AllowURI, URISchemes.
14
- Metrics/LineLength:
15
- Max: 184
20
+ # Offense count: 5
21
+ # Configuration parameters: CountComments, ExcludedMethods.
22
+ # ExcludedMethods: refine
23
+ Metrics/BlockLength:
24
+ Max: 493
16
25
 
17
- # Offense count: 3
26
+ # Offense count: 2
18
27
  # Configuration parameters: CountComments.
19
28
  Metrics/MethodLength:
20
29
  Max: 25
21
30
 
22
- # Offense count: 6
23
- # Cop supports --auto-correct.
24
- Style/Blocks:
25
- Enabled: false
31
+ # Offense count: 1
32
+ # Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist, MethodDefinitionMacros.
33
+ # NamePrefix: is_, has_, have_
34
+ # NamePrefixBlacklist: is_, has_, have_
35
+ # NameWhitelist: is_a?
36
+ # MethodDefinitionMacros: define_method, define_singleton_method
37
+ Naming/PredicateName:
38
+ Exclude:
39
+ - 'spec/**/*'
40
+ - 'lib/mongoid/locker.rb'
26
41
 
27
- # Offense count: 3
42
+ # Offense count: 2
28
43
  Style/Documentation:
29
- Enabled: false
44
+ Exclude:
45
+ - 'spec/**/*'
46
+ - 'test/**/*'
47
+ - 'lib/mongoid/locker.rb'
30
48
 
31
49
  # Offense count: 2
32
50
  Style/DoubleNegation:
33
- Enabled: false
34
-
35
- # Offense count: 2
36
- # Configuration parameters: Exclude.
37
- Style/FileName:
38
- Enabled: false
51
+ Exclude:
52
+ - 'lib/mongoid/locker.rb'
39
53
 
40
54
  # Offense count: 1
41
- # Configuration parameters: NamePrefix, NamePrefixBlacklist.
42
- Style/PredicateName:
43
- Enabled: false
55
+ # Configuration parameters: MinBodyLength.
56
+ Style/GuardClause:
57
+ Exclude:
58
+ - 'lib/mongoid/locker.rb'
44
59
 
45
60
  # Offense count: 1
46
- # Configuration parameters: SupportedStyles.
61
+ # Cop supports --auto-correct.
62
+ # Configuration parameters: .
63
+ # SupportedStyles: compact, exploded
47
64
  Style/RaiseArgs:
48
65
  EnforcedStyle: compact
49
66
 
50
- # Offense count: 2
51
- Style/RegexpLiteral:
52
- MaxSlashes: 0
53
-
54
67
  # Offense count: 1
55
68
  # Cop supports --auto-correct.
56
- # Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, Whitelist.
57
- Style/TrivialAccessors:
58
- Enabled: false
69
+ # Configuration parameters: MinSize.
70
+ # SupportedStyles: percent, brackets
71
+ Style/SymbolArray:
72
+ EnforcedStyle: brackets
73
+
74
+ # Offense count: 63
75
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
76
+ # URISchemes: http, https
77
+ Metrics/LineLength:
78
+ Max: 184
@@ -1,10 +1,15 @@
1
1
  ## Changelog
2
2
 
3
- ### 0.3.6 (4/18/2018)
3
+ ### 1.0.0 (2018-09-02)
4
+
5
+ * [#57](https://github.com/mongoid/mongoid-locker/pull/57): `Time.now` replaced by `Time.now.utc` - [@dks17](https://github.com/dks17).
6
+ * [#55](https://github.com/mongoid/mongoid-locker/pull/55): Customizable :locked_at and :locked_until fields - [@dks17](https://github.com/dks17).
7
+
8
+ ### 0.3.6 (2018-04-18)
4
9
 
5
10
  * [#52](https://github.com/mongoid/mongoid-locker/pull/52): Added support for Mongoid 7 - [@wuhuizuo](https://github.com/wuhuizuo).
6
11
 
7
- ### 0.3.5 (1/24/2017)
12
+ ### 0.3.5 (2017-01-24)
8
13
 
9
14
  * [#43](https://github.com/mongoid/mongoid-locker/pull/43): Added support for Mongoid 6 - [@sivagollapalli](https://github.com/sivagollapalli).
10
15
  * [#38](https://github.com/mongoid/mongoid-locker/issues/38): Fixed unlock already destroyed object - [@sivagollapalli](https://github.com/sivagollapalli).
data/Dangerfile CHANGED
@@ -1 +1 @@
1
- danger.import_dangerfile(gem: "mongoid-danger")
1
+ danger.import_dangerfile(gem: 'mongoid-danger')
data/Gemfile CHANGED
@@ -21,16 +21,15 @@ end
21
21
  gemspec
22
22
 
23
23
  group :development do
24
- gem 'bundler', '~> 1.1'
25
24
  gem 'guard-rspec'
26
25
  gem 'rb-fsevent', '~> 0.9.1'
27
26
  end
28
27
 
29
28
  group :development, :test do
30
29
  gem 'mongoid-compatibility'
30
+ gem 'mongoid-danger', '~> 0.1.1'
31
31
  gem 'rack', '~> 1.5'
32
- gem 'rspec', '~> 3.0'
33
32
  gem 'rake', '11.3.0'
34
- gem 'rubocop', '0.29.1'
35
- gem 'mongoid-danger', '~> 0.1.1'
33
+ gem 'rspec', '~> 3.0'
34
+ gem 'rubocop'
36
35
  end
data/Guardfile CHANGED
@@ -1,10 +1,17 @@
1
1
  # More info at https://github.com/guard/guard#readme
2
2
 
3
- guard 'rspec' do
4
- watch(%r{^spec/.+_spec\.rb$})
3
+ guard :rspec, cmd: 'bundle exec rspec', all_on_start: true do
4
+ require 'guard/rspec/dsl'
5
+ dsl = Guard::RSpec::Dsl.new(self)
5
6
 
6
- watch('Gemfile') { 'spec' }
7
- watch('Gemfile.lock') { 'spec' }
8
- watch(%r{^lib/(.+)\.rb$}) { 'spec' }
9
- watch('spec/spec_helper.rb') { 'spec' }
7
+ # RSpec files
8
+ rspec = dsl.rspec
9
+ watch(rspec.spec_helper) { rspec.spec_dir }
10
+ watch(rspec.spec_support) { rspec.spec_dir }
11
+ watch(rspec.spec_files) { rspec.spec_dir }
12
+
13
+ watch('Gemfile.lock') { rspec.spec_dir }
14
+
15
+ ruby = dsl.ruby
16
+ watch(ruby.lib_files) { rspec.spec_dir }
10
17
  end
data/README.md CHANGED
@@ -3,10 +3,10 @@
3
3
  [![Build Status](https://secure.travis-ci.org/mongoid/mongoid-locker.svg?branch=master)](http://travis-ci.org/mongoid/mongoid-locker)
4
4
  [![Code Climate](https://codeclimate.com/github/mongoid/mongoid-locker.svg)](https://codeclimate.com/github/mongoid/mongoid-locker)
5
5
 
6
- Document-level locking for MongoDB via Mongoid. The need arose at [Jux](https://jux.com) from multiple processes on multiple servers trying to act upon the same document and stepping on each other's toes. Mongoid-Locker is an easy way to ensure only one process can perform a certain operation on a document at a time.
6
+ Document-level locking for MongoDB via Mongoid. The need arose at [Jux](https://jux.com) from multiple processes on multiple servers trying to act upon the same document and stepping on each other's toes. Mongoid-Locker is an easy way to ensure only one process can perform a certain operation on a document at a time.
7
7
 
8
8
  [Tested](http://travis-ci.org/mongoid/mongoid-locker) against:
9
- - MRI: `2.3.6`, `2.4.3`, `2.5.0`
9
+ - MRI: `2.3.6`, `2.4.3`, `2.5.0`
10
10
  - Mongoid: `2`, `3`, `4`, `5`, `6`, `7`
11
11
 
12
12
  See [.travis.yml](.travis.yml) for the latest test matrix.
@@ -19,14 +19,17 @@ Add to your `Gemfile`:
19
19
  gem 'mongoid-locker'
20
20
  ```
21
21
 
22
- and run `bundle install`. In the model you wish to lock, include `Mongoid::Locker` after `Mongoid::Document`. For example:
22
+ and run `bundle install`. In the model you wish to lock, include `Mongoid::Locker` after `Mongoid::Document`. For example:
23
23
 
24
24
  ```ruby
25
25
  class QueueItem
26
26
  include Mongoid::Document
27
27
  include Mongoid::Locker
28
28
 
29
- field :completed_at, :type => Time
29
+ field :locked_at, type: Time
30
+ field :locked_until, type: Time
31
+
32
+ field :completed_at, type: Time
30
33
  end
31
34
  ```
32
35
 
@@ -37,7 +40,7 @@ queue_item.with_lock do
37
40
 
38
41
  # do stuff
39
42
 
40
- queue_item.completed_at = Time.now
43
+ queue_item.completed_at = Time.now.utc
41
44
  queue_item.save!
42
45
  end
43
46
  ```
@@ -57,6 +60,48 @@ Note that these locks are only enforced when using `#with_lock`, not at the data
57
60
 
58
61
  More in-depth method documentation can be found at [rdoc.info](http://rdoc.info/github/mongoid/mongoid-locker/frames).
59
62
 
63
+ ### Customizable :locked_at and :locked_until field names
64
+ By default, Locker uses fields with `:locked_at` and `:locked_until` names which should be defined in a model.
65
+ ```ruby
66
+ class User
67
+ include Mongoid::Document
68
+ include Mongoid::Locker
69
+
70
+ field :locked_at, type: Time
71
+ field :locked_until, type: Time
72
+ end
73
+ ```
74
+
75
+ Use `Mongoid::Locker.configure` to setup field names which used by Locker for all models where it's included.
76
+ ```ruby
77
+ Mongoid::Locker.configure do |config|
78
+ config.locked_at_field = :global_locked_at
79
+ config.locked_until_field = :global_locked_until
80
+ end
81
+
82
+ class User
83
+ include Mongoid::Document
84
+ include Mongoid::Locker
85
+
86
+ field :global_locked_at, type: Time
87
+ field :global_locked_until, type: Time
88
+ end
89
+ ```
90
+
91
+ The `locker` method in your model accepts `:locked_at_field` and `:locked_until_field` options to setup field names which used by Locker for the model. This can be useful when another library uses the same field for different purposes.
92
+ ```ruby
93
+ class User
94
+ include Mongoid::Document
95
+ include Mongoid::Locker
96
+
97
+ field :locker_locked_at, type: Time
98
+ field :locker_locked_until, type: Time
99
+
100
+ locker locked_at_field: :locker_locked_at,
101
+ locked_until_field: :locker_locked_until
102
+ end
103
+ ```
104
+
60
105
  ## Copyright & License
61
106
 
62
107
  Copyright (c) 2012-2018 Aidan Feldman & Contributors
data/Rakefile CHANGED
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  require 'rubygems'
4
2
  require 'bundler/setup'
5
3
  require 'bundler/gem_tasks'
@@ -0,0 +1,18 @@
1
+ ## Upgrading Mongoid Locker
2
+
3
+ ### Upgrading to 1.0.0
4
+ `Mongoid::Locker` no longer defines `locked_at` and `locked_until` fields when included. You must define these fields manually.
5
+
6
+ ```ruby
7
+ class User
8
+ include Mongoid::Document
9
+ include Mongoid::Locker
10
+
11
+ field :locked_at, type: Time
12
+ field :locked_until, type: Time
13
+ end
14
+ ```
15
+
16
+ You can customize the fields used with a `locker` class method or via a global `configure`. See [Customizable :locked_at and :locked_until field names](https://github.com/mongoid/mongoid-locker#customizable-locked_at-and-locked_until-field-names) for more information.
17
+
18
+ See [#55](https://github.com/mongoid/mongoid-locker/pull/55) for more information.
@@ -3,22 +3,26 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'locker', 'wrapper'))
3
3
 
4
4
  module Mongoid
5
5
  module Locker
6
+ # The field names used by default.
7
+ @locked_at_field = :locked_at
8
+ @locked_until_field = :locked_until
9
+
6
10
  # Error thrown if document could not be successfully locked.
7
- class LockError < Exception; end
11
+ class LockError < RuntimeError; end
8
12
 
9
13
  module ClassMethods
10
14
  # A scope to retrieve all locked documents in the collection.
11
15
  #
12
16
  # @return [Mongoid::Criteria]
13
17
  def locked
14
- where :locked_until.gt => Time.now
18
+ where locked_until_field.gt => Time.now.utc
15
19
  end
16
20
 
17
21
  # A scope to retrieve all unlocked documents in the collection.
18
22
  #
19
23
  # @return [Mongoid::Criteria]
20
24
  def unlocked
21
- any_of({ locked_until: nil }, :locked_until.lte => Time.now)
25
+ any_of({ locked_until_field => nil }, locked_until_field.lte => Time.now.utc)
22
26
  end
23
27
 
24
28
  # Set the default lock timeout for this class. Note this only applies to new locks. Defaults to five seconds.
@@ -36,28 +40,68 @@ module Mongoid
36
40
  # default timeout of five seconds
37
41
  @lock_timeout || 5
38
42
  end
43
+
44
+ # Set locked_at_field and locked_until_field names for this class
45
+ def locker(locked_at_field: nil, locked_until_field: nil)
46
+ class_variable_set(:@@locked_at_field, locked_at_field) if locked_at_field
47
+ class_variable_set(:@@locked_until_field, locked_until_field) if locked_until_field
48
+ end
49
+
50
+ # Returns field name used to set locked at time for this class.
51
+ def locked_at_field
52
+ class_variable_get(:@@locked_at_field)
53
+ end
54
+
55
+ # Returns field name used to set locked until time for this class.
56
+ def locked_until_field
57
+ class_variable_get(:@@locked_until_field)
58
+ end
39
59
  end
40
60
 
41
- # @api private
42
- def self.included(mod)
43
- mod.extend ClassMethods
61
+ class << self
62
+ attr_accessor :locked_at_field, :locked_until_field
63
+
64
+ # @api private
65
+ def included(mod)
66
+ mod.extend ClassMethods
44
67
 
45
- mod.field :locked_at, type: Time
46
- mod.field :locked_until, type: Time
68
+ mod.class_variable_set(:@@locked_at_field, locked_at_field)
69
+ mod.class_variable_set(:@@locked_until_field, locked_until_field)
70
+
71
+ mod.send(:define_method, :locked_at_field) { mod.class_variable_get(:@@locked_at_field) }
72
+ mod.send(:define_method, :locked_until_field) { mod.class_variable_get(:@@locked_until_field) }
73
+ end
74
+
75
+ # Sets configuration using a block
76
+ #
77
+ # Mongoid::Locker.configure do |config|
78
+ # config.locked_at_field = :mongoid_locker_locked_at
79
+ # config.locked_until_field = :mongoid_locker_locked_until
80
+ # end
81
+ def configure
82
+ yield(self) if block_given?
83
+ end
84
+
85
+ # Resets to default configuration.
86
+ def reset!
87
+ # The field names used by default.
88
+ @locked_at_field = :locked_at
89
+ @locked_until_field = :locked_until
90
+ end
47
91
  end
48
92
 
49
93
  # Returns whether the document is currently locked or not.
50
94
  #
51
95
  # @return [Boolean] true if locked, false otherwise
52
96
  def locked?
53
- !!(locked_until && locked_until > Time.now)
97
+ !!(self[locked_until_field] && self[locked_until_field] > Time.now.utc)
54
98
  end
55
99
 
56
100
  # Returns whether the current instance has the lock or not.
57
101
  #
58
102
  # @return [Boolean] true if locked, false otherwise
59
103
  def has_lock?
60
- !!(@has_lock && self.locked?)
104
+ !!(@has_lock && locked?)
61
105
  end
62
106
 
63
107
  # Primary method of plugin: execute the provided code once the document has been successfully locked.
@@ -70,7 +114,7 @@ module Mongoid
70
114
  # @option opts [Boolean] :reload After acquiring the lock, reload the document - defaults to true
71
115
  # @return [void]
72
116
  def with_lock(opts = {})
73
- had_lock = self.has_lock?
117
+ had_lock = has_lock?
74
118
 
75
119
  unless had_lock
76
120
  opts[:retries] = 1 if opts[:wait]
@@ -87,7 +131,7 @@ module Mongoid
87
131
  protected
88
132
 
89
133
  def acquire_lock(opts = {})
90
- time = Time.now
134
+ time = Time.now.utc
91
135
  timeout = opts[:timeout] || self.class.lock_timeout
92
136
  expiration = time + timeout
93
137
 
@@ -98,23 +142,21 @@ module Mongoid
98
142
  :_id => id,
99
143
  '$or' => [
100
144
  # not locked
101
- { locked_until: nil },
145
+ { locked_until_field => nil },
102
146
  # expired
103
- { locked_until: { '$lte' => time } }
147
+ { locked_until_field => { '$lte' => time } }
104
148
  ]
105
149
  },
106
-
107
150
  '$set' => {
108
- locked_at: time,
109
- locked_until: expiration
151
+ locked_at_field => time,
152
+ locked_until_field => expiration
110
153
  }
111
-
112
154
  )
113
155
 
114
156
  if locked
115
157
  # document successfully updated, meaning it was locked
116
- self.locked_at = time
117
- self.locked_until = expiration
158
+ self[locked_at_field] = time
159
+ self[locked_until_field] = expiration
118
160
  reload unless opts[:reload] == false
119
161
  @has_lock = true
120
162
  else
@@ -135,16 +177,16 @@ module Mongoid
135
177
 
136
178
  if attempts_left > 0
137
179
  # if not passed a retry_sleep value, we sleep for the remaining life of the lock
138
- unless opts[:retry_sleep]
180
+ unless retry_sleep
139
181
  locked_until = Mongoid::Locker::Wrapper.locked_until(self)
140
182
  # the lock might be released since the last check so make another attempt
141
183
  next unless locked_until
142
- retry_sleep = locked_until - Time.now
184
+ retry_sleep = locked_until - Time.now.utc
143
185
  end
144
186
 
145
187
  sleep retry_sleep if retry_sleep > 0
146
188
  else
147
- fail LockError.new('could not get lock')
189
+ raise LockError.new('could not get lock')
148
190
  end
149
191
  end
150
192
  end
@@ -154,15 +196,13 @@ module Mongoid
154
196
  Mongoid::Locker::Wrapper.update(
155
197
  self.class,
156
198
  { _id: id },
157
-
158
199
  '$set' => {
159
- locked_at: nil,
160
- locked_until: nil
200
+ locked_at_field => nil,
201
+ locked_until_field => nil
161
202
  }
162
-
163
203
  )
164
204
 
165
- self.attributes = { locked_at: nil, locked_until: nil } unless destroyed?
205
+ self.attributes = { locked_at_field => nil, locked_until_field => nil } unless destroyed?
166
206
  @has_lock = false
167
207
  end
168
208
  end
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Locker
3
- VERSION = '0.3.6'
3
+ VERSION = '1.0.0'.freeze
4
4
  end
5
5
  end
@@ -13,5 +13,5 @@ elsif Mongoid::Compatibility::Version.mongoid3?
13
13
  elsif Mongoid::Compatibility::Version.mongoid2?
14
14
  require 'mongoid/locker/wrapper2'
15
15
  else
16
- fail 'incompatible Mongoid version'
16
+ raise 'incompatible Mongoid version'
17
17
  end
@@ -17,9 +17,9 @@ module Mongoid
17
17
  # @param [Class] The model instance
18
18
  # @return [Time] The timestamp of when the document is locked until, nil if not locked.
19
19
  def self.locked_until(doc)
20
- existing_query = { _id: doc.id, locked_until: { '$exists' => true } }
21
- existing = doc.class.collection.find_one(existing_query, fields: { locked_until: 1 })
22
- existing ? existing['locked_until'] : nil
20
+ existing_query = { _id: doc.id, doc.locked_until_field => { '$exists' => true } }
21
+ existing = doc.class.collection.find_one(existing_query, fields: { doc.locked_until_field => 1 })
22
+ existing ? existing[doc.locked_until_field] : nil
23
23
  end
24
24
  end
25
25
  end
@@ -17,9 +17,9 @@ module Mongoid
17
17
  # @param [Class] The model instance
18
18
  # @return [Time] The timestamp of when the document is locked until, nil if not locked.
19
19
  def self.locked_until(doc)
20
- existing_query = { _id: doc.id, locked_until: { '$exists' => true } }
21
- existing = doc.class.where(existing_query).limit(1).only(:locked_until).first
22
- existing ? existing.locked_until : nil
20
+ existing_query = { _id: doc.id, doc.locked_until_field => { '$exists' => true } }
21
+ existing = doc.class.where(existing_query).limit(1).only(doc.locked_until_field).first
22
+ existing ? existing[doc.locked_until_field] : nil
23
23
  end
24
24
  end
25
25
  end
@@ -13,9 +13,9 @@ module Mongoid
13
13
  end
14
14
 
15
15
  def self.locked_until(doc)
16
- existing_query = { _id: doc.id, locked_until: { '$exists' => true } }
17
- existing = doc.class.where(existing_query).limit(1).only(:locked_until).first
18
- existing ? existing.locked_until : nil
16
+ existing_query = { _id: doc.id, doc.locked_until_field => { '$exists' => true } }
17
+ existing = doc.class.where(existing_query).limit(1).only(doc.locked_until_field).first
18
+ existing ? existing[doc.locked_until_field] : nil
19
19
  end
20
20
  end
21
21
  end
@@ -18,9 +18,9 @@ module Mongoid
18
18
  # @param [Class] The model instance
19
19
  # @return [Time] The timestamp of when the document is locked until, nil if not locked.
20
20
  def self.locked_until(doc)
21
- existing_query = { _id: doc.id, locked_until: { '$exists' => true } }
22
- existing = doc.class.where(existing_query).limit(1).only(:locked_until).first
23
- existing ? existing.locked_until : nil
21
+ existing_query = { _id: doc.id, doc.locked_until_field => { '$exists' => true } }
22
+ existing = doc.class.where(existing_query).limit(1).only(doc.locked_until_field).first
23
+ existing ? existing[doc.locked_until_field] : nil
24
24
  end
25
25
  end
26
26
  end
@@ -20,9 +20,9 @@ module Mongoid
20
20
  # @param [Class] The model instance
21
21
  # @return [Time] The timestamp of when the document is locked until, nil if not locked.
22
22
  def self.locked_until(doc)
23
- existing_query = { _id: doc.id, locked_until: { '$exists' => true } }
24
- existing = doc.class.where(existing_query).limit(1).only(:locked_until).first
25
- existing ? existing.locked_until : nil
23
+ existing_query = { _id: doc.id, doc.locked_until_field => { '$exists' => true } }
24
+ existing = doc.class.where(existing_query).limit(1).only(doc.locked_until_field).first
25
+ existing ? existing[doc.locked_until_field] : nil
26
26
  end
27
27
  end
28
28
  end
@@ -1,5 +1,4 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'mongoid/locker/version'
5
4
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-locker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aidan Feldman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-18 00:00:00.000000000 Z
11
+ date: 2018-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
@@ -61,6 +61,7 @@ files:
61
61
  - README.md
62
62
  - RELEASING.md
63
63
  - Rakefile
64
+ - UPGRADING.md
64
65
  - demo/README.md
65
66
  - demo/config/mongoid.yml
66
67
  - demo/instagram.graffle
@@ -98,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
99
  version: '0'
99
100
  requirements: []
100
101
  rubyforge_project:
101
- rubygems_version: 2.6.12
102
+ rubygems_version: 2.7.6
102
103
  signing_key:
103
104
  specification_version: 4
104
105
  summary: Document-level locking for MongoDB via Mongoid.