mongoid-locking 0.1.1 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8d0e6fc6d5ee935327d525147b776e047a02c7a6e5d3333511c7970b9f3134e4
4
- data.tar.gz: 82e6e6b8a51e311e8ce893ea90d33b0d484aef129dc8f119b0e3999fcc78e6d4
3
+ metadata.gz: 1be989a2d87d54412d3eafa95e4aeedb1bf9d0d97d5db712c5fdc190bc4f45ec
4
+ data.tar.gz: 8fea7cc8a65b2b331f7e692025e3cc0690a686024efb2d5e89528dc8205951cb
5
5
  SHA512:
6
- metadata.gz: 98a30ae0a41505c9aefe8f9cf5d66e6412952e170c8c82fdfa158a785f5f523784fbdb1b288337430d6215eab72648a02b0789ba4d21b4f70d033b0c6928aa47
7
- data.tar.gz: 7ce149336c4e7bff291ab3664af449e5d582e51124abda696e44e578d75745548c74c14361a52765bc8b99f9fd2283e49c2a90f2543772ab3378f92db9cb5255
6
+ metadata.gz: cac9e7692341645f57ab69863a724fac9773754f7f323bdf0e9c17cf311475a361d45c7495d1fc7db8e6784f71958b157d5f53edabde1dda6c1f569827955d40
7
+ data.tar.gz: ead4b76df6e9a5b8341bc8f842519f9545cea89ec6ffb00f25d4217881c16a757f85dfacc41f3fb1f571f501d831e7f959bef1c407d0a6be0312c7e74d6ee5c9
data/.tool-versions CHANGED
@@ -1 +1 @@
1
- ruby 2.6.7
1
+ ruby 3.1.4
data/Gemfile CHANGED
@@ -5,4 +5,4 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in mongoid-locking.gemspec
6
6
  gemspec
7
7
 
8
- gem "mongoid", "~> 6.0"
8
+ gem "mongoid", "~> 7.2.0"
data/Gemfile.lock CHANGED
@@ -1,33 +1,35 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mongoid-locking (0.1.1)
5
- mongoid (> 6.0)
4
+ mongoid-locking (1.0.0)
5
+ mongoid (~> 7.2.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (5.2.8.1)
11
- activesupport (= 5.2.8.1)
12
- activesupport (5.2.8.1)
10
+ activemodel (6.1.7.6)
11
+ activesupport (= 6.1.7.6)
12
+ activesupport (6.1.7.6)
13
13
  concurrent-ruby (~> 1.0, >= 1.0.2)
14
- i18n (>= 0.7, < 2)
15
- minitest (~> 5.1)
16
- tzinfo (~> 1.1)
14
+ i18n (>= 1.6, < 2)
15
+ minitest (>= 5.1)
16
+ tzinfo (~> 2.0)
17
+ zeitwerk (~> 2.3)
17
18
  ast (2.4.2)
18
19
  bson (4.15.0)
19
20
  byebug (11.1.3)
20
- concurrent-ruby (1.1.10)
21
+ concurrent-ruby (1.2.2)
21
22
  diff-lcs (1.5.0)
22
- i18n (1.12.0)
23
+ i18n (1.14.1)
23
24
  concurrent-ruby (~> 1.0)
24
25
  json (2.6.2)
25
- minitest (5.16.3)
26
- mongo (2.18.1)
26
+ minitest (5.20.0)
27
+ mongo (2.19.2)
27
28
  bson (>= 4.14.1, < 5.0.0)
28
- mongoid (6.4.8)
29
- activemodel (>= 5.1, < 6.0.0)
30
- mongo (>= 2.5.1, < 3.0.0)
29
+ mongoid (7.2.6)
30
+ activemodel (>= 5.1, < 6.2)
31
+ mongo (>= 2.10.5, < 3.0.0)
32
+ ruby2_keywords (~> 0.0.5)
31
33
  parallel (1.22.1)
32
34
  parser (3.1.2.1)
33
35
  ast (~> 2.4.1)
@@ -63,17 +65,19 @@ GEM
63
65
  rubocop-rspec (2.12.1)
64
66
  rubocop (~> 1.31)
65
67
  ruby-progressbar (1.11.0)
66
- thread_safe (0.3.6)
67
- tzinfo (1.2.10)
68
- thread_safe (~> 0.1)
68
+ ruby2_keywords (0.0.5)
69
+ tzinfo (2.0.6)
70
+ concurrent-ruby (~> 1.0)
69
71
  unicode-display_width (2.2.0)
72
+ zeitwerk (2.6.12)
70
73
 
71
74
  PLATFORMS
72
75
  arm64-darwin-21
76
+ arm64-darwin-22
73
77
 
74
78
  DEPENDENCIES
75
79
  byebug
76
- mongoid (~> 6.0)
80
+ mongoid (~> 7.2.0)
77
81
  mongoid-locking!
78
82
  rake (~> 13.0)
79
83
  rspec
data/README.md CHANGED
@@ -55,3 +55,10 @@ The gem is available as open source under the terms of the [MIT License](https:/
55
55
  ## Code of Conduct
56
56
 
57
57
  Everyone interacting in the Mongoid::Locking project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/fullhealthmedical/fhweb/mongoid-locking/blob/master/CODE_OF_CONDUCT.md).
58
+
59
+ ## Version Compability
60
+
61
+ | Gem version | Mongoid version | Ruby version |
62
+ | -------- | ------- | ------- |
63
+ | 0.1.2 | >= 6.0, < 7.2 | => 2.6 |
64
+ | 1.0.0 | ~> 7.2 | => 3.0 |
@@ -3,4 +3,4 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in mongoid-locking.gemspec
4
4
  gemspec path: ".."
5
5
 
6
- gem "mongoid", "~> 7.0"
6
+ gem "mongoid", "~> 7.2"
@@ -41,6 +41,7 @@ module Mongoid
41
41
  doc = embedded? ? _root : self
42
42
 
43
43
  doc.lock_version = (doc.lock_version || 0) + 1
44
+ doc.remove_change('lock_version')
44
45
  end
45
46
 
46
47
  def _locking?
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Locking
4
+ # This module handles reloading behaviour of documents.
5
+ #
6
+ # @since 4.0.0
7
+ module Reloadable
8
+
9
+ # Reloads the +Document+ attributes from the database. If the document has
10
+ # not been saved then an error will get raised if the configuration option
11
+ # was set. This can reload root documents or embedded documents.
12
+ #
13
+ # @example Reload the document.
14
+ # person.reload
15
+ #
16
+ # @raise [ Errors::DocumentNotFound ] If the document was deleted.
17
+ #
18
+ # @return [ Document ] The document, reloaded.
19
+
20
+ private
21
+
22
+ # Reload the root document.
23
+ #
24
+ # @example Reload the document.
25
+ # document.reload_root_document
26
+ #
27
+ # @return [ Hash ] The reloaded attributes.
28
+ #
29
+ # @since 2.3.2
30
+ # Starting from Mongoid version 7.2, the reload method now utilizes the
31
+ # `atomic_selector` to locate the current document.
32
+ #
33
+ # As the lock_version can be disregarded during a reload, this method
34
+ # has been overridden to bypass the lock version.
35
+ def reload_root_document
36
+ {}.merge(collection.find(atomic_selector(skip_lock_version: true)).read(mode: :primary).first || {})
37
+ end
38
+ end
39
+ end
40
+ end
@@ -5,13 +5,25 @@ module Mongoid
5
5
  # its result.
6
6
  #
7
7
  # It is required when saving the same object multiple times in a row.
8
- def atomic_selector
9
- embedded? ? embedded_atomic_selector : root_atomic_selector
8
+ def atomic_selector(skip_lock_version: false)
9
+ embedded? ? embedded_atomic_selector : root_atomic_selector(skip_lock_version: skip_lock_version)
10
10
  end
11
11
 
12
- # https://github.com/mongodb/mongoid/blob/e03120a56894bc773dcf1e51209eb2f3e6f2b61f/lib/mongoid/selectable.rb#L55
13
- def root_atomic_selector
14
- { "_id" => id, "lock_version" => lock_version }
12
+ # Get the atomic selector for a root document.
13
+ #
14
+ # @api private
15
+ #
16
+ # @example Get the root atomic selector.
17
+ # document.root_atomic_selector
18
+ #
19
+ # @return [ Hash ] The root document selector.
20
+ #
21
+ # @since 4.0.0
22
+ # https://github.com/mongodb/mongoid/blob/7.2-stable/lib/mongoid/selectable.rb#L57
23
+ def root_atomic_selector(skip_lock_version: false)
24
+ return { "_id" => id, "lock_version" => lock_version }.merge!(shard_key_selector) unless skip_lock_version
25
+
26
+ { "_id" => id }.merge!(shard_key_selector)
15
27
  end
16
28
  end
17
29
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Mongoid
4
4
  module Locking
5
- VERSION = "0.1.1"
5
+ VERSION = "1.0.0"
6
6
  end
7
7
  end
@@ -4,6 +4,7 @@ require_relative "stale_object_error"
4
4
  require_relative "locking/contextual/atomic"
5
5
  require_relative "locking/contextual/mongo"
6
6
  require_relative "locking/selectable"
7
+ require_relative "locking/reloadable"
7
8
  require_relative "locking/persistable/creatable"
8
9
  require_relative "locking/persistable/updatable"
9
10
  require_relative "locking/persistable"
@@ -19,6 +20,7 @@ module Mongoid
19
20
  base.before_create { self.lock_version = 0 }
20
21
 
21
22
  base.include Mongoid::Locking::Selectable
23
+ base.include Mongoid::Locking::Reloadable
22
24
  # base.include Mongoid::Locking::Reloadable if Mongoid::VERSION >= "7"
23
25
  end
24
26
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-locking
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo RA
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-05 00:00:00.000000000 Z
11
+ date: 2023-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">"
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '6.0'
19
+ version: 7.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">"
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '6.0'
26
+ version: 7.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -111,7 +111,6 @@ files:
111
111
  - LICENSE.txt
112
112
  - README.md
113
113
  - Rakefile
114
- - gemfiles/mongoid6.gemfile
115
114
  - gemfiles/mongoid7.gemfile
116
115
  - lib/mongoid/locking.rb
117
116
  - lib/mongoid/locking/contextual/atomic.rb
@@ -119,6 +118,7 @@ files:
119
118
  - lib/mongoid/locking/persistable.rb
120
119
  - lib/mongoid/locking/persistable/creatable.rb
121
120
  - lib/mongoid/locking/persistable/updatable.rb
121
+ - lib/mongoid/locking/reloadable.rb
122
122
  - lib/mongoid/locking/selectable.rb
123
123
  - lib/mongoid/locking/version.rb
124
124
  - lib/mongoid/stale_object_error.rb
@@ -131,7 +131,7 @@ metadata:
131
131
  homepage_uri: https://github.com/fullhealthmedical/mongoid-locking
132
132
  source_code_uri: https://github.com/fullhealthmedical/mongoid-locking
133
133
  changelog_uri: https://github.com/fullhealthmedical/blob/main/CHANGELOG.md
134
- post_install_message:
134
+ post_install_message:
135
135
  rdoc_options: []
136
136
  require_paths:
137
137
  - lib
@@ -139,15 +139,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
139
  requirements:
140
140
  - - ">="
141
141
  - !ruby/object:Gem::Version
142
- version: 2.6.0
142
+ version: 3.0.0
143
143
  required_rubygems_version: !ruby/object:Gem::Requirement
144
144
  requirements:
145
145
  - - ">="
146
146
  - !ruby/object:Gem::Version
147
147
  version: '0'
148
148
  requirements: []
149
- rubygems_version: 3.0.3.1
150
- signing_key:
149
+ rubygems_version: 3.3.26
150
+ signing_key:
151
151
  specification_version: 4
152
152
  summary: Implements optimistic locking for Mongoid objects.
153
153
  test_files: []
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in mongoid-locking.gemspec
4
- gemspec path: ".."
5
-
6
- gem "mongoid", "~> 6.0"