mongoid_versioning 0.0.3 → 0.1.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 +4 -4
- data/Gemfile.lock +59 -49
- data/README.md +10 -0
- data/lib/mongoid_versioning/version.rb +2 -2
- data/lib/mongoid_versioning/versioned.rb +7 -5
- data/mongoid_versioning.gemspec +2 -1
- data/test/mongoid_versioning/versioned_test.rb +8 -8
- data/test/test_helper.rb +4 -4
- metadata +19 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 335f426351947efbcd8dde32386982a9afadfd5c
|
|
4
|
+
data.tar.gz: 39f3168fe68034772d2326c38027f0d8f3535116
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1402591cba459621cbd352dd35c4391edaccc490552f90bf49eeb5954641806123866a15425f56489443085b049f22754ebd9b69001dbe49f39f1bb1414caad9
|
|
7
|
+
data.tar.gz: 0418a28b9439bd5d9c42b1dcf185fc3679b06cfde94ef71c7c1ff6d4fe9c5c11a6a91d5314477b08c6a0509763997981c675444651167db013728bbe509611b2
|
data/Gemfile.lock
CHANGED
|
@@ -1,96 +1,105 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
mongoid_versioning (0.0
|
|
5
|
-
mongoid (~>
|
|
4
|
+
mongoid_versioning (0.1.0)
|
|
5
|
+
mongoid (~> 5.0.0)
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
|
-
activemodel (4.2.
|
|
11
|
-
activesupport (= 4.2.
|
|
10
|
+
activemodel (4.2.4)
|
|
11
|
+
activesupport (= 4.2.4)
|
|
12
12
|
builder (~> 3.1)
|
|
13
|
-
activesupport (4.2.
|
|
13
|
+
activesupport (4.2.4)
|
|
14
14
|
i18n (~> 0.7)
|
|
15
15
|
json (~> 1.7, >= 1.7.7)
|
|
16
16
|
minitest (~> 5.1)
|
|
17
17
|
thread_safe (~> 0.3, >= 0.3.4)
|
|
18
18
|
tzinfo (~> 1.1)
|
|
19
|
-
bson (2.
|
|
19
|
+
bson (3.2.6)
|
|
20
20
|
builder (3.2.2)
|
|
21
|
-
celluloid (0.16.0)
|
|
22
|
-
timers (~> 4.0.0)
|
|
23
21
|
coderay (1.1.0)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
database_cleaner (1.3.0)
|
|
22
|
+
coveralls (0.8.3)
|
|
23
|
+
json (~> 1.8)
|
|
24
|
+
rest-client (>= 1.6.8, < 2)
|
|
25
|
+
simplecov (~> 0.10.0)
|
|
26
|
+
term-ansicolor (~> 1.3)
|
|
27
|
+
thor (~> 0.19.1)
|
|
28
|
+
database_cleaner (1.5.1)
|
|
32
29
|
docile (1.1.5)
|
|
33
|
-
|
|
30
|
+
domain_name (0.5.25)
|
|
31
|
+
unf (>= 0.0.5, < 1.0.0)
|
|
32
|
+
ffi (1.9.10)
|
|
34
33
|
formatador (0.2.5)
|
|
35
|
-
guard (2.
|
|
34
|
+
guard (2.13.0)
|
|
36
35
|
formatador (>= 0.2.4)
|
|
37
|
-
listen (
|
|
36
|
+
listen (>= 2.7, <= 4.0)
|
|
38
37
|
lumberjack (~> 1.0)
|
|
38
|
+
nenv (~> 0.1)
|
|
39
|
+
notiffany (~> 0.0)
|
|
39
40
|
pry (>= 0.9.12)
|
|
41
|
+
shellany (~> 0.0)
|
|
40
42
|
thor (>= 0.18.1)
|
|
41
|
-
guard-
|
|
42
|
-
|
|
43
|
+
guard-compat (1.2.1)
|
|
44
|
+
guard-minitest (2.4.4)
|
|
45
|
+
guard-compat (~> 1.2)
|
|
43
46
|
minitest (>= 3.0)
|
|
44
|
-
|
|
47
|
+
http-cookie (1.0.2)
|
|
48
|
+
domain_name (~> 0.5)
|
|
45
49
|
i18n (0.7.0)
|
|
46
|
-
json (1.8.
|
|
47
|
-
listen (
|
|
48
|
-
celluloid (>= 0.15.2)
|
|
50
|
+
json (1.8.3)
|
|
51
|
+
listen (3.0.3)
|
|
49
52
|
rb-fsevent (>= 0.9.3)
|
|
50
53
|
rb-inotify (>= 0.9)
|
|
51
54
|
lumberjack (1.0.9)
|
|
52
55
|
method_source (0.8.2)
|
|
53
|
-
mime-types (2.
|
|
54
|
-
minitest (5.
|
|
55
|
-
|
|
56
|
+
mime-types (2.6.2)
|
|
57
|
+
minitest (5.8.1)
|
|
58
|
+
mongo (2.1.2)
|
|
59
|
+
bson (~> 3.0)
|
|
60
|
+
mongoid (5.0.0)
|
|
56
61
|
activemodel (~> 4.0)
|
|
57
|
-
|
|
62
|
+
mongo (~> 2.1)
|
|
58
63
|
origin (~> 2.1)
|
|
59
64
|
tzinfo (>= 0.3.37)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
netrc (0.7.7)
|
|
66
|
-
optionable (0.2.0)
|
|
65
|
+
nenv (0.2.0)
|
|
66
|
+
netrc (0.10.3)
|
|
67
|
+
notiffany (0.0.8)
|
|
68
|
+
nenv (~> 0.1)
|
|
69
|
+
shellany (~> 0.0)
|
|
67
70
|
origin (2.1.1)
|
|
68
|
-
pry (0.10.
|
|
71
|
+
pry (0.10.3)
|
|
69
72
|
coderay (~> 1.1.0)
|
|
70
73
|
method_source (~> 0.8.1)
|
|
71
74
|
slop (~> 3.4)
|
|
72
|
-
rake (10.
|
|
73
|
-
rb-fsevent (0.9.
|
|
75
|
+
rake (10.4.2)
|
|
76
|
+
rb-fsevent (0.9.6)
|
|
74
77
|
rb-inotify (0.9.5)
|
|
75
78
|
ffi (>= 0.5.0)
|
|
76
|
-
rest-client (1.
|
|
79
|
+
rest-client (1.8.0)
|
|
80
|
+
http-cookie (>= 1.0.2, < 2.0)
|
|
77
81
|
mime-types (>= 1.16, < 3.0)
|
|
78
82
|
netrc (~> 0.7)
|
|
79
|
-
|
|
83
|
+
rspec-core (3.3.2)
|
|
84
|
+
rspec-support (~> 3.3.0)
|
|
85
|
+
rspec-support (3.3.0)
|
|
86
|
+
shellany (0.0.1)
|
|
87
|
+
simplecov (0.10.0)
|
|
80
88
|
docile (~> 1.1.0)
|
|
81
|
-
|
|
82
|
-
simplecov-html (~> 0.
|
|
83
|
-
simplecov-html (0.
|
|
89
|
+
json (~> 1.8)
|
|
90
|
+
simplecov-html (~> 0.10.0)
|
|
91
|
+
simplecov-html (0.10.0)
|
|
84
92
|
slop (3.6.0)
|
|
85
|
-
term-ansicolor (1.3.
|
|
93
|
+
term-ansicolor (1.3.2)
|
|
86
94
|
tins (~> 1.0)
|
|
87
95
|
thor (0.19.1)
|
|
88
|
-
thread_safe (0.3.
|
|
89
|
-
|
|
90
|
-
hitimes
|
|
91
|
-
tins (1.3.3)
|
|
96
|
+
thread_safe (0.3.5)
|
|
97
|
+
tins (1.6.0)
|
|
92
98
|
tzinfo (1.2.2)
|
|
93
99
|
thread_safe (~> 0.1)
|
|
100
|
+
unf (0.1.4)
|
|
101
|
+
unf_ext
|
|
102
|
+
unf_ext (0.0.7.1)
|
|
94
103
|
|
|
95
104
|
PLATFORMS
|
|
96
105
|
ruby
|
|
@@ -104,3 +113,4 @@ DEPENDENCIES
|
|
|
104
113
|
minitest
|
|
105
114
|
mongoid_versioning!
|
|
106
115
|
rake
|
|
116
|
+
rspec-core
|
data/README.md
CHANGED
|
@@ -87,6 +87,16 @@ To retrieve specific version:
|
|
|
87
87
|
doc.version(2) # => MyVersionedDocument
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
+
### Removing versions
|
|
91
|
+
|
|
92
|
+
By default, past versions are never removed. This way it is possible to implement some sort of recovery mechanism of deleted documents.
|
|
93
|
+
|
|
94
|
+
It should be however trivial to implement removal of versions on destroy. For example:
|
|
95
|
+
|
|
96
|
+
```ruby
|
|
97
|
+
after_destroy -> doc { doc.previous_versions.destroy_all }
|
|
98
|
+
```
|
|
99
|
+
|
|
90
100
|
## Further Reading
|
|
91
101
|
|
|
92
102
|
See [Further Thoughts on How to Track Versions with MongoDB](http://askasya.com/post/revisitversions).
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module MongoidVersioning
|
|
2
|
-
VERSION = "0.0
|
|
3
|
-
end
|
|
2
|
+
VERSION = "0.1.0"
|
|
3
|
+
end
|
|
@@ -9,7 +9,7 @@ module MongoidVersioning
|
|
|
9
9
|
field :_version, type: Integer
|
|
10
10
|
field :_based_on_version, type: Integer
|
|
11
11
|
|
|
12
|
-
versions_collection.indexes.
|
|
12
|
+
versions_collection.indexes.create_one(
|
|
13
13
|
{ _orig_id: 1, _version: 1 }, { unique: true }
|
|
14
14
|
)
|
|
15
15
|
|
|
@@ -81,7 +81,7 @@ module MongoidVersioning
|
|
|
81
81
|
private # =============================================================
|
|
82
82
|
|
|
83
83
|
def set_initial_version
|
|
84
|
-
self
|
|
84
|
+
self[:_version] ||= 1
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
def revert_id
|
|
@@ -98,15 +98,17 @@ module MongoidVersioning
|
|
|
98
98
|
|
|
99
99
|
current_version = previous_doc._version
|
|
100
100
|
|
|
101
|
-
res1 = self.class.versions_collection.
|
|
101
|
+
res1 = self.class.versions_collection.find(_orig_id: previous_doc['_orig_id'], _version: previous_doc._version)
|
|
102
|
+
previous_doc[:_version] = current_version if previous_doc[:_version].nil?
|
|
103
|
+
self.class.versions_collection.insert_one(previous_doc.as_document) if res1.count == 0
|
|
102
104
|
|
|
103
105
|
self._based_on_version = _version || current_version
|
|
104
106
|
self._version = current_version+1
|
|
105
107
|
|
|
106
|
-
res2 = self.class.collection.
|
|
108
|
+
res2 = self.class.collection.find(_id: id, _version: current_version).update_one(self.as_document)
|
|
107
109
|
|
|
108
110
|
# replay flow if someone else updated the document before us
|
|
109
|
-
break unless res2
|
|
111
|
+
break unless res2.n != 1
|
|
110
112
|
end
|
|
111
113
|
end
|
|
112
114
|
|
data/mongoid_versioning.gemspec
CHANGED
|
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
19
|
spec.require_paths = ["lib"]
|
|
20
20
|
|
|
21
|
-
spec.add_dependency "mongoid", "~>
|
|
21
|
+
spec.add_dependency "mongoid", "~> 5.0.0"
|
|
22
22
|
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
|
24
|
+
spec.add_development_dependency "rspec-core"
|
|
24
25
|
spec.add_development_dependency "coveralls"
|
|
25
26
|
spec.add_development_dependency "database_cleaner"
|
|
26
27
|
spec.add_development_dependency "guard"
|
|
@@ -70,8 +70,8 @@ module MongoidVersioning
|
|
|
70
70
|
new_document.name = 'Foo'
|
|
71
71
|
new_document.revise
|
|
72
72
|
|
|
73
|
-
@versions = TestDocument.versions_collection.
|
|
74
|
-
@current = TestDocument.collection.
|
|
73
|
+
@versions = TestDocument.versions_collection.find(_orig_id: new_document.id).sort(_version: -1)
|
|
74
|
+
@current = TestDocument.collection.find(_id: new_document.id).first
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
it 'sets _version' do
|
|
@@ -121,8 +121,8 @@ module MongoidVersioning
|
|
|
121
121
|
existing_document.name = 'Foo'
|
|
122
122
|
existing_document.revise
|
|
123
123
|
|
|
124
|
-
@versions = TestDocument.versions_collection.
|
|
125
|
-
@current = TestDocument.collection.
|
|
124
|
+
@versions = TestDocument.versions_collection.find(_orig_id: existing_document.id).sort(_version: -1)
|
|
125
|
+
@current = TestDocument.collection.find(_id: existing_document.id).first
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
it 'sets _version' do
|
|
@@ -169,8 +169,8 @@ module MongoidVersioning
|
|
|
169
169
|
existing_document.name = 'Bar'
|
|
170
170
|
existing_document.revise
|
|
171
171
|
|
|
172
|
-
@versions = TestDocument.versions_collection.
|
|
173
|
-
@current = TestDocument.collection.
|
|
172
|
+
@versions = TestDocument.versions_collection.find(_orig_id: existing_document.id).sort(_version: -1)
|
|
173
|
+
@current = TestDocument.collection.find(_id: existing_document.id).first
|
|
174
174
|
end
|
|
175
175
|
|
|
176
176
|
it 'sets _version' do
|
|
@@ -217,8 +217,8 @@ module MongoidVersioning
|
|
|
217
217
|
@user1.revise
|
|
218
218
|
|
|
219
219
|
@result = TestDocument.where(_id: @doc.id).first
|
|
220
|
-
@versions = TestDocument.versions_collection.
|
|
221
|
-
@current = TestDocument.collection.
|
|
220
|
+
@versions = TestDocument.versions_collection.find(_orig_id: @doc.id).sort(_version: -1)
|
|
221
|
+
@current = TestDocument.collection.find(_id: @doc.id).first
|
|
222
222
|
end
|
|
223
223
|
|
|
224
224
|
it 'will correctly set values' do
|
data/test/test_helper.rb
CHANGED
|
@@ -25,7 +25,7 @@ def database_id
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
CONFIG = {
|
|
28
|
-
|
|
28
|
+
clients: {
|
|
29
29
|
default: {
|
|
30
30
|
database: database_id,
|
|
31
31
|
hosts: [ "#{HOST}:#{PORT}" ]
|
|
@@ -40,6 +40,6 @@ end
|
|
|
40
40
|
DatabaseCleaner.orm = :mongoid
|
|
41
41
|
DatabaseCleaner.strategy = :truncation
|
|
42
42
|
|
|
43
|
-
class MiniTest::Spec
|
|
44
|
-
|
|
45
|
-
end
|
|
43
|
+
# class MiniTest::Spec
|
|
44
|
+
# before(:each) { DatabaseCleaner.clean }
|
|
45
|
+
# end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mongoid_versioning
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tomas Celizna
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-10-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: mongoid
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: 5.0.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:
|
|
26
|
+
version: 5.0.0
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -38,6 +38,20 @@ dependencies:
|
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '1.3'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rspec-core
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
56
|
name: coveralls
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -164,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
164
178
|
version: '0'
|
|
165
179
|
requirements: []
|
|
166
180
|
rubyforge_project:
|
|
167
|
-
rubygems_version: 2.
|
|
181
|
+
rubygems_version: 2.4.8
|
|
168
182
|
signing_key:
|
|
169
183
|
specification_version: 4
|
|
170
184
|
summary: Versioning Mongoid documents by means of separate collection.
|