call_logger 0.4.0 → 0.5.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
  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