mongoid_delorean 1.0.1 → 1.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.
- data/lib/mongoid/delorean/embedded_in.rb +18 -0
- data/lib/mongoid/delorean/trackable.rb +9 -25
- data/lib/mongoid/delorean/version.rb +1 -1
- data/lib/mongoid_delorean.rb +1 -0
- data/spec/mongoid/delorean/trackable_spec.rb +4 -40
- data/spec/spec_helper.rb +1 -0
- data/spec/support/models.rb +41 -0
- metadata +5 -2
@@ -0,0 +1,18 @@
|
|
1
|
+
require "mongoid/relations/embedded/in"
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module Relations
|
5
|
+
module Macros
|
6
|
+
module ClassMethods
|
7
|
+
alias :embedded_in_without_history :embedded_in
|
8
|
+
def embedded_in(*args)
|
9
|
+
relation = embedded_in_without_history(*args)
|
10
|
+
self.send(:include, Mongoid::Delorean::Trackable::CommonInstanceMethods)
|
11
|
+
self.send(:include, Mongoid::Delorean::Trackable::CommonEmbeddedMethods)
|
12
|
+
self.before_save :save_version
|
13
|
+
return relation
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -6,6 +6,7 @@ module Mongoid
|
|
6
6
|
super
|
7
7
|
klass.field :version, type: Integer, default: 0
|
8
8
|
klass.before_save :save_version
|
9
|
+
klass.send(:include, Mongoid::Delorean::Trackable::CommonInstanceMethods)
|
9
10
|
end
|
10
11
|
|
11
12
|
def versions
|
@@ -14,9 +15,6 @@ module Mongoid
|
|
14
15
|
|
15
16
|
def save_version
|
16
17
|
if self.track_history?
|
17
|
-
unless self.kind_of?(Mongoid::Delorean::Trackable::CommonInstanceMethods)
|
18
|
-
extend Mongoid::Delorean::Trackable::CommonInstanceMethods
|
19
|
-
end
|
20
18
|
last_version = self.versions.last
|
21
19
|
_version = last_version ? last_version.version + 1 : 1
|
22
20
|
|
@@ -46,36 +44,22 @@ module Mongoid
|
|
46
44
|
old_version = self.versions.where(version: version).first
|
47
45
|
if old_version
|
48
46
|
old_version.full_attributes.each do |key, value|
|
49
|
-
self.
|
47
|
+
self.write_attribute(key, value)
|
50
48
|
end
|
51
49
|
self.save!
|
52
50
|
end
|
53
51
|
end
|
54
52
|
|
55
|
-
module
|
56
|
-
|
57
|
-
def
|
58
|
-
|
59
|
-
included(klass)
|
53
|
+
module CommonEmbeddedMethods
|
54
|
+
|
55
|
+
def save_version
|
56
|
+
self._parent.save_version if self._parent.respond_to?(:save_version)
|
60
57
|
end
|
61
58
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
_klass = Kernel.const_get(details.class_name)
|
66
|
-
_klass.send(:include, Mongoid::Delorean::Trackable::CommonInstanceMethods)
|
67
|
-
_klass.after_save :save_parent_version
|
68
|
-
end
|
69
|
-
end
|
59
|
+
end
|
60
|
+
|
61
|
+
module CommonInstanceMethods
|
70
62
|
|
71
|
-
def save_parent_version
|
72
|
-
if self.embedded?
|
73
|
-
self._parent.save_parent_version
|
74
|
-
else
|
75
|
-
self.save_version
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
63
|
def changes_with_relations
|
80
64
|
_changes = self.changes.dup
|
81
65
|
|
data/lib/mongoid_delorean.rb
CHANGED
@@ -2,46 +2,6 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Mongoid::Delorean::Trackable do
|
4
4
|
|
5
|
-
class Article
|
6
|
-
include Mongoid::Document
|
7
|
-
include Mongoid::Timestamps
|
8
|
-
include Mongoid::Delorean::Trackable
|
9
|
-
|
10
|
-
field :name, type: String
|
11
|
-
field :summary, type: String
|
12
|
-
|
13
|
-
embeds_many :pages
|
14
|
-
end
|
15
|
-
|
16
|
-
class Page
|
17
|
-
include Mongoid::Document
|
18
|
-
include Mongoid::Timestamps
|
19
|
-
|
20
|
-
field :name, type: String
|
21
|
-
|
22
|
-
embedded_in :article, inverse_of: :pages
|
23
|
-
embeds_many :sections
|
24
|
-
end
|
25
|
-
|
26
|
-
class Section
|
27
|
-
include Mongoid::Document
|
28
|
-
include Mongoid::Timestamps
|
29
|
-
|
30
|
-
field :name, type: String
|
31
|
-
field :body, type: String
|
32
|
-
|
33
|
-
embedded_in :page, inverse_of: :sections
|
34
|
-
end
|
35
|
-
|
36
|
-
class User
|
37
|
-
include Mongoid::Document
|
38
|
-
include Mongoid::Timestamps
|
39
|
-
include Mongoid::Delorean::Trackable
|
40
|
-
|
41
|
-
field :name, type: String
|
42
|
-
field :age, type: Integer
|
43
|
-
end
|
44
|
-
|
45
5
|
context "simple document" do
|
46
6
|
|
47
7
|
it "creates a history object" do
|
@@ -140,6 +100,7 @@ describe Mongoid::Delorean::Trackable do
|
|
140
100
|
u.versions.size.should eql(3)
|
141
101
|
u.version.should eql(3)
|
142
102
|
u.revert!(2)
|
103
|
+
u.reload
|
143
104
|
u.version.should eql(4)
|
144
105
|
u.name.should eql("Mark")
|
145
106
|
u.age.should eql(36)
|
@@ -152,6 +113,7 @@ describe Mongoid::Delorean::Trackable do
|
|
152
113
|
u.versions.size.should eql(3)
|
153
114
|
u.version.should eql(3)
|
154
115
|
u.revert!(20)
|
116
|
+
u.reload
|
155
117
|
u.version.should eql(3)
|
156
118
|
u.name.should eql("Mark Bates")
|
157
119
|
u.age.should eql(36)
|
@@ -238,6 +200,7 @@ describe Mongoid::Delorean::Trackable do
|
|
238
200
|
a.pages.should_not be_empty
|
239
201
|
a.revert!
|
240
202
|
a.name.should eql("My Article")
|
203
|
+
a.reload
|
241
204
|
a.pages.should be_empty
|
242
205
|
end
|
243
206
|
|
@@ -263,6 +226,7 @@ describe Mongoid::Delorean::Trackable do
|
|
263
226
|
a.pages.build(name: "Page 1")
|
264
227
|
a.save!
|
265
228
|
a.revert!(20)
|
229
|
+
a.reload
|
266
230
|
a.version.should eql(2)
|
267
231
|
end
|
268
232
|
|
data/spec/spec_helper.rb
CHANGED
@@ -5,6 +5,7 @@ require 'mongoid_delorean' # and any other gems you need
|
|
5
5
|
require 'database_cleaner'
|
6
6
|
|
7
7
|
Mongoid.load!(File.join(File.dirname(__FILE__), "config.yml"), :test)
|
8
|
+
require File.join(File.dirname(__FILE__), "support", "models")
|
8
9
|
|
9
10
|
DatabaseCleaner[:mongoid].strategy = :truncation
|
10
11
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class Section
|
2
|
+
include Mongoid::Document
|
3
|
+
include Mongoid::Timestamps
|
4
|
+
|
5
|
+
field :name, type: String
|
6
|
+
field :body, type: String
|
7
|
+
|
8
|
+
embedded_in :page, inverse_of: :sections
|
9
|
+
end
|
10
|
+
|
11
|
+
class Article
|
12
|
+
include Mongoid::Document
|
13
|
+
include Mongoid::Timestamps
|
14
|
+
include Mongoid::Delorean::Trackable
|
15
|
+
|
16
|
+
field :name, type: String
|
17
|
+
field :summary, type: String
|
18
|
+
|
19
|
+
embeds_many :pages
|
20
|
+
end
|
21
|
+
|
22
|
+
class Page
|
23
|
+
include Mongoid::Document
|
24
|
+
include Mongoid::Timestamps
|
25
|
+
|
26
|
+
field :name, type: String
|
27
|
+
|
28
|
+
embedded_in :article, inverse_of: :pages
|
29
|
+
embeds_many :sections
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
class User
|
35
|
+
include Mongoid::Document
|
36
|
+
include Mongoid::Timestamps
|
37
|
+
include Mongoid::Delorean::Trackable
|
38
|
+
|
39
|
+
field :name, type: String
|
40
|
+
field :age, type: Integer
|
41
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_delorean
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
@@ -41,6 +41,7 @@ files:
|
|
41
41
|
- README.md
|
42
42
|
- Rakefile
|
43
43
|
- lib/mongoid/delorean/configuration.rb
|
44
|
+
- lib/mongoid/delorean/embedded_in.rb
|
44
45
|
- lib/mongoid/delorean/history.rb
|
45
46
|
- lib/mongoid/delorean/trackable.rb
|
46
47
|
- lib/mongoid/delorean/version.rb
|
@@ -49,6 +50,7 @@ files:
|
|
49
50
|
- spec/config.yml
|
50
51
|
- spec/mongoid/delorean/trackable_spec.rb
|
51
52
|
- spec/spec_helper.rb
|
53
|
+
- spec/support/models.rb
|
52
54
|
homepage: ''
|
53
55
|
licenses: []
|
54
56
|
post_install_message:
|
@@ -77,3 +79,4 @@ test_files:
|
|
77
79
|
- spec/config.yml
|
78
80
|
- spec/mongoid/delorean/trackable_spec.rb
|
79
81
|
- spec/spec_helper.rb
|
82
|
+
- spec/support/models.rb
|