mongoid-history-patched 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/.document +5 -0
- data/.rspec +1 -0
- data/.travis.yml +10 -0
- data/Gemfile +13 -0
- data/LICENSE.txt +20 -0
- data/README.md +206 -0
- data/Rakefile +37 -0
- data/VERSION +1 -0
- data/lib/mongoid-history.rb +10 -0
- data/lib/mongoid/history.rb +13 -0
- data/lib/mongoid/history/sweeper.rb +44 -0
- data/lib/mongoid/history/trackable.rb +381 -0
- data/lib/mongoid/history/tracker.rb +154 -0
- data/mongoid-history.gemspec +78 -0
- data/spec/integration/integration_spec.rb +553 -0
- data/spec/spec_helper.rb +13 -0
- data/spec/trackable_spec.rb +121 -0
- data/spec/tracker_spec.rb +17 -0
- metadata +205 -0
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler/setup'
|
5
|
+
|
6
|
+
Bundler.require :default, :test
|
7
|
+
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each do |f|
|
9
|
+
require f
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'mongoid-history'
|
13
|
+
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Mongoid::History::Trackable do
|
4
|
+
before :each do
|
5
|
+
class MyModel
|
6
|
+
include Mongoid::Document
|
7
|
+
include Mongoid::History::Trackable
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
after :each do
|
12
|
+
Mongoid::History.trackable_class_options = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have #track_history" do
|
16
|
+
MyModel.should respond_to :track_history
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should append trackable_class_options ONLY when #track_history is called" do
|
20
|
+
Mongoid::History.trackable_class_options.should be_blank
|
21
|
+
MyModel.track_history
|
22
|
+
Mongoid::History.trackable_class_options.keys.should == [:my_model]
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#track_history" do
|
26
|
+
before :each do
|
27
|
+
class MyModel
|
28
|
+
include Mongoid::Document
|
29
|
+
include Mongoid::History::Trackable
|
30
|
+
track_history
|
31
|
+
end
|
32
|
+
|
33
|
+
@expected_option = {
|
34
|
+
:on => :all,
|
35
|
+
:modifier_field => :modifier,
|
36
|
+
:version_field => :version,
|
37
|
+
:scope => :my_model,
|
38
|
+
:except => ["created_at", "updated_at", "version", "modifier_id", "_id", "id"],
|
39
|
+
:track_create => false,
|
40
|
+
:track_update => true,
|
41
|
+
:track_destroy => false,
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
after :each do
|
46
|
+
Mongoid::History.trackable_class_options = nil
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should have default options" do
|
50
|
+
Mongoid::History.trackable_class_options[:my_model].should == @expected_option
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should define callback function #track_update" do
|
54
|
+
MyModel.new.private_methods.collect(&:to_sym).should include(:track_update)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should define callback function #track_create" do
|
58
|
+
MyModel.new.private_methods.collect(&:to_sym).should include(:track_create)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should define callback function #track_destroy" do
|
62
|
+
MyModel.new.private_methods.collect(&:to_sym).should include(:track_destroy)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should define #history_trackable_options" do
|
66
|
+
MyModel.history_trackable_options.should == @expected_option
|
67
|
+
end
|
68
|
+
|
69
|
+
context "sub-model" do
|
70
|
+
before :each do
|
71
|
+
class MySubModel < MyModel
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should have default options" do
|
76
|
+
Mongoid::History.trackable_class_options[:my_model].should == @expected_option
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should define #history_trackable_options" do
|
80
|
+
MySubModel.history_trackable_options.should == @expected_option
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "track_history" do
|
85
|
+
|
86
|
+
it "should be enabled on the current thread" do
|
87
|
+
MyModel.new.track_history?.should == true
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should be disabled within disable_tracking" do
|
91
|
+
MyModel.disable_tracking do
|
92
|
+
MyModel.new.track_history?.should == false
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should be rescued if an exception occurs" do
|
97
|
+
begin
|
98
|
+
MyModel.disable_tracking do
|
99
|
+
raise "exception"
|
100
|
+
end
|
101
|
+
rescue
|
102
|
+
end
|
103
|
+
MyModel.new.track_history?.should == true
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should be disabled only for the class that calls disable_tracking" do
|
107
|
+
class MyModel2
|
108
|
+
include Mongoid::Document
|
109
|
+
include Mongoid::History::Trackable
|
110
|
+
track_history
|
111
|
+
end
|
112
|
+
|
113
|
+
MyModel.disable_tracking do
|
114
|
+
MyModel2.new.track_history?.should == true
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Mongoid::History::Tracker do
|
4
|
+
before :each do
|
5
|
+
class MyTracker
|
6
|
+
include Mongoid::History::Tracker
|
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
|
+
Mongoid::History.tracker_class_name.should == :my_tracker
|
16
|
+
end
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,205 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongoid-history-patched
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Aaron Qian
|
9
|
+
- Justin Grimes
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-04-20 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: easy_diff
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: mongoid
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: 2.0.0
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 2.0.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bson_ext
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rspec
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: yard
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
type: :development
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: bundler
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 1.0.0
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.0.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: jeweler
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: database_cleaner
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ! '>='
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
type: :development
|
136
|
+
prerelease: false
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
description: ! "In frustration of Mongoid::Versioning, I created this plugin for tracking
|
144
|
+
historical changes for any document, including embedded ones. It achieves this by
|
145
|
+
storing all history tracks in a single collection that you define. (See Usage for
|
146
|
+
more details) Embedded documents are referenced by storing an association path,
|
147
|
+
which is an array of document_name and document_id fields starting from the top
|
148
|
+
most parent document and down to the embedded document that should track history.\n\n
|
149
|
+
\ This plugin implements multi-user undo, which allows users to undo any history
|
150
|
+
change in any order. Undoing a document also creates a new history track. This is
|
151
|
+
great for auditing and preventing vandalism, but it is probably not suitable for
|
152
|
+
use cases such as a wiki."
|
153
|
+
email:
|
154
|
+
- aq1018@gmail.com
|
155
|
+
- justin.mgrimes@gmail.com
|
156
|
+
executables: []
|
157
|
+
extensions: []
|
158
|
+
extra_rdoc_files:
|
159
|
+
- LICENSE.txt
|
160
|
+
- README.md
|
161
|
+
files:
|
162
|
+
- .document
|
163
|
+
- .rspec
|
164
|
+
- .travis.yml
|
165
|
+
- Gemfile
|
166
|
+
- LICENSE.txt
|
167
|
+
- README.md
|
168
|
+
- Rakefile
|
169
|
+
- VERSION
|
170
|
+
- lib/mongoid-history.rb
|
171
|
+
- lib/mongoid/history.rb
|
172
|
+
- lib/mongoid/history/sweeper.rb
|
173
|
+
- lib/mongoid/history/trackable.rb
|
174
|
+
- lib/mongoid/history/tracker.rb
|
175
|
+
- mongoid-history.gemspec
|
176
|
+
- spec/integration/integration_spec.rb
|
177
|
+
- spec/spec_helper.rb
|
178
|
+
- spec/trackable_spec.rb
|
179
|
+
- spec/tracker_spec.rb
|
180
|
+
homepage: http://github.com/aq1018/mongoid-history
|
181
|
+
licenses:
|
182
|
+
- MIT
|
183
|
+
post_install_message:
|
184
|
+
rdoc_options: []
|
185
|
+
require_paths:
|
186
|
+
- lib
|
187
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
188
|
+
none: false
|
189
|
+
requirements:
|
190
|
+
- - ! '>='
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: '0'
|
193
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
194
|
+
none: false
|
195
|
+
requirements:
|
196
|
+
- - ! '>='
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '0'
|
199
|
+
requirements: []
|
200
|
+
rubyforge_project:
|
201
|
+
rubygems_version: 1.8.24
|
202
|
+
signing_key:
|
203
|
+
specification_version: 3
|
204
|
+
summary: history tracking, auditing, undo, redo for mongoid
|
205
|
+
test_files: []
|