trackzor 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|