mongoid_delorean 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.send("#{key}=", value)
47
+ self.write_attribute(key, value)
50
48
  end
51
49
  self.save!
52
50
  end
53
51
  end
54
52
 
55
- module CommonInstanceMethods
56
-
57
- def self.extended(klass)
58
- super
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
- def self.included(klass)
63
- super
64
- klass.embedded_relations.each do |name, details|
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
 
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Delorean
3
- VERSION = "1.0.1"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
@@ -1,6 +1,7 @@
1
1
  require 'mongoid'
2
2
 
3
3
  require "mongoid/delorean/version"
4
+ require "mongoid/delorean/embedded_in"
4
5
  require "mongoid/delorean/configuration"
5
6
  require "mongoid/delorean/history"
6
7
  require "mongoid/delorean/trackable"
@@ -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.1
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-09 00:00:00.000000000 Z
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