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.
@@ -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