advisor 0.5.1 → 0.6.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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/Gemfile.lock +3 -3
- data/bin/console +7 -0
- data/lib/advisor/advices/call_logger.rb +37 -2
- data/lib/advisor/version.rb +1 -1
- data/spec/advisor/advices/call_logger_spec.rb +26 -1
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb82aadaba5ad1eabdc2abf85341b1cce43b0af8
|
4
|
+
data.tar.gz: 54e6addf7315ec6f27bc75155fbe3fc394d5223d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5580f78d8832b51b5dc3afee89dd243f2e72f689a509361b83df1a89cd0b94ee1b725dd30f0f8c79635505edf5977f9e8f0822c404ea333e705d8b3eff5bee7e
|
7
|
+
data.tar.gz: 5638d1f84f884403f37c937d4b6162e7454d948b52cb4832fa444219a28f50a1b91aa86dfb3d96359951e363c11a20d8c09a0b37adb1b4eeccf1f55324257d6f
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.2.2
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
advisor (0.
|
4
|
+
advisor (0.6.0)
|
5
5
|
metriks
|
6
6
|
|
7
7
|
GEM
|
@@ -21,7 +21,7 @@ GEM
|
|
21
21
|
columnize (0.9.0)
|
22
22
|
debugger-linecache (1.2.0)
|
23
23
|
diff-lcs (1.2.5)
|
24
|
-
hitimes (1.2.
|
24
|
+
hitimes (1.2.4)
|
25
25
|
method_source (0.8.2)
|
26
26
|
metriks (0.9.9.7)
|
27
27
|
atomic (~> 1.0)
|
@@ -74,4 +74,4 @@ DEPENDENCIES
|
|
74
74
|
rubocop
|
75
75
|
|
76
76
|
BUNDLED WITH
|
77
|
-
1.
|
77
|
+
1.12.1
|
data/bin/console
ADDED
@@ -2,6 +2,28 @@ require 'logger'
|
|
2
2
|
|
3
3
|
module Advisor
|
4
4
|
module Advices
|
5
|
+
# A simple built-in logging advise
|
6
|
+
#
|
7
|
+
# == Examples
|
8
|
+
#
|
9
|
+
# class MyClass
|
10
|
+
# extend Advisor::Loggable
|
11
|
+
#
|
12
|
+
# log_calls_to(:simple)
|
13
|
+
# # [...]Called: MyClass#simple()
|
14
|
+
#
|
15
|
+
# log_calls_to(:with_result, result: true)
|
16
|
+
# # [...]Called: MyClass#with_result()
|
17
|
+
# # [...]Result: MyClass#with_result() => String: "bla"
|
18
|
+
#
|
19
|
+
# log_calls_to(:with_tag, tag: -> { "[id=#{id}]" }
|
20
|
+
# # [...][id=42]Called: MyClass#with_tag()
|
21
|
+
#
|
22
|
+
# log_calls_to(:with_specific_logger, logger: Rails.logger)
|
23
|
+
# log_calls_to(
|
24
|
+
# :with_backtrace_cleaner, backtrace_cleaner: CustomCleaner
|
25
|
+
# )
|
26
|
+
# end
|
5
27
|
class CallLogger
|
6
28
|
class << self
|
7
29
|
attr_accessor :backtrace_cleaner
|
@@ -18,9 +40,12 @@ module Advisor
|
|
18
40
|
@cleaner = opts[:backtrace_cleaner] || CallLogger.backtrace_cleaner
|
19
41
|
@logger = opts[:logger] || CallLogger.default_logger
|
20
42
|
@tag_proc = opts[:with] || -> {}
|
43
|
+
@log_result = opts[:result] || false
|
21
44
|
end
|
22
45
|
|
23
|
-
attr_reader
|
46
|
+
attr_reader(
|
47
|
+
:object, :method, :call_args, :logger, :tag_proc, :log_result, :cleaner
|
48
|
+
)
|
24
49
|
|
25
50
|
def self.applier_method
|
26
51
|
:log_calls_to
|
@@ -28,7 +53,7 @@ module Advisor
|
|
28
53
|
|
29
54
|
def call
|
30
55
|
logger.info(success_message)
|
31
|
-
yield
|
56
|
+
yield.tap(&result_message)
|
32
57
|
rescue exception_class => e
|
33
58
|
logger.error(failure_message(e))
|
34
59
|
raise
|
@@ -46,6 +71,16 @@ module Advisor
|
|
46
71
|
call_message('Failed: ', backtrace.join("\n"))
|
47
72
|
end
|
48
73
|
|
74
|
+
def result_message
|
75
|
+
lambda do |result|
|
76
|
+
return unless log_result
|
77
|
+
|
78
|
+
logger.info(
|
79
|
+
call_message('Result: ', " => #{result.class}: #{result.inspect}")
|
80
|
+
)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
49
84
|
def call_message(prefix, suffix = '')
|
50
85
|
"#{time}#{thread}#{id}#{custom_tag}#{prefix}\
|
51
86
|
#{klass}##{method}(#{arguments})\
|
data/lib/advisor/version.rb
CHANGED
@@ -4,7 +4,9 @@ module Advisor
|
|
4
4
|
module Advices
|
5
5
|
describe CallLogger do
|
6
6
|
subject(:advice) do
|
7
|
-
described_class.new(
|
7
|
+
described_class.new(
|
8
|
+
object, method, args, logger: logger, with: tag, result: result
|
9
|
+
)
|
8
10
|
end
|
9
11
|
|
10
12
|
let(:object) { OpenStruct.new(id: 42, x: 'y') }
|
@@ -12,6 +14,7 @@ module Advisor
|
|
12
14
|
let(:args) { ['the universe', 'and everything'] }
|
13
15
|
let(:logger) { instance_double(Logger) }
|
14
16
|
let(:tag) { -> { "[x=#{x}]" } }
|
17
|
+
let(:result) { true }
|
15
18
|
|
16
19
|
let(:block) { -> { :bla } }
|
17
20
|
|
@@ -23,6 +26,12 @@ module Advisor
|
|
23
26
|
Called: OpenStruct#the_meaning_of_life(\"the universe\", \"and everything\")"
|
24
27
|
end
|
25
28
|
|
29
|
+
let(:result_log_message) do
|
30
|
+
"[Time=#{Time.now}][Thread=#{Thread.current.object_id}][id=42][x=y]\
|
31
|
+
Result: OpenStruct#the_meaning_of_life(\"the universe\", \"and everything\") \
|
32
|
+
=> Symbol: :bla"
|
33
|
+
end
|
34
|
+
|
26
35
|
before do
|
27
36
|
allow(Time).to receive(:now).and_return(Time.now)
|
28
37
|
allow(logger).to receive(:info)
|
@@ -36,6 +45,12 @@ Called: OpenStruct#the_meaning_of_life(\"the universe\", \"and everything\")"
|
|
36
45
|
call
|
37
46
|
end
|
38
47
|
|
48
|
+
it do
|
49
|
+
expect(logger).to receive(:info).with(result_log_message)
|
50
|
+
|
51
|
+
call
|
52
|
+
end
|
53
|
+
|
39
54
|
context 'when yielding the block raises an error' do
|
40
55
|
let(:block) { -> () { fail 'deu ruim!' } }
|
41
56
|
|
@@ -100,6 +115,16 @@ Called: OpenStruct#the_meaning_of_life(\"the universe\", \"and everything\")"
|
|
100
115
|
call
|
101
116
|
end
|
102
117
|
end
|
118
|
+
|
119
|
+
context 'when it is not provided to log the result' do
|
120
|
+
let(:result) { false }
|
121
|
+
|
122
|
+
it do
|
123
|
+
expect(logger).not_to receive(:info).with(result_log_message)
|
124
|
+
|
125
|
+
call
|
126
|
+
end
|
127
|
+
end
|
103
128
|
end
|
104
129
|
end
|
105
130
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: advisor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Renan Ranelli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: metriks
|
@@ -111,7 +111,8 @@ dependencies:
|
|
111
111
|
description:
|
112
112
|
email:
|
113
113
|
- renanranelli@gmail.com
|
114
|
-
executables:
|
114
|
+
executables:
|
115
|
+
- console
|
115
116
|
extensions: []
|
116
117
|
extra_rdoc_files: []
|
117
118
|
files:
|
@@ -125,6 +126,7 @@ files:
|
|
125
126
|
- Rakefile
|
126
127
|
- Readme.org
|
127
128
|
- advisor.gemspec
|
129
|
+
- bin/console
|
128
130
|
- lib/advisor.rb
|
129
131
|
- lib/advisor/advices.rb
|
130
132
|
- lib/advisor/advices/call_logger.rb
|
@@ -157,9 +159,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
159
|
version: '0'
|
158
160
|
requirements: []
|
159
161
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.
|
162
|
+
rubygems_version: 2.4.5
|
161
163
|
signing_key:
|
162
164
|
specification_version: 4
|
163
165
|
summary: AOP with anonymous modules
|
164
166
|
test_files: []
|
165
|
-
has_rdoc:
|