effective_logging 2.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/effective_logging/active_record_logger.rb +51 -19
- data/lib/effective_logging/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3201ea4f4d500abedd1361c0d1299fea65671f3
|
4
|
+
data.tar.gz: 30cf8d48ed9887a9d52f8338a63f45e71842e015
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f959e4b05e4cd53ee7a2718eb088506adc0b15a4fa7e88b723f8e9e877e28806f5583ef7bdb3fb06a5a65eb555489c86f80fff0c7345da855f7e73991e20882
|
7
|
+
data.tar.gz: c5a64a3e94683f3f0d2ba554b6babe4f7666307e48fdfa8d29c5c7f6eb3469f9506f9aa28c78b9ca86f2ea42050367dd11b9f80dec15afadc12481f68dba32f2
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module EffectiveLogging
|
2
2
|
class ActiveRecordLogger
|
3
|
-
attr_accessor :object, :resource, :logger, :depth, :include_associated, :include_nested, :options
|
3
|
+
attr_accessor :object, :resource, :logger, :depth, :include_associated, :include_nested, :log_parents, :options
|
4
4
|
|
5
5
|
BLANK = "''"
|
6
6
|
|
@@ -10,10 +10,11 @@ module EffectiveLogging
|
|
10
10
|
@object = object
|
11
11
|
@resource = Effective::Resource.new(object)
|
12
12
|
|
13
|
-
@logger = options.
|
14
|
-
@depth = options.
|
13
|
+
@logger = options.fetch(:logger, object)
|
14
|
+
@depth = options.fetch(:depth, 0)
|
15
15
|
@include_associated = options.fetch(:include_associated, true)
|
16
16
|
@include_nested = options.fetch(:include_nested, true)
|
17
|
+
@log_parents = options.fetch(:log_parents, true)
|
17
18
|
@options = options
|
18
19
|
|
19
20
|
raise ArgumentError.new('logger must respond to logged_changes') unless @logger.respond_to?(:logged_changes)
|
@@ -34,18 +35,18 @@ module EffectiveLogging
|
|
34
35
|
end
|
35
36
|
|
36
37
|
def destroyed!
|
37
|
-
log('Deleted',
|
38
|
+
log('Deleted', applicable(instance_attributes))
|
38
39
|
end
|
39
40
|
|
40
41
|
def created!
|
41
|
-
log('Created',
|
42
|
+
log('Created', applicable(instance_attributes))
|
42
43
|
end
|
43
44
|
|
44
45
|
def updated!
|
45
46
|
log_resource_changes!
|
46
47
|
log_nested_resources!
|
47
48
|
|
48
|
-
log('Updated',
|
49
|
+
(logged? && depth == 0) ? log('Updated', applicable(instance_attributes)) : true
|
49
50
|
end
|
50
51
|
|
51
52
|
def log_resource_changes!
|
@@ -62,7 +63,7 @@ module EffectiveLogging
|
|
62
63
|
object.log_changes_formatted_attribute(attribute)
|
63
64
|
end || attribute.titleize
|
64
65
|
|
65
|
-
log("#{attribute}: #{before.presence || BLANK} → #{after.presence || BLANK}",
|
66
|
+
log("#{attribute}: #{before.presence || BLANK} → #{after.presence || BLANK}", { attribute: attribute, before: before, after: after })
|
66
67
|
end
|
67
68
|
end
|
68
69
|
|
@@ -79,36 +80,67 @@ module EffectiveLogging
|
|
79
80
|
child_options = options.merge(logger: logger, depth: depth+1, prefix: "#{title} #{index} - #{child} - ", include_associated: include_associated, include_nested: include_nested)
|
80
81
|
child_options = child_options.merge(child.log_changes_options) if child.respond_to?(:log_changes_options)
|
81
82
|
|
82
|
-
@logged = true if
|
83
|
+
@logged = true if ActiveRecordLogger.new(child, child_options).execute!
|
83
84
|
end
|
84
85
|
end
|
85
86
|
end
|
86
87
|
|
87
|
-
|
88
|
-
|
89
|
-
def instance_attributes # effective_resources gem
|
90
|
-
resource.instance_attributes(include_associated: include_associated, include_nested: include_nested)
|
91
|
-
end
|
92
|
-
|
93
|
-
def log(message, details: {})
|
94
|
-
@logged = true
|
95
|
-
|
88
|
+
def log(message, details)
|
96
89
|
log = logger.logged_changes.build(
|
97
90
|
user: EffectiveLogging.current_user,
|
98
91
|
status: EffectiveLogging.log_changes_status,
|
99
92
|
message: "#{"\t" * depth}#{options[:prefix]}#{message}",
|
100
93
|
associated_to_s: (logger.to_s rescue nil),
|
101
|
-
details: details
|
94
|
+
details: (details.presence || {})
|
102
95
|
)
|
103
96
|
|
104
|
-
|
97
|
+
log_changes_to_parents(message, details) if depth == 0 && log_parents
|
98
|
+
|
99
|
+
@logged = log.save!
|
105
100
|
log
|
106
101
|
end
|
107
102
|
|
103
|
+
def log_changes_to_parents(message, details)
|
104
|
+
log_changes_parents.each do |parent|
|
105
|
+
title = object.class.name.to_s.singularize.titleize
|
106
|
+
parent_options = { logger: parent, prefix: "#{title} - #{object} - " }
|
107
|
+
ActiveRecordLogger.new(parent, parent_options).log(message, details)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
|
108
113
|
def logged?
|
109
114
|
@logged == true
|
110
115
|
end
|
111
116
|
|
117
|
+
def instance_attributes # effective_resources gem
|
118
|
+
resource.instance_attributes(include_associated: include_associated, include_nested: include_nested)
|
119
|
+
end
|
120
|
+
|
121
|
+
# A parent is a belongs_to that accepts_nested_attributes for this resource
|
122
|
+
def log_changes_parents
|
123
|
+
resource.belong_tos.map do |association|
|
124
|
+
parent_klass = (association.options[:polymorphic] ? object.public_send(association.name).class : association.klass)
|
125
|
+
|
126
|
+
# Skip if the parent doesn't log_changes
|
127
|
+
next unless parent_klass.respond_to?(:log_changes)
|
128
|
+
|
129
|
+
# Skip unless the parent accepts_nested_attributes
|
130
|
+
next unless Effective::Resource.new(parent_klass).nested_resources.find { |ass| ass.plural_name == resource.plural_name }
|
131
|
+
|
132
|
+
parent = object.public_send(association.name).presence
|
133
|
+
|
134
|
+
# Sanity check
|
135
|
+
next unless parent.respond_to?(:log_changes_options)
|
136
|
+
|
137
|
+
# Skip if the parent does not log its nested or associated items
|
138
|
+
next unless parent.log_changes_options[:include_nested] || parent.log_changes_options[:include_associated]
|
139
|
+
|
140
|
+
parent
|
141
|
+
end.compact
|
142
|
+
end
|
143
|
+
|
112
144
|
# TODO: Make this work better with nested objects
|
113
145
|
def applicable(attributes)
|
114
146
|
atts = if options[:only].present?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_logging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|