mongoid-history 0.3.1 → 0.3.2
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/CHANGELOG.md +9 -3
- data/Gemfile +2 -1
- data/README.md +3 -1
- data/VERSION +1 -1
- data/lib/mongoid/history/trackable.rb +6 -4
- data/lib/mongoid/history/tracker.rb +4 -1
- data/mongoid-history.gemspec +10 -5
- data/spec/integration/integration_spec.rb +6 -16
- data/spec/integration/multi_relation_spec.rb +43 -0
- data/spec/support/mongoid_history.rb +15 -0
- data/spec/trackable_spec.rb +0 -8
- data/spec/tracker_spec.rb +1 -8
- metadata +23 -5
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
-
0.3.1
|
2
|
-
|
1
|
+
0.3.2 (1/24/2013)
|
2
|
+
-----------------
|
3
|
+
|
4
|
+
* [#54](https://github.com/aq1018/mongoid-history/pull/54) Use an index instead of the `$elemMatch` selector in `history_tracks` - [@vecio](https://github.com/vecio).
|
5
|
+
* [#11](https://github.com/aq1018/mongoid-history/issues/11) Added `:modifier_field_inverse_of` on `track_history` that defines the `:inverse_of` relationship of the modifier class - [@matekb](https://github.com/matekb), [@dblock](https://github.com/dblock).
|
6
|
+
|
7
|
+
0.3.1 (11/16/2012)
|
8
|
+
------------------
|
3
9
|
|
4
|
-
* [#45](https://github.com/aq1018/mongoid-history/pull/45) Fix: intermittent hash ordering issue with history_tracks - [@getaroom](https://github.com/getaroom).
|
10
|
+
* [#45](https://github.com/aq1018/mongoid-history/pull/45) Fix: intermittent hash ordering issue with `history_tracks` - [@getaroom](https://github.com/getaroom).
|
5
11
|
* [#50](https://github.com/aq1018/mongoid-history/pull/50) Fix: tracking of array changes, undo and redo of field changes on non-embedded objects - [@dblock](https://github.com/dblock).
|
6
12
|
|
7
13
|
0.3.0 (8/21/2012)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -89,7 +89,8 @@ class Post
|
|
89
89
|
|
90
90
|
# telling Mongoid::History how you want to track changes
|
91
91
|
track_history :on => [:title, :body], # track title and body fields only, default is :all
|
92
|
-
:modifier_field => :modifier, # adds "
|
92
|
+
:modifier_field => :modifier, # adds "belongs_to :modifier" to track who made the change, default is :modifier
|
93
|
+
:modifier_field_inverse_of => :nil, # adds an ":inverse_of" option to the "belongs_to :modifier" relation, default is not set
|
93
94
|
:version_field => :version, # adds "field :version, :type => Integer" to track current version, default is :version
|
94
95
|
:track_create => false, # track document creation, default is false
|
95
96
|
:track_update => true, # track document updates, default is true
|
@@ -179,5 +180,6 @@ Copyright
|
|
179
180
|
---------
|
180
181
|
|
181
182
|
Copyright (c) 2011-2012 Aaron Qian. MIT License.
|
183
|
+
|
182
184
|
See [LICENSE.txt](https://github.com/aq1018/mongoid-history/blob/master/LICENSE.txt) for further details.
|
183
185
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
@@ -34,7 +34,10 @@ module Mongoid::History
|
|
34
34
|
end
|
35
35
|
|
36
36
|
field options[:version_field].to_sym, :type => Integer
|
37
|
-
|
37
|
+
|
38
|
+
belongs_to_modifier_options = { :class_name => Mongoid::History.modifier_class_name }
|
39
|
+
belongs_to_modifier_options[:inverse_of] = options[:modifier_field_inverse_of] if options.has_key?(:modifier_field_inverse_of)
|
40
|
+
belongs_to options[:modifier_field].to_sym, belongs_to_modifier_options
|
38
41
|
|
39
42
|
include MyInstanceMethods
|
40
43
|
extend SingletonMethods
|
@@ -71,7 +74,7 @@ module Mongoid::History
|
|
71
74
|
|
72
75
|
module MyInstanceMethods
|
73
76
|
def history_tracks
|
74
|
-
@history_tracks ||= Mongoid::History.tracker_class.where(:scope => history_trackable_options[:scope], :association_chain =>
|
77
|
+
@history_tracks ||= Mongoid::History.tracker_class.where(:scope => history_trackable_options[:scope], :association_chain => association_hash)
|
75
78
|
end
|
76
79
|
|
77
80
|
# undo :from => 1, :to => 5
|
@@ -82,7 +85,6 @@ module Mongoid::History
|
|
82
85
|
versions.sort!{|v1, v2| v2.version <=> v1.version}
|
83
86
|
|
84
87
|
versions.each do |v|
|
85
|
-
undo_attr = v.undo_attr(modifier)
|
86
88
|
self.attributes = v.undo_attr(modifier)
|
87
89
|
end
|
88
90
|
save!
|
@@ -146,7 +148,7 @@ module Mongoid::History
|
|
146
148
|
# if root node has no meta, and should use class name instead
|
147
149
|
name = meta ? meta.key.to_s : node.class.name
|
148
150
|
|
149
|
-
|
151
|
+
ActiveSupport::OrderedHash['name', name, 'id', node.id]
|
150
152
|
end
|
151
153
|
|
152
154
|
def modified_attributes_for_update
|
@@ -13,7 +13,10 @@ module Mongoid::History
|
|
13
13
|
field :version, :type => Integer
|
14
14
|
field :action, :type => String
|
15
15
|
field :scope, :type => String
|
16
|
-
belongs_to
|
16
|
+
belongs_to :modifier, :class_name => Mongoid::History.modifier_class_name
|
17
|
+
|
18
|
+
index(:scope => 1)
|
19
|
+
index(:association_chain => 1)
|
17
20
|
|
18
21
|
Mongoid::History.tracker_class_name = self.name.tableize.singularize.to_sym
|
19
22
|
|
data/mongoid-history.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "mongoid-history"
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Aaron Qian", "Justin Grimes"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2013-01-24"
|
13
13
|
s.description = "In frustration of Mongoid::Versioning, I created this plugin for tracking historical changes for any document, including embedded ones. It achieves this by storing all history tracks in a single collection that you define. (See Usage for more details) Embedded documents are referenced by storing an association path, which is an array of document_name and document_id fields starting from the top most parent document and down to the embedded document that should track history.\n\n This plugin implements multi-user undo, which allows users to undo any history change in any order. Undoing a document also creates a new history track. This is great for auditing and preventing vandalism, but it is probably not suitable for use cases such as a wiki."
|
14
14
|
s.email = ["aq1018@gmail.com", "justin.mgrimes@gmail.com"]
|
15
15
|
s.extra_rdoc_files = [
|
@@ -34,9 +34,11 @@ Gem::Specification.new do |s|
|
|
34
34
|
"lib/mongoid/history/tracker.rb",
|
35
35
|
"mongoid-history.gemspec",
|
36
36
|
"spec/integration/integration_spec.rb",
|
37
|
+
"spec/integration/multi_relation_spec.rb",
|
37
38
|
"spec/spec_helper.rb",
|
38
39
|
"spec/support/database_cleaner.rb",
|
39
40
|
"spec/support/mongoid.rb",
|
41
|
+
"spec/support/mongoid_history.rb",
|
40
42
|
"spec/trackable_spec.rb",
|
41
43
|
"spec/tracker_spec.rb"
|
42
44
|
]
|
@@ -51,14 +53,17 @@ Gem::Specification.new do |s|
|
|
51
53
|
|
52
54
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
55
|
s.add_runtime_dependency(%q<easy_diff>, [">= 0"])
|
54
|
-
s.add_runtime_dependency(%q<mongoid>, ["~> 3.0
|
56
|
+
s.add_runtime_dependency(%q<mongoid>, ["~> 3.0"])
|
57
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
55
58
|
else
|
56
59
|
s.add_dependency(%q<easy_diff>, [">= 0"])
|
57
|
-
s.add_dependency(%q<mongoid>, ["~> 3.0
|
60
|
+
s.add_dependency(%q<mongoid>, ["~> 3.0"])
|
61
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
58
62
|
end
|
59
63
|
else
|
60
64
|
s.add_dependency(%q<easy_diff>, [">= 0"])
|
61
|
-
s.add_dependency(%q<mongoid>, ["~> 3.0
|
65
|
+
s.add_dependency(%q<mongoid>, ["~> 3.0"])
|
66
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
62
67
|
end
|
63
68
|
end
|
64
69
|
|
@@ -1,11 +1,7 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Mongoid::History do
|
4
|
-
before :
|
5
|
-
class HistoryTracker
|
6
|
-
include Mongoid::History::Tracker
|
7
|
-
end
|
8
|
-
|
4
|
+
before :each do
|
9
5
|
class Post
|
10
6
|
include Mongoid::Document
|
11
7
|
include Mongoid::Timestamps
|
@@ -66,9 +62,7 @@ describe Mongoid::History do
|
|
66
62
|
field :title
|
67
63
|
track_history :on => [:title], :scope => :post, :track_create => true, :track_destroy => true, :modifier_field => :updated_by
|
68
64
|
end
|
69
|
-
end
|
70
65
|
|
71
|
-
before :each do
|
72
66
|
@user = User.create(:name => "Aaron", :email => "aaron@randomemail.com", :aliases => [ 'bob' ])
|
73
67
|
@another_user = User.create(:name => "Another Guy", :email => "anotherguy@randomemail.com")
|
74
68
|
@post = Post.create(:title => "Test", :body => "Post", :modifier => @user, :views => 100)
|
@@ -118,7 +112,7 @@ describe Mongoid::History do
|
|
118
112
|
it "should have two history track records in post" do
|
119
113
|
lambda {
|
120
114
|
@post.destroy
|
121
|
-
}.should change(
|
115
|
+
}.should change(Tracker, :count).by(1)
|
122
116
|
end
|
123
117
|
|
124
118
|
it "should assign destroy on track record" do
|
@@ -136,13 +130,13 @@ describe Mongoid::History do
|
|
136
130
|
it "should create a history track if changed attributes match tracked attributes" do
|
137
131
|
lambda {
|
138
132
|
@post.update_attributes(:title => "Another Test")
|
139
|
-
}.should change(
|
133
|
+
}.should change(Tracker, :count).by(1)
|
140
134
|
end
|
141
135
|
|
142
136
|
it "should not create a history track if changed attributes do not match tracked attributes" do
|
143
137
|
lambda {
|
144
138
|
@post.update_attributes(:rating => "untracked")
|
145
|
-
}.should change(
|
139
|
+
}.should change(Tracker, :count).by(0)
|
146
140
|
end
|
147
141
|
|
148
142
|
it "should assign modified fields" do
|
@@ -232,7 +226,7 @@ describe Mongoid::History do
|
|
232
226
|
lambda {
|
233
227
|
@post.update_attributes(:title => "Test2")
|
234
228
|
@post.update_attributes(:title => "Test3")
|
235
|
-
}.should change(
|
229
|
+
}.should change(Tracker, :count).by(2)
|
236
230
|
end
|
237
231
|
|
238
232
|
it "should create a history track of version 2" do
|
@@ -394,10 +388,6 @@ describe Mongoid::History do
|
|
394
388
|
@tag_bar = @post.tags.create(:title => "bar")
|
395
389
|
end
|
396
390
|
|
397
|
-
after(:each) do
|
398
|
-
Thread.current[:mongoid_history_sweeper_controller] = nil
|
399
|
-
end
|
400
|
-
|
401
391
|
it "should have cascaded the creation callbacks and set timestamps" do
|
402
392
|
@tag_foo.created_at.should_not be_nil
|
403
393
|
@tag_foo.updated_at.should_not be_nil
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongoid::History::Tracker do
|
4
|
+
before :each do
|
5
|
+
class Model
|
6
|
+
include Mongoid::Document
|
7
|
+
include Mongoid::History::Trackable
|
8
|
+
|
9
|
+
field :name, type: String
|
10
|
+
belongs_to :user, inverse_of: :models
|
11
|
+
has_and_belongs_to_many :external_users, class_name: "User", inverse_of: :external_models
|
12
|
+
|
13
|
+
track_history :on => :name, # track title and body fields only, default is :all
|
14
|
+
:modifier_field => :modifier, # adds "referenced_in :modifier" to track who made the change, default is :modifier
|
15
|
+
:modifier_field_inverse_of => nil, # no inverse modifier relationship
|
16
|
+
:version_field => :version, # adds "field :version, :type => Integer" to track current version, default is :version
|
17
|
+
:track_create => false, # track document creation, default is false
|
18
|
+
:track_update => true, # track document updates, default is true
|
19
|
+
:track_destroy => false # track document destruction, default is false
|
20
|
+
end
|
21
|
+
|
22
|
+
class User
|
23
|
+
include Mongoid::Document
|
24
|
+
has_many :models, :dependent => :destroy, inverse_of: :user
|
25
|
+
has_and_belongs_to_many :external_model, class_name: "Model", inverse_of: :external_users
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should be possible to undo when having multiple relations to modifier class" do
|
30
|
+
user = User.new
|
31
|
+
user.save
|
32
|
+
|
33
|
+
model = Model.new
|
34
|
+
model.name = "Foo"
|
35
|
+
model.user = user
|
36
|
+
model.save!
|
37
|
+
|
38
|
+
model.name = "Bar"
|
39
|
+
model.save!
|
40
|
+
|
41
|
+
model.undo! user
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
RSpec.configure do |config|
|
2
|
+
config.before :each do
|
3
|
+
class Tracker
|
4
|
+
include Mongoid::History::Tracker
|
5
|
+
end
|
6
|
+
Mongoid::History.tracker_class_name = "Tracker"
|
7
|
+
Mongoid::History.modifier_class_name = "User"
|
8
|
+
end
|
9
|
+
config.after :each do
|
10
|
+
Mongoid::History.tracker_class_name = nil
|
11
|
+
Mongoid::History.trackable_class_options = nil
|
12
|
+
Thread.current[:mongoid_history_sweeper_controller] = nil
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
data/spec/trackable_spec.rb
CHANGED
@@ -8,10 +8,6 @@ describe Mongoid::History::Trackable do
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
after :each do
|
12
|
-
Mongoid::History.trackable_class_options = nil
|
13
|
-
end
|
14
|
-
|
15
11
|
it "should have #track_history" do
|
16
12
|
MyModel.should respond_to :track_history
|
17
13
|
end
|
@@ -42,10 +38,6 @@ describe Mongoid::History::Trackable do
|
|
42
38
|
}
|
43
39
|
end
|
44
40
|
|
45
|
-
after :each do
|
46
|
-
Mongoid::History.trackable_class_options = nil
|
47
|
-
end
|
48
|
-
|
49
41
|
it "should have default options" do
|
50
42
|
Mongoid::History.trackable_class_options[:my_model].should == @expected_option
|
51
43
|
end
|
data/spec/tracker_spec.rb
CHANGED
@@ -1,17 +1,10 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
3
|
describe Mongoid::History::Tracker do
|
4
|
-
|
4
|
+
it "should set tracker_class_name when included" do
|
5
5
|
class MyTracker
|
6
6
|
include Mongoid::History::Tracker
|
7
7
|
end
|
8
|
-
end
|
9
|
-
|
10
|
-
after :each do
|
11
|
-
Mongoid::History.tracker_class_name = nil
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should set tracker_class_name when included" do
|
15
8
|
Mongoid::History.tracker_class_name.should == :my_tracker
|
16
9
|
end
|
17
10
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-history
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2013-01-24 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: easy_diff
|
@@ -35,7 +35,7 @@ dependencies:
|
|
35
35
|
requirements:
|
36
36
|
- - ~>
|
37
37
|
- !ruby/object:Gem::Version
|
38
|
-
version: 3.0
|
38
|
+
version: '3.0'
|
39
39
|
type: :runtime
|
40
40
|
prerelease: false
|
41
41
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,7 +43,23 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - ~>
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 3.0
|
46
|
+
version: '3.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: activesupport
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
47
63
|
description: ! "In frustration of Mongoid::Versioning, I created this plugin for tracking
|
48
64
|
historical changes for any document, including embedded ones. It achieves this by
|
49
65
|
storing all history tracks in a single collection that you define. (See Usage for
|
@@ -80,9 +96,11 @@ files:
|
|
80
96
|
- lib/mongoid/history/tracker.rb
|
81
97
|
- mongoid-history.gemspec
|
82
98
|
- spec/integration/integration_spec.rb
|
99
|
+
- spec/integration/multi_relation_spec.rb
|
83
100
|
- spec/spec_helper.rb
|
84
101
|
- spec/support/database_cleaner.rb
|
85
102
|
- spec/support/mongoid.rb
|
103
|
+
- spec/support/mongoid_history.rb
|
86
104
|
- spec/trackable_spec.rb
|
87
105
|
- spec/tracker_spec.rb
|
88
106
|
homepage: http://github.com/aq1018/mongoid-history
|
@@ -100,7 +118,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
100
118
|
version: '0'
|
101
119
|
segments:
|
102
120
|
- 0
|
103
|
-
hash: -
|
121
|
+
hash: -3042283399996028740
|
104
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
123
|
none: false
|
106
124
|
requirements:
|