mongoid-locker 0.3.3 → 0.3.4

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
2
  SHA1:
3
- metadata.gz: bf9bd7b5292b2c9ab352102fb652cc6751d4be64
4
- data.tar.gz: 0a8eb450da8131e7808831787ae9135dae805e37
3
+ metadata.gz: 15bbaa6b9c117c44fb72c5db1b1c6ec6a9019044
4
+ data.tar.gz: e0e4680415861b7ce27cba6bd3884a2cee123f3f
5
5
  SHA512:
6
- metadata.gz: 593ddca343da2c1c107f2ef972eeaccd2c3303c1401fa5b04ed667f411ea53ca47ab6b1043e2545a6e478692f8620292f904fe606fd1f7f40c3f2c39b75b4360
7
- data.tar.gz: fcf91faa35ebd2201a8c66debdc49e4a2cbb46c19711d14a8264a20aa778baf7ce915e5ac939d00bfeab6effc1f3df29decd7414b70599d4e6e463dc18c0b657
6
+ metadata.gz: b6cf643433841b6efba4ac548ace833fa50b6d4984cbc90c620ec1a38f5338943a181c372499394923d9386b96d328e1a8236904c3c94df7452c55a94badce0b
7
+ data.tar.gz: 27537644279ea4c3fb4299fcd1430c4b3d9f017222f29550965b2fdedbb7d9052cef223386f5136ead1b03989b8083650191157d3081fe77afca55228531d312
@@ -1,20 +1,20 @@
1
1
  # This configuration was generated by `rubocop --auto-gen-config`
2
- # on 2015-09-25 09:10:09 -0400 using RuboCop version 0.29.1.
2
+ # on 2015-10-21 11:03:44 -0400 using RuboCop version 0.29.1.
3
3
  # The point is for the user to remove these configuration records
4
4
  # one by one as the offenses are removed from the code base.
5
5
  # Note that changes in the inspected code, or installation of new
6
6
  # versions of RuboCop, may require this file to be generated again.
7
7
 
8
- # Offense count: 2
8
+ # Offense count: 1
9
9
  Metrics/AbcSize:
10
- Max: 19
10
+ Max: 18
11
11
 
12
- # Offense count: 25
12
+ # Offense count: 37
13
13
  # Configuration parameters: AllowURI, URISchemes.
14
14
  Metrics/LineLength:
15
15
  Max: 184
16
16
 
17
- # Offense count: 4
17
+ # Offense count: 3
18
18
  # Configuration parameters: CountComments.
19
19
  Metrics/MethodLength:
20
20
  Max: 25
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.4 ([diff](https://github.com/afeld/mongoid-locker/compare/v0.3.4...master?w=1))
4
+
5
+ * fixed write concern for the lock record with Mongoid 5
6
+ * don't query the document in Mongoid 5, better performance when acquiring lock
7
+
3
8
  ## 0.3.3 ([diff](https://github.com/afeld/mongoid-locker/compare/v0.3.3...master?w=1))
4
9
 
5
10
  * support Mongoid 5 - #36
data/README.md CHANGED
@@ -1,4 +1,7 @@
1
- # mongoid-locker [![Build Status](https://secure.travis-ci.org/afeld/mongoid-locker.svg?branch=master)](http://travis-ci.org/afeld/mongoid-locker) [![Code Climate](https://codeclimate.com/github/afeld/mongoid-locker.svg)](https://codeclimate.com/github/afeld/mongoid-locker)
1
+ # mongoid-locker
2
+ [![Gem Version](https://badge.fury.io/rb/mongoid-locker.svg)](http://badge.fury.io/rb/mongoid-locker)
3
+ [![Build Status](https://secure.travis-ci.org/afeld/mongoid-locker.svg?branch=master)](http://travis-ci.org/afeld/mongoid-locker)
4
+ [![Code Climate](https://codeclimate.com/github/afeld/mongoid-locker.svg)](https://codeclimate.com/github/afeld/mongoid-locker)
2
5
 
3
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.
4
7
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.3
1
+ 0.3.4
@@ -1,43 +1,13 @@
1
1
  require 'mongoid/compatibility'
2
2
 
3
- module Mongoid
4
- module Locker
5
- # Normalizes queries between Mongoid 2 and 3.
6
- module Wrapper
7
- # Update the document for the provided Class matching the provided query with the provided setter.
8
- #
9
- # @param [Class] The model class
10
- # @param [Hash] The Mongoid query
11
- # @param [Hash] The Mongoid setter
12
- # @return [Boolean] true if the document was successfully updated, false otherwise
13
- def self.update(klass, query, setter)
14
- if Mongoid::Compatibility::Version.mongoid5?
15
- !klass.with(safe: true).collection.find(query).find_one_and_update(setter).nil?
16
- elsif Mongoid::Compatibility::Version.mongoid2?
17
- klass.collection.update(query, setter, safe: true)['n'] == 1
18
- else
19
- klass.with(safe: true).collection.find(query).update(setter)['n'] == 1
20
- end
21
- end
22
-
23
- # Determine whether the provided document is locked in the database or not.
24
- #
25
- # @param [Class] The model instance
26
- # @return [Time] The timestamp of when the document is locked until, nil if not locked.
27
- def self.locked_until(doc)
28
- existing_query = {
29
- _id: doc.id,
30
- locked_until: { '$exists' => true }
31
- }
32
-
33
- if Mongoid::Compatibility::Version.mongoid2?
34
- existing = doc.class.collection.find_one(existing_query, fields: { locked_until: 1 })
35
- existing ? existing['locked_until'] : nil
36
- else
37
- existing = doc.class.where(existing_query).limit(1).only(:locked_until).first
38
- existing ? existing.locked_until : nil
39
- end
40
- end
41
- end
42
- end
3
+ if Mongoid::Compatibility::Version.mongoid5?
4
+ require 'mongoid/locker/wrapper5'
5
+ elsif Mongoid::Compatibility::Version.mongoid4?
6
+ require 'mongoid/locker/wrapper4'
7
+ elsif Mongoid::Compatibility::Version.mongoid3?
8
+ require 'mongoid/locker/wrapper3'
9
+ elsif Mongoid::Compatibility::Version.mongoid2?
10
+ require 'mongoid/locker/wrapper2'
11
+ else
12
+ fail 'incompatible Mongoid version'
43
13
  end
@@ -0,0 +1,26 @@
1
+ module Mongoid
2
+ module Locker
3
+ # Normalizes queries between various Mongoid versions.
4
+ module Wrapper
5
+ # Update the document for the provided Class matching the provided query with the provided setter.
6
+ #
7
+ # @param [Class] The model class
8
+ # @param [Hash] The Mongoid query
9
+ # @param [Hash] The Mongoid setter
10
+ # @return [Boolean] true if the document was successfully updated, false otherwise
11
+ def self.update(klass, query, setter)
12
+ klass.collection.update(query, setter, safe: true)['n'] == 1
13
+ end
14
+
15
+ # Determine whether the provided document is locked in the database or not.
16
+ #
17
+ # @param [Class] The model instance
18
+ # @return [Time] The timestamp of when the document is locked until, nil if not locked.
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
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module Mongoid
2
+ module Locker
3
+ # Normalizes queries between various Mongoid versions.
4
+ module Wrapper
5
+ # Update the document for the provided Class matching the provided query with the provided setter.
6
+ #
7
+ # @param [Class] The model class
8
+ # @param [Hash] The Mongoid query
9
+ # @param [Hash] The Mongoid setter
10
+ # @return [Boolean] true if the document was successfully updated, false otherwise
11
+ def self.update(klass, query, setter)
12
+ klass.with(safe: true).collection.find(query).update(setter)['n'] == 1
13
+ end
14
+
15
+ # Determine whether the provided document is locked in the database or not.
16
+ #
17
+ # @param [Class] The model instance
18
+ # @return [Time] The timestamp of when the document is locked until, nil if not locked.
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
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ module Mongoid
2
+ module Locker
3
+ # Normalizes queries between various Mongoid versions.
4
+ module Wrapper
5
+ # Update the document for the provided Class matching the provided query with the provided setter.
6
+ #
7
+ # @param [Class] The model class
8
+ # @param [Hash] The Mongoid query
9
+ # @param [Hash] The Mongoid setter
10
+ # @return [Boolean] true if the document was successfully updated, false otherwise
11
+ def self.update(klass, query, setter)
12
+ klass.with(safe: true).collection.find(query).update(setter)['n'] == 1
13
+ end
14
+
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
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ module Mongoid
2
+ module Locker
3
+ # Normalizes queries between various Mongoid versions.
4
+ module Wrapper
5
+ # Update the document for the provided Class matching the provided query with the provided setter.
6
+ #
7
+ # @param [Class] The model class
8
+ # @param [Hash] The Mongoid query
9
+ # @param [Hash] The Mongoid setter
10
+ # @return [Boolean] true if the document was successfully updated, false otherwise
11
+ def self.update(klass, query, setter)
12
+ rc = klass.with(write: { w: 1 }).collection.find(query).update_one(setter)
13
+ rc.ok? && rc.documents.first['n'] == 1
14
+ end
15
+
16
+ # Determine whether the provided document is locked in the database or not.
17
+ #
18
+ # @param [Class] The model instance
19
+ # @return [Time] The timestamp of when the document is locked until, nil if not locked.
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
24
+ end
25
+ end
26
+ end
27
+ end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: mongoid-locker 0.3.3 ruby lib
5
+ # stub: mongoid-locker 0.3.4 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "mongoid-locker"
9
- s.version = "0.3.3"
9
+ s.version = "0.3.4"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Aidan Feldman"]
14
- s.date = "2015-09-25"
14
+ s.date = "2015-10-21"
15
15
  s.description = "Allows multiple processes to operate on individual documents in MongoDB while ensuring that only one can act at a time."
16
16
  s.email = "aidan.feldman@gmail.com"
17
17
  s.extra_rdoc_files = [
@@ -41,6 +41,10 @@ Gem::Specification.new do |s|
41
41
  "lib/mongoid-locker.rb",
42
42
  "lib/mongoid/locker.rb",
43
43
  "lib/mongoid/locker/wrapper.rb",
44
+ "lib/mongoid/locker/wrapper2.rb",
45
+ "lib/mongoid/locker/wrapper3.rb",
46
+ "lib/mongoid/locker/wrapper4.rb",
47
+ "lib/mongoid/locker/wrapper5.rb",
44
48
  "mongoid-locker.gemspec",
45
49
  "spec/database2.yml",
46
50
  "spec/database3.yml",
@@ -51,7 +55,7 @@ Gem::Specification.new do |s|
51
55
  ]
52
56
  s.homepage = "http://github.com/afeld/mongoid-locker"
53
57
  s.licenses = ["MIT"]
54
- s.rubygems_version = "2.2.2"
58
+ s.rubygems_version = "2.4.5"
55
59
  s.summary = "Document-level locking for MongoDB via Mongoid"
56
60
 
57
61
  if s.respond_to? :specification_version then
@@ -101,7 +101,7 @@ describe Mongoid::Locker do
101
101
  @user.with_lock do
102
102
  fail 'booyah!'
103
103
  end
104
- }.to raise_error
104
+ }.to raise_error 'booyah!'
105
105
 
106
106
  expect(@user.reload).to_not be_locked
107
107
  end
metadata CHANGED
@@ -1,131 +1,131 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-locker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aidan Feldman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-25 00:00:00.000000000 Z
11
+ date: 2015-10-21 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
19
  version: '6.0'
20
- - - ">="
20
+ - - '>='
21
21
  - !ruby/object:Gem::Version
22
22
  version: '2.8'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - "<"
27
+ - - <
28
28
  - !ruby/object:Gem::Version
29
29
  version: '6.0'
30
- - - ">="
30
+ - - '>='
31
31
  - !ruby/object:Gem::Version
32
32
  version: '2.8'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: mongoid-compatibility
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - ">="
37
+ - - '>='
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ">="
44
+ - - '>='
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - ~>
52
52
  - !ruby/object:Gem::Version
53
53
  version: '3.0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - "~>"
58
+ - - ~>
59
59
  - !ruby/object:Gem::Version
60
60
  version: '3.0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: bundler
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - "~>"
65
+ - - ~>
66
66
  - !ruby/object:Gem::Version
67
67
  version: '1.1'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - "~>"
72
+ - - ~>
73
73
  - !ruby/object:Gem::Version
74
74
  version: '1.1'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: jeweler
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ~>
80
80
  - !ruby/object:Gem::Version
81
81
  version: '1.8'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - "~>"
86
+ - - ~>
87
87
  - !ruby/object:Gem::Version
88
88
  version: '1.8'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: guard-rspec
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - ">="
93
+ - - '>='
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - ">="
100
+ - - '>='
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rb-fsevent
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - "~>"
107
+ - - ~>
108
108
  - !ruby/object:Gem::Version
109
109
  version: 0.9.1
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - "~>"
114
+ - - ~>
115
115
  - !ruby/object:Gem::Version
116
116
  version: 0.9.1
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: rake
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
- - - ">="
121
+ - - '>='
122
122
  - !ruby/object:Gem::Version
123
123
  version: '0'
124
124
  type: :development
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
- - - ">="
128
+ - - '>='
129
129
  - !ruby/object:Gem::Version
130
130
  version: '0'
131
131
  - !ruby/object:Gem::Dependency
@@ -151,11 +151,11 @@ extra_rdoc_files:
151
151
  - LICENSE.txt
152
152
  - README.md
153
153
  files:
154
- - ".document"
155
- - ".rspec"
156
- - ".rubocop.yml"
157
- - ".rubocop_todo.yml"
158
- - ".travis.yml"
154
+ - .document
155
+ - .rspec
156
+ - .rubocop.yml
157
+ - .rubocop_todo.yml
158
+ - .travis.yml
159
159
  - CHANGELOG.md
160
160
  - CONTRIBUTING.md
161
161
  - Gemfile
@@ -173,6 +173,10 @@ files:
173
173
  - lib/mongoid-locker.rb
174
174
  - lib/mongoid/locker.rb
175
175
  - lib/mongoid/locker/wrapper.rb
176
+ - lib/mongoid/locker/wrapper2.rb
177
+ - lib/mongoid/locker/wrapper3.rb
178
+ - lib/mongoid/locker/wrapper4.rb
179
+ - lib/mongoid/locker/wrapper5.rb
176
180
  - mongoid-locker.gemspec
177
181
  - spec/database2.yml
178
182
  - spec/database3.yml
@@ -190,17 +194,17 @@ require_paths:
190
194
  - lib
191
195
  required_ruby_version: !ruby/object:Gem::Requirement
192
196
  requirements:
193
- - - ">="
197
+ - - '>='
194
198
  - !ruby/object:Gem::Version
195
199
  version: '0'
196
200
  required_rubygems_version: !ruby/object:Gem::Requirement
197
201
  requirements:
198
- - - ">="
202
+ - - '>='
199
203
  - !ruby/object:Gem::Version
200
204
  version: '0'
201
205
  requirements: []
202
206
  rubyforge_project:
203
- rubygems_version: 2.2.2
207
+ rubygems_version: 2.4.5
204
208
  signing_key:
205
209
  specification_version: 4
206
210
  summary: Document-level locking for MongoDB via Mongoid