call_logger 0.4.0 → 0.5.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
  SHA256:
3
- metadata.gz: a3a3d44a1224ca8b9853cc6946bbdd41c7f5555b52fd26200923171763ad26e9
4
- data.tar.gz: 36dc9907080ccacb3a3cd6da0311d17f6f4de1408ab7c90b4eeee31f7c4e37a5
3
+ metadata.gz: d6e801f833860f18014297b607e82c57aee7690df4d50d03a8a36933c8f6fed3
4
+ data.tar.gz: 3014e9a30a8e0bfdd2576b7a2f416f0bd2b89e21f610548d53924ee4fd527f19
5
5
  SHA512:
6
- metadata.gz: a233520174d5800c9b4f74d2cd002e7e1155d57381ca7bb0ab56a4ccae78f7e6a4aefee883e0f98bf3bcdc6f4c58200385cc2dad7cfe6ba01369760250db7def
7
- data.tar.gz: 3d44fb992a646ae941360b4a233edd4bf48e93f4573c55dba683a7dd8209bfc598df6164eb1c1623c09f9333e57ba1435619eeb46bbf506b59b4afc025a32d91
6
+ metadata.gz: fe4c591ddc244a7a4f099789e02c55db42b0471f0c0dff7508b6382cc68baf1f291ece56ed0583a2f98706cb93d4f14aa78945302d8f4ee1589129e50ed1d672
7
+ data.tar.gz: e14c310b304d4a30159bb019b9cf1ec1bf3f897cc1c51089bfeeff6dd0a2850e0ba2ea4ac2a6b99672ab88d11c7f702240f98b48dd8ec127635b9d73918243c7
data/.travis.yml CHANGED
@@ -1,5 +1,8 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.5.1
5
- before_install: gem install bundler -v 1.16.2
4
+ - 2.6.0
5
+ - 2.5.3
6
+ - 2.4.5
7
+ - jruby
8
+ before_install: gem install bundler
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- call_logger (0.4.0)
4
+ call_logger (0.5.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  A debugging tool that lets you log method usage.
4
4
 
5
+ [![Build status](https://travis-ci.org/mrzasa/call_logger.svg?branch=master)](https://travis-ci.org/mrzasa/call_logger)
6
+ [![Maintainability](https://api.codeclimate.com/v1/badges/55bd374e1cd20af702ed/maintainability)](https://codeclimate.com/github/mrzasa/call_logger/maintainability)
7
+
5
8
  ```
6
9
  class Calculator
7
10
  include CallLogger
@@ -22,7 +25,7 @@ end
22
25
  Calculator.new.times(3,4)
23
26
  # Calculator#times(3, 4)
24
27
  # Calculator#times => 6
25
- # => 7
28
+ # => 6
26
29
 
27
30
  Calculator.new.div(3,0)
28
31
  # Calculator#div(3, 0)
@@ -127,6 +130,39 @@ class Calculator
127
130
  end
128
131
  ```
129
132
 
133
+ ### Wrapping a block
134
+
135
+ You can wrap a block of code using `#log_block` (in instance methods) or `.log_block` (in class methods). Block parameters will not be logged though:
136
+
137
+ ```
138
+ class Calculator
139
+ include CallLogger
140
+
141
+ def times(a, b)
142
+ log_block('multiply')
143
+ a*b
144
+ end
145
+ end
146
+ end
147
+
148
+ Calculator.new.times(3,4)
149
+ # multiply
150
+ # multiply => 6
151
+ # => 6
152
+ ```
153
+
154
+ Block calls may be also logged without including `CallLogger` module with `CallLogger.log_block`:
155
+
156
+ ```
157
+ log_block('multiply')
158
+ a*b
159
+ end
160
+ Calculator.new.times(3,4)
161
+ # multiply
162
+ # multiply => 6
163
+ # => 6
164
+ ```
165
+
130
166
  ### Configuration
131
167
 
132
168
  There are two pluggable components: `Logger` and `Formatter`. `Formatter` preperes messages to be printed and `Logger` sents them to the
@@ -148,8 +184,8 @@ end
148
184
  ## TODO
149
185
 
150
186
  * [+] class methods
151
- * [] multiple method names
152
- * [] handle blocks
187
+ * [+] multiple method names
188
+ * [+] handle blocks
153
189
  * [] logging all methods defined in the class
154
190
  * [] doc: Rails integration
155
191
  * [] doc: API docs
@@ -0,0 +1,20 @@
1
+ module CallLogger
2
+ class CallWrapper
3
+ attr_reader :formatter, :logger
4
+
5
+ def initialize(formatter:, logger: )
6
+ @formatter = formatter
7
+ @logger = logger
8
+ end
9
+
10
+ def call(name, args)
11
+ logger.call(formatter.before(name, args))
12
+ result = yield
13
+ logger.call(formatter.after(name, result))
14
+ result
15
+ rescue StandardError => e
16
+ logger.call(formatter.error(name, e))
17
+ raise
18
+ end
19
+ end
20
+ end
@@ -1,20 +1,49 @@
1
1
  module CallLogger
2
2
  class MethodWrapper
3
- attr_reader :formatter, :logger
3
+ attr_reader :extended_class, :owner_class
4
4
 
5
- def initialize(formatter:, logger: )
6
- @formatter = formatter
7
- @logger = logger
5
+ def initialize(extended_class, owner_class)
6
+ @extended_class = extended_class
7
+ @owner_class = owner_class
8
8
  end
9
9
 
10
- def call(method, args)
11
- logger.call(formatter.before(method, args))
12
- result = yield
13
- logger.call(formatter.after(method, result))
14
- result
15
- rescue StandardError => e
16
- logger.call(formatter.error(method, e))
17
- raise
10
+ def wrap_single(method)
11
+ owner = @owner_class
12
+ sep = separator
13
+ extended_class.alias_method "#{method}_without_log", method
14
+ extended_class.define_method method do |*args|
15
+ owner.do_log("#{owner}#{sep}#{method}", args) do
16
+ send("#{method}_without_log", *args)
17
+ end
18
+ end
19
+ end
20
+
21
+ def wrap_multiple(methods)
22
+ extended_class.prepend(build_module(methods))
23
+ end
24
+
25
+ private
26
+
27
+ def separator
28
+ if extended_class.singleton_class?
29
+ '.'
30
+ else
31
+ '#'
32
+ end
33
+ end
34
+
35
+ def build_module(methods)
36
+ owner = @owner_class
37
+ sep = separator
38
+ Module.new do
39
+ methods.each do |method|
40
+ define_method method do |*args|
41
+ owner.do_log("#{owner}#{sep}#{method}", args) do
42
+ super(*args)
43
+ end
44
+ end
45
+ end
46
+ end
18
47
  end
19
48
  end
20
49
  end
@@ -1,3 +1,3 @@
1
1
  module CallLogger
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
data/lib/call_logger.rb CHANGED
@@ -3,8 +3,8 @@ require "call_logger/version"
3
3
  require 'call_logger/formatter'
4
4
  require 'call_logger/logger'
5
5
  require 'call_logger/configuration'
6
+ require 'call_logger/call_wrapper'
6
7
  require 'call_logger/method_wrapper'
7
- require 'call_logger/method_wrapper_builder'
8
8
 
9
9
  module CallLogger
10
10
  def self.included(base)
@@ -21,6 +21,18 @@ module CallLogger
21
21
  end
22
22
  configure # set defaults
23
23
 
24
+ def log_block(name, &block)
25
+ self.class.log_block(name, &block)
26
+ end
27
+
28
+ def self.log_block(name, &block)
29
+ logger = configuration.logger
30
+ formatter = configuration.formatter
31
+ call_wrapper = CallWrapper.new(
32
+ logger: logger, formatter: formatter
33
+ )
34
+ call_wrapper.call(name, [], &block)
35
+ end
24
36
 
25
37
  module ClassMethods
26
38
  def log(*methods)
@@ -31,22 +43,26 @@ module CallLogger
31
43
  wrap_log(singleton_class, methods)
32
44
  end
33
45
 
46
+ def log_block(name, &block)
47
+ do_log(name, [], &block)
48
+ end
49
+
34
50
  def wrap_log(owner, methods)
35
- builder = MethodWrapperBuilder.new(owner, self)
51
+ wrapper = MethodWrapper.new(owner, self)
36
52
  if methods.size == 1 && owner.respond_to?(methods.first)
37
- builder.wrap_single(methods.first)
53
+ wrapper.wrap_single(methods.first)
38
54
  else
39
- builder.wrap_multi(methods)
55
+ wrapper.wrap_multiple(methods)
40
56
  end
41
57
  end
42
58
 
43
- def do_log(method, args, &block)
59
+ def do_log(name, args, &block)
44
60
  logger = ::CallLogger.configuration.logger
45
61
  formatter = ::CallLogger.configuration.formatter
46
- method_wrapper = ::CallLogger::MethodWrapper.new(
62
+ call_wrapper = CallWrapper.new(
47
63
  logger: logger, formatter: formatter
48
64
  )
49
- method_wrapper.call(method, args, &block)
65
+ call_wrapper.call(name, args, &block)
50
66
  end
51
67
  end
52
68
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: call_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Rzasa
@@ -99,11 +99,11 @@ files:
99
99
  - bin/setup
100
100
  - call_logger.gemspec
101
101
  - lib/call_logger.rb
102
+ - lib/call_logger/call_wrapper.rb
102
103
  - lib/call_logger/configuration.rb
103
104
  - lib/call_logger/formatter.rb
104
105
  - lib/call_logger/logger.rb
105
106
  - lib/call_logger/method_wrapper.rb
106
- - lib/call_logger/method_wrapper_builder.rb
107
107
  - lib/call_logger/version.rb
108
108
  homepage: https://github.com/mrzasa/call_logger
109
109
  licenses:
@@ -1,49 +0,0 @@
1
- module CallLogger
2
- class MethodWrapperBuilder
3
- attr_reader :extended_class, :owner_class
4
-
5
- def initialize(extended_class, owner_class)
6
- @extended_class = extended_class
7
- @owner_class = owner_class
8
- end
9
-
10
- def wrap_single(method)
11
- owner = @owner_class
12
- sep = separator
13
- extended_class.alias_method "#{method}_without_log", method
14
- extended_class.define_method method do |*args|
15
- owner.do_log("#{owner}#{sep}#{method}", args) do
16
- send("#{method}_without_log", *args)
17
- end
18
- end
19
- end
20
-
21
- def wrap_multi(methods)
22
- extended_class.prepend(build_module(methods))
23
- end
24
-
25
- private
26
-
27
- def separator
28
- if extended_class.singleton_class?
29
- '.'
30
- else
31
- '#'
32
- end
33
- end
34
-
35
- def build_module(methods)
36
- owner = @owner_class
37
- sep = separator
38
- Module.new do
39
- methods.each do |method|
40
- define_method method do |*args|
41
- owner.do_log("#{owner}#{sep}#{method}", args) do
42
- super(*args)
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
49
- end