trackable 0.3.0 → 0.4.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.
- data/.gitignore +2 -0
- data/VERSION +1 -1
- data/lib/trackable/acts_as_trackable.rb +3 -3
- data/lib/trackable/event.rb +14 -15
- data/test/schema.rb +1 -0
- data/test/trackable_test.rb +13 -0
- metadata +4 -3
data/.gitignore
ADDED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
@@ -2,13 +2,13 @@ module ActsAsTrackable
|
|
2
2
|
def self.included(base)
|
3
3
|
base.send :extend, ClassMethods
|
4
4
|
base.instance_eval{
|
5
|
-
|
5
|
+
class_inheritable_accessor :eventable_options
|
6
6
|
}
|
7
7
|
end
|
8
8
|
|
9
9
|
module ClassMethods
|
10
10
|
|
11
|
-
def trackable(options)
|
11
|
+
def trackable(options={})
|
12
12
|
instance_eval{
|
13
13
|
self.eventable_options = options
|
14
14
|
}
|
@@ -20,7 +20,7 @@ module ActsAsTrackable
|
|
20
20
|
|
21
21
|
module InstanceMethods
|
22
22
|
def record_events
|
23
|
-
active_keys = changes.keys.reject{ |key| %w{id created_at updated_at}.include?(key)}
|
23
|
+
active_keys = changes.keys.reject{ |key| %w{id created_at created_on updated_at updated_on}.include?(key)}
|
24
24
|
active_keys.map do |key|
|
25
25
|
old_val, new_val = changes[key]
|
26
26
|
attrs = Event.attributes_from(self, key, old_val, new_val)
|
data/lib/trackable/event.rb
CHANGED
@@ -1,26 +1,25 @@
|
|
1
1
|
class Event < ActiveRecord::Base
|
2
2
|
|
3
3
|
def self.attributes_from(model, key, old_val, new_val)
|
4
|
-
return if old_val.blank? && new_val.blank? #not something we need to track.
|
4
|
+
return if old_val.blank? && new_val.blank? # not something we need to track.
|
5
5
|
eventable_options = model.class.eventable_options
|
6
|
-
return if
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
elsif
|
18
|
-
reference = key[0..-4].to_sym
|
6
|
+
return if Array(eventable_options[:exclude]).include?(key.to_sym)
|
7
|
+
|
8
|
+
events = eventable_options[:events]
|
9
|
+
attr_options = events[key.to_sym] if events
|
10
|
+
reference = key.ends_with?("_id") ? key[0..-4].to_sym : key.to_sym
|
11
|
+
association = model.class.reflect_on_association(reference)
|
12
|
+
|
13
|
+
message = if attr_options && attr_options[new_val]
|
14
|
+
attr_options[new_val]
|
15
|
+
elsif attr_options && msg_proc = attr_options[:message]
|
16
|
+
association ? msg_proc.call(model.send(reference).to_s) : msg_proc.call(new_val)
|
17
|
+
elsif association
|
19
18
|
"#{key.humanize} changed to #{model.send(reference).to_s}"
|
20
19
|
else
|
21
20
|
"#{key.humanize} changed to #{new_val}"
|
22
21
|
end
|
23
|
-
{:field_name => key, :message =>
|
22
|
+
{:field_name => key, :message => message, :whodunnit => Trackable.whodunnit}
|
24
23
|
end
|
25
24
|
|
26
25
|
end
|
data/test/schema.rb
CHANGED
data/test/trackable_test.rb
CHANGED
@@ -134,5 +134,18 @@ class TrackableTest < Test::Unit::TestCase
|
|
134
134
|
foo.update_attribute(:do_not_track, "Untracked")
|
135
135
|
assert_equal 0, foo.events.size
|
136
136
|
end
|
137
|
+
|
138
|
+
def test_checks_for_associations_when_creating_message
|
139
|
+
foo = Foo.create
|
140
|
+
assert_nothing_raised { foo.update_attribute(:not_association_id, 1) }
|
141
|
+
assert_equal "Not association changed to 1", foo.events.first.message
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_dropping_trackable_on_model_works
|
145
|
+
assert_nothing_raised { Bar.trackable }
|
146
|
+
bar = Bar.create
|
147
|
+
bar.update_attribute(:name, "Megatron")
|
148
|
+
assert_equal "Name changed to Megatron", bar.events.first.message
|
149
|
+
end
|
137
150
|
|
138
151
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 4
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- bigfleet
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-05-06 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -38,6 +38,7 @@ extensions: []
|
|
38
38
|
extra_rdoc_files:
|
39
39
|
- README.textile
|
40
40
|
files:
|
41
|
+
- .gitignore
|
41
42
|
- MIT-LICENSE
|
42
43
|
- README.textile
|
43
44
|
- Rakefile
|