advisor 0.5.1 → 0.6.0

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