@@ -2,30 +2,42 @@ module Logga
2
2
module ActiveRecord
3
3
extend ActiveSupport ::Concern
4
4
5
+ EXCLUDED_KEYS = [ :created_at , :updated_at , :log , :sent_photos_chaser_email , :sent_after_sales_emails ]
6
+ EXCLUDED_KEYS_SUFFIXES = [ :_id , :_filenames ]
7
+
8
+ included do
9
+ class_attribute :log_fields , instance_writer : false
10
+ self . log_fields = { }
11
+ end
12
+
5
13
class_methods do
6
- def add_log_entries_for ( *actions , to : :self )
14
+ def add_log_entries_for ( *actions , to : :self , fields : { } )
7
15
after_create :log_model_creation if actions . include? ( :create )
8
16
after_update :log_model_changes if actions . include? ( :update )
9
17
define_method ( :log_receiver ) { to == :self ? self : send ( to ) }
18
+ self . log_fields = fields
10
19
end
11
20
end
12
21
13
22
def log_model_creation
14
- body = "#{ self . class } created"
23
+ body_generator = -> ( record ) { default_creation_log_body ( record ) }
24
+ body = log_fields . fetch ( :created_at , body_generator ) . call ( self )
15
25
log_receiver . log_entries . create ( author_data . merge ( body : body ) )
16
26
end
17
27
18
28
def log_model_changes
19
- field_changes = changes . except ( :created_at , :updated_at , :log )
29
+ field_changes = changes . reject do |k , _ |
30
+ EXCLUDED_KEYS . include? ( k . to_sym ) ||
31
+ EXCLUDED_KEYS_SUFFIXES . any? { |suffix | k . to_s . end_with? ( suffix . to_s ) }
32
+ end
20
33
log_field_changes ( field_changes )
21
34
end
22
35
23
36
def log_field_changes ( changes )
24
- changes . each { |field , values | log_field_change ( field , *values ) }
25
- end
26
-
27
- def log_field_change ( field , old_value , new_value )
28
- body = "changed #{ field } from #{ old_value } to #{ new_value } "
37
+ body_generator = -> ( record , field , old_value , new_value ) { default_change_log_body ( record , field , old_value , new_value ) }
38
+ body = changes . inject ( [ ] ) do |body , ( field , ( old_value , new_value ) ) |
39
+ body << log_fields . fetch ( field . to_sym , body_generator ) . call ( self , field , old_value , new_value )
40
+ end . join ( '\n' )
29
41
log_receiver . log_entries . create ( author_data . merge ( body : body ) )
30
42
end
31
43
@@ -37,5 +49,16 @@ def author_data
37
49
author_name : data [ :name ]
38
50
}
39
51
end
52
+
53
+ def default_creation_log_body ( record )
54
+ [
55
+ "#{ record . class . name . demodulize } created" ,
56
+ ( "(#{ record . state } )" if record . try ( :state ) )
57
+ ] . compact . join ( ' ' )
58
+ end
59
+
60
+ def default_change_log_body ( record , field , old_value , new_value )
61
+ "#{ record . class . name . demodulize } #{ field } set to #{ new_value } "
62
+ end
40
63
end
41
- end
64
+ end
0 commit comments