mongoid-history 0.2.2 → 0.2.3
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/VERSION +1 -1
- data/lib/mongoid/history/trackable.rb +2 -2
- data/mongoid-history.gemspec +3 -3
- data/spec/integration/integration_spec.rb +40 -2
- metadata +60 -20
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.2.
|
|
1
|
+
0.2.3
|
|
@@ -73,7 +73,7 @@ module Mongoid::History
|
|
|
73
73
|
def history_tracks
|
|
74
74
|
@history_tracks ||= Mongoid::History.tracker_class.where(:scope => history_trackable_options[:scope], :association_chain => association_hash)
|
|
75
75
|
end
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
# undo :from => 1, :to => 5
|
|
78
78
|
# undo 4
|
|
79
79
|
# undo :last => 10
|
|
@@ -140,7 +140,7 @@ module Mongoid::History
|
|
|
140
140
|
node._parent == node.send(meta.key)
|
|
141
141
|
end
|
|
142
142
|
|
|
143
|
-
inverse = node._parent.reflect_on_association(meta.inverse)
|
|
143
|
+
inverse = node._parent.reflect_on_association(meta.inverse) if meta
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
# if root node has no meta, and should use class name instead
|
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.2.
|
|
8
|
+
s.version = "0.2.3"
|
|
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 = "2012-04-
|
|
12
|
+
s.date = "2012-04-20"
|
|
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 = [
|
|
@@ -39,7 +39,7 @@ Gem::Specification.new do |s|
|
|
|
39
39
|
s.homepage = "http://github.com/aq1018/mongoid-history"
|
|
40
40
|
s.licenses = ["MIT"]
|
|
41
41
|
s.require_paths = ["lib"]
|
|
42
|
-
s.rubygems_version = "1.8.
|
|
42
|
+
s.rubygems_version = "1.8.19"
|
|
43
43
|
s.summary = "history tracking, auditing, undo, redo for mongoid"
|
|
44
44
|
|
|
45
45
|
if s.respond_to? :specification_version then
|
|
@@ -17,6 +17,10 @@ describe Mongoid::History do
|
|
|
17
17
|
|
|
18
18
|
embeds_many :comments
|
|
19
19
|
embeds_one :section
|
|
20
|
+
embeds_many :tags, :cascade_callbacks => true
|
|
21
|
+
|
|
22
|
+
accepts_nested_attributes_for :tags, :allow_destroy => true
|
|
23
|
+
|
|
20
24
|
track_history :on => [:title, :body], :track_destroy => true
|
|
21
25
|
end
|
|
22
26
|
|
|
@@ -50,6 +54,15 @@ describe Mongoid::History do
|
|
|
50
54
|
field :name
|
|
51
55
|
track_history :except => [:email]
|
|
52
56
|
end
|
|
57
|
+
|
|
58
|
+
class Tag
|
|
59
|
+
include Mongoid::Document
|
|
60
|
+
include Mongoid::Timestamps
|
|
61
|
+
include Mongoid::History::Trackable
|
|
62
|
+
|
|
63
|
+
field :title
|
|
64
|
+
track_history :on => [:title], :scope => :post, :track_create => true, :track_destroy => true
|
|
65
|
+
end
|
|
53
66
|
end
|
|
54
67
|
|
|
55
68
|
before :each do
|
|
@@ -114,7 +127,6 @@ describe Mongoid::History do
|
|
|
114
127
|
@post.destroy
|
|
115
128
|
@post.history_tracks.last.affected["title"].should == "Test"
|
|
116
129
|
end
|
|
117
|
-
|
|
118
130
|
end
|
|
119
131
|
|
|
120
132
|
describe "on update non-embedded" do
|
|
@@ -177,7 +189,7 @@ describe Mongoid::History do
|
|
|
177
189
|
it "should exclude defined options" do
|
|
178
190
|
@user.update_attributes(:name => "Aaron2", :email => "aaronsnewemail@randomemail.com")
|
|
179
191
|
@user.history_tracks.first.modified.should == {
|
|
180
|
-
|
|
192
|
+
"name" => "Aaron2"
|
|
181
193
|
}
|
|
182
194
|
end
|
|
183
195
|
end
|
|
@@ -346,6 +358,32 @@ describe Mongoid::History do
|
|
|
346
358
|
end
|
|
347
359
|
end
|
|
348
360
|
|
|
361
|
+
describe "embedded with cascading callbacks" do
|
|
362
|
+
before(:each) do
|
|
363
|
+
@tag_foo = @post.tags.create(:title => "foo", :modifier => @user)
|
|
364
|
+
@tag_bar = @post.tags.create(:title => "bar", :modifier => @user)
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
it "should have cascaded the creation callbacks and set timestamps" do
|
|
368
|
+
@tag_foo.created_at.should_not be_nil
|
|
369
|
+
@tag_foo.updated_at.should_not be_nil
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
it "should allow an update through the parent model" do
|
|
373
|
+
update_hash = { "post" => { "tags_attributes" => { "1234" => { "id" => @tag_bar.id, "title" => "baz" } } } }
|
|
374
|
+
@post.update_attributes(update_hash["post"])
|
|
375
|
+
@post.tags.last.title.should == "baz"
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
it "should be possible to destroy through parent model using canoncial _destroy macro" do
|
|
379
|
+
@post.tags.count.should == 2
|
|
380
|
+
update_hash = { "post" => { "tags_attributes" => { "1234" => { "id" => @tag_bar.id, "title" => "baz", "_destroy" => "true"} } } }
|
|
381
|
+
@post.update_attributes(update_hash["post"])
|
|
382
|
+
@post.tags.count.should == 1
|
|
383
|
+
@post.history_tracks.last.action.should == "destroy"
|
|
384
|
+
end
|
|
385
|
+
end
|
|
386
|
+
|
|
349
387
|
describe "non-embedded" do
|
|
350
388
|
it "should undo changes" do
|
|
351
389
|
@post.update_attributes(:title => "Test2")
|
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.2.
|
|
4
|
+
version: 0.2.3
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -10,11 +10,11 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2012-04-
|
|
13
|
+
date: 2012-04-20 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: easy_diff
|
|
17
|
-
requirement:
|
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
18
|
none: false
|
|
19
19
|
requirements:
|
|
20
20
|
- - ! '>='
|
|
@@ -22,10 +22,15 @@ dependencies:
|
|
|
22
22
|
version: '0'
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
|
-
version_requirements:
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
none: false
|
|
27
|
+
requirements:
|
|
28
|
+
- - ! '>='
|
|
29
|
+
- !ruby/object:Gem::Version
|
|
30
|
+
version: '0'
|
|
26
31
|
- !ruby/object:Gem::Dependency
|
|
27
32
|
name: mongoid
|
|
28
|
-
requirement:
|
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
34
|
none: false
|
|
30
35
|
requirements:
|
|
31
36
|
- - ! '>='
|
|
@@ -33,10 +38,15 @@ dependencies:
|
|
|
33
38
|
version: 2.0.0
|
|
34
39
|
type: :runtime
|
|
35
40
|
prerelease: false
|
|
36
|
-
version_requirements:
|
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
+
none: false
|
|
43
|
+
requirements:
|
|
44
|
+
- - ! '>='
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: 2.0.0
|
|
37
47
|
- !ruby/object:Gem::Dependency
|
|
38
48
|
name: bson_ext
|
|
39
|
-
requirement:
|
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
|
40
50
|
none: false
|
|
41
51
|
requirements:
|
|
42
52
|
- - ! '>='
|
|
@@ -44,10 +54,15 @@ dependencies:
|
|
|
44
54
|
version: '0'
|
|
45
55
|
type: :development
|
|
46
56
|
prerelease: false
|
|
47
|
-
version_requirements:
|
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
58
|
+
none: false
|
|
59
|
+
requirements:
|
|
60
|
+
- - ! '>='
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '0'
|
|
48
63
|
- !ruby/object:Gem::Dependency
|
|
49
64
|
name: rspec
|
|
50
|
-
requirement:
|
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
|
51
66
|
none: false
|
|
52
67
|
requirements:
|
|
53
68
|
- - ! '>='
|
|
@@ -55,10 +70,15 @@ dependencies:
|
|
|
55
70
|
version: '0'
|
|
56
71
|
type: :development
|
|
57
72
|
prerelease: false
|
|
58
|
-
version_requirements:
|
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
74
|
+
none: false
|
|
75
|
+
requirements:
|
|
76
|
+
- - ! '>='
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: '0'
|
|
59
79
|
- !ruby/object:Gem::Dependency
|
|
60
80
|
name: yard
|
|
61
|
-
requirement:
|
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
|
62
82
|
none: false
|
|
63
83
|
requirements:
|
|
64
84
|
- - ! '>='
|
|
@@ -66,10 +86,15 @@ dependencies:
|
|
|
66
86
|
version: '0'
|
|
67
87
|
type: :development
|
|
68
88
|
prerelease: false
|
|
69
|
-
version_requirements:
|
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
90
|
+
none: false
|
|
91
|
+
requirements:
|
|
92
|
+
- - ! '>='
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '0'
|
|
70
95
|
- !ruby/object:Gem::Dependency
|
|
71
96
|
name: bundler
|
|
72
|
-
requirement:
|
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
|
73
98
|
none: false
|
|
74
99
|
requirements:
|
|
75
100
|
- - ! '>='
|
|
@@ -77,10 +102,15 @@ dependencies:
|
|
|
77
102
|
version: 1.0.0
|
|
78
103
|
type: :development
|
|
79
104
|
prerelease: false
|
|
80
|
-
version_requirements:
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
none: false
|
|
107
|
+
requirements:
|
|
108
|
+
- - ! '>='
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: 1.0.0
|
|
81
111
|
- !ruby/object:Gem::Dependency
|
|
82
112
|
name: jeweler
|
|
83
|
-
requirement:
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
84
114
|
none: false
|
|
85
115
|
requirements:
|
|
86
116
|
- - ! '>='
|
|
@@ -88,10 +118,15 @@ dependencies:
|
|
|
88
118
|
version: '0'
|
|
89
119
|
type: :development
|
|
90
120
|
prerelease: false
|
|
91
|
-
version_requirements:
|
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
122
|
+
none: false
|
|
123
|
+
requirements:
|
|
124
|
+
- - ! '>='
|
|
125
|
+
- !ruby/object:Gem::Version
|
|
126
|
+
version: '0'
|
|
92
127
|
- !ruby/object:Gem::Dependency
|
|
93
128
|
name: database_cleaner
|
|
94
|
-
requirement:
|
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
|
95
130
|
none: false
|
|
96
131
|
requirements:
|
|
97
132
|
- - ! '>='
|
|
@@ -99,7 +134,12 @@ dependencies:
|
|
|
99
134
|
version: '0'
|
|
100
135
|
type: :development
|
|
101
136
|
prerelease: false
|
|
102
|
-
version_requirements:
|
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
138
|
+
none: false
|
|
139
|
+
requirements:
|
|
140
|
+
- - ! '>='
|
|
141
|
+
- !ruby/object:Gem::Version
|
|
142
|
+
version: '0'
|
|
103
143
|
description: ! "In frustration of Mongoid::Versioning, I created this plugin for tracking
|
|
104
144
|
historical changes for any document, including embedded ones. It achieves this by
|
|
105
145
|
storing all history tracks in a single collection that you define. (See Usage for
|
|
@@ -152,7 +192,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
152
192
|
version: '0'
|
|
153
193
|
segments:
|
|
154
194
|
- 0
|
|
155
|
-
hash:
|
|
195
|
+
hash: 4511174551660468698
|
|
156
196
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
197
|
none: false
|
|
158
198
|
requirements:
|
|
@@ -161,7 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
161
201
|
version: '0'
|
|
162
202
|
requirements: []
|
|
163
203
|
rubyforge_project:
|
|
164
|
-
rubygems_version: 1.8.
|
|
204
|
+
rubygems_version: 1.8.19
|
|
165
205
|
signing_key:
|
|
166
206
|
specification_version: 3
|
|
167
207
|
summary: history tracking, auditing, undo, redo for mongoid
|