trackzor 0.1.2 → 0.1.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/Rakefile +1 -1
- data/lib/trackzor.rb +55 -21
- data/trackzor.gemspec +2 -2
- metadata +2 -2
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
4
|
|
5
|
-
Echoe.new('trackzor', '0.1.
|
5
|
+
Echoe.new('trackzor', '0.1.3') do |gem|
|
6
6
|
gem.description = "Track ATTR_updated_at and ATTR_updated_by"
|
7
7
|
gem.url = "http://github.com/corneldm/trackzor"
|
8
8
|
gem.author = "David Cornelius"
|
data/lib/trackzor.rb
CHANGED
@@ -5,47 +5,81 @@ module Trackzor
|
|
5
5
|
|
6
6
|
module ClassMethods
|
7
7
|
def trackzored(options = {})
|
8
|
+
class_inheritable_reader :trackzor_exempt_columns
|
9
|
+
|
8
10
|
if options[:only]
|
9
11
|
except = self.column_names - options[:only].flatten.map(&:to_s)
|
10
12
|
else
|
11
13
|
except = [self.primary_key, inheritance_column, 'lock_version', 'created_at', 'updated_at']
|
12
14
|
except |= Array(options[:except]).collect(&:to_s) if options[:except]
|
13
15
|
end
|
14
|
-
|
16
|
+
write_inheritable_attribute :trackzor_exempt_columns, except
|
15
17
|
aaa_present = self.respond_to?(:non_audited_columns)
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
19
|
+
# create ATTR_source associations
|
20
|
+
(self.column_names - self.trackzor_exempt_columns).select{|column| column =~ /(_updated_by|_updated_at)$/ }.each do |col|
|
21
|
+
if col =~ /_updated_by$/
|
22
|
+
belongs_to col.sub(/_updated_by$/, '_source').to_sym, :class_name => 'User', :foreign_key => col
|
20
23
|
end
|
21
|
-
|
22
24
|
self.non_audited_columns << col if aaa_present
|
23
25
|
end
|
24
26
|
|
25
|
-
validate
|
26
|
-
user = Thread.current[:trackzor_user] || Thread.current[:acts_as_audited_user]
|
27
|
+
validate :trackzor_assign_and_validate
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
user_association = "#{attr}_source"
|
29
|
+
include Trackzor::InstanceMethods
|
30
|
+
end
|
31
|
+
end # ClassMethods
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
module InstanceMethods
|
34
|
+
def trackzor_assign_and_validate
|
35
|
+
user = Thread.current[:trackzor_user] || Thread.current[:acts_as_audited_user]
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
self.changes.keys.each do |attr|
|
38
|
+
unless self.trackzor_exempt_columns.include?(attr)
|
39
|
+
time_column = "#{attr}_updated_at"
|
40
|
+
user_association = "#{attr}_source"
|
41
|
+
|
42
|
+
if self.respond_to?(time_column.to_sym)
|
43
|
+
self.send("#{time_column}=".to_sym, Time.now)
|
44
|
+
end
|
45
|
+
|
46
|
+
if self.respond_to?(user_association.to_sym)
|
47
|
+
if user
|
48
|
+
self.send("#{user_association}=".to_sym, user)
|
49
|
+
else
|
50
|
+
self.errors.add("#{attr}_updated_by", "requires Trackzor user to be set")
|
43
51
|
end
|
44
52
|
end
|
45
53
|
end
|
46
54
|
end
|
47
55
|
end
|
48
|
-
|
56
|
+
|
57
|
+
# force update of multiple attributes
|
58
|
+
def will_update_attributes!(new_attributes, guard_protected_attributes = true)
|
59
|
+
return if new_attributes.nil?
|
60
|
+
attributes = new_attributes.dup
|
61
|
+
attributes.stringify_keys!
|
62
|
+
|
63
|
+
multi_parameter_attributes = []
|
64
|
+
attributes = remove_attributes_protected_from_mass_assignment(attributes) if guard_protected_attributes
|
65
|
+
|
66
|
+
attributes.each do |k, v|
|
67
|
+
if k.include?("(")
|
68
|
+
multi_parameter_attributes << [ k, v ]
|
69
|
+
else
|
70
|
+
if respond_to?("#{k}=")
|
71
|
+
send("#{k}=", v)
|
72
|
+
send("#{k}_will_change!")
|
73
|
+
else
|
74
|
+
raise "unknown attribute: #{k}"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
assign_multiparameter_attributes(multi_parameter_attributes)
|
80
|
+
save!
|
81
|
+
end
|
82
|
+
end # InstanceMethods
|
49
83
|
|
50
84
|
# All X attribute changes where X_updated_by exists will be recorded as made by +user+.
|
51
85
|
def self.as_user(user, &block)
|
data/trackzor.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{trackzor}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.3"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["David Cornelius"]
|
9
|
-
s.date = %q{2010-01-
|
9
|
+
s.date = %q{2010-01-22}
|
10
10
|
s.description = %q{Track ATTR_updated_at and ATTR_updated_by}
|
11
11
|
s.email = %q{david.cornelius@bluefishwireless.net}
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "README.rdoc", "lib/trackzor.rb"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trackzor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Cornelius
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-22 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|