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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6bd705ca8a6e531d27ba1f7477118d039fd8e93e
4
- data.tar.gz: f0372ed273abef5b744b0509c35d25887220081b
3
+ metadata.gz: bb82aadaba5ad1eabdc2abf85341b1cce43b0af8
4
+ data.tar.gz: 54e6addf7315ec6f27bc75155fbe3fc394d5223d
5
5
  SHA512:
6
- metadata.gz: d662f5d5c8270323bd8023c3f9f27b13fbe2fc7b6b0081a37d2975cf743d889b71336f2f61cc9859a7630ed489bbdfbd9f1db87711b5d6b9ef4b72dc354364f9
7
- data.tar.gz: 8d38aa47bcdad42014e600e9492dcde1c1c789f76c15fd357d793e10216f740a0935534d245bbdccfb397dbac5b54c04f6ecfca57a9dc7550f7545de8a64f828
6
+ metadata.gz: 5580f78d8832b51b5dc3afee89dd243f2e72f689a509361b83df1a89cd0b94ee1b725dd30f0f8c79635505edf5977f9e8f0822c404ea333e705d8b3eff5bee7e
7
+ data.tar.gz: 5638d1f84f884403f37c937d4b6162e7454d948b52cb4832fa444219a28f50a1b91aa86dfb3d96359951e363c11a20d8c09a0b37adb1b4eeccf1f55324257d6f
@@ -1 +1 @@
1
- 2.1.5
1
+ 2.2.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- advisor (0.5.1)
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.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.10.6
77
+ 1.12.1
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'advisor'
5
+
6
+ require 'pry'
7
+ Pry.start
@@ -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 :object, :method, :call_args, :logger, :tag_proc, :cleaner
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})\
@@ -1,3 +1,3 @@
1
1
  module Advisor
2
- VERSION = '0.5.1'
2
+ VERSION = '0.6.0'
3
3
  end
@@ -4,7 +4,9 @@ module Advisor
4
4
  module Advices
5
5
  describe CallLogger do
6
6
  subject(:advice) do
7
- described_class.new(object, method, args, logger: logger, with: tag)
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.5.1
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: 2015-08-20 00:00:00.000000000 Z
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.2.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: