call_logger 0.3.0 → 0.4.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: 1be10df846b98a0cc41e280cb479f001e13395f9b29ccf95957d8e6972ec488b
4
- data.tar.gz: e4fa1c60c89dd8a1527569b5d0bca309495fd68d95d0439c3abdf065ee6ce572
3
+ metadata.gz: a3a3d44a1224ca8b9853cc6946bbdd41c7f5555b52fd26200923171763ad26e9
4
+ data.tar.gz: 36dc9907080ccacb3a3cd6da0311d17f6f4de1408ab7c90b4eeee31f7c4e37a5
5
5
  SHA512:
6
- metadata.gz: dc4ea0468e82e0db6237a116a3c5a7956cc76a4049769d814f728cb709784077a8494e2daaebedc22b987707045ecddf276c7ceeb007f6548513dd5a4e481bd5
7
- data.tar.gz: a339bee163ba14de107ce8e24f64667ba56ad0d4260800a0368f9777485fae39426c77710dc4b75e61b6cfb58a633c78fbf3fa2dc3f11f9d6e4f2516feeabb14
6
+ metadata.gz: a233520174d5800c9b4f74d2cd002e7e1155d57381ca7bb0ab56a4ccae78f7e6a4aefee883e0f98bf3bcdc6f4c58200385cc2dad7cfe6ba01369760250db7def
7
+ data.tar.gz: 3d44fb992a646ae941360b4a233edd4bf48e93f4573c55dba683a7dd8209bfc598df6164eb1c1623c09f9333e57ba1435619eeb46bbf506b59b4afc025a32d91
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- call_logger (0.3.0)
4
+ call_logger (0.4.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -52,6 +52,8 @@ Or install it yourself as:
52
52
 
53
53
  ## Usage
54
54
 
55
+ ### Wrapping a single method
56
+
55
57
  Include it to a class being debugged and the prepend a method definition with `log`:
56
58
 
57
59
  ```
@@ -89,7 +91,41 @@ class Calculator
89
91
  end
90
92
  end
91
93
  ```
94
+ ### Wrapping multiple methods
95
+
96
+ You can also pass multiple method names to `.log` and `.log_class` to wrap them all:
97
+
98
+ ```
99
+ class Calculator
100
+ include CallLogger
101
+
102
+ log :times, :div
103
+
104
+ def times(a, b)
105
+ a*b
106
+ end
107
+
108
+ def div(a, b)
109
+ a/b
110
+ end
111
+ end
112
+ ```
113
+
114
+ ```
115
+ class Calculator
116
+ include CallLogger
117
+
118
+ log_class :times, :div
92
119
 
120
+ def self.times(a, b)
121
+ a*b
122
+ end
123
+
124
+ def self.div(a, b)
125
+ a/b
126
+ end
127
+ end
128
+ ```
93
129
 
94
130
  ### Configuration
95
131
 
data/lib/call_logger.rb CHANGED
@@ -3,7 +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_logger'
6
+ require 'call_logger/method_wrapper'
7
+ require 'call_logger/method_wrapper_builder'
7
8
 
8
9
  module CallLogger
9
10
  def self.included(base)
@@ -22,21 +23,20 @@ module CallLogger
22
23
 
23
24
 
24
25
  module ClassMethods
25
- def log(method)
26
- alias_method "#{method}_without_log", method
27
- define_method method do |*args|
28
- self.class.do_log("#{self.class}##{method}", args) do
29
- send("#{method}_without_log", *args)
30
- end
31
- end
26
+ def log(*methods)
27
+ wrap_log(self, methods)
28
+ end
29
+
30
+ def log_class(*methods)
31
+ wrap_log(singleton_class, methods)
32
32
  end
33
33
 
34
- def log_class(method)
35
- singleton_class.alias_method "#{method}_without_log", method
36
- singleton_class.define_method method do |*args|
37
- do_log("#{self}.#{method}", args) do
38
- send("#{method}_without_log", *args)
39
- end
34
+ def wrap_log(owner, methods)
35
+ builder = MethodWrapperBuilder.new(owner, self)
36
+ if methods.size == 1 && owner.respond_to?(methods.first)
37
+ builder.wrap_single(methods.first)
38
+ else
39
+ builder.wrap_multi(methods)
40
40
  end
41
41
  end
42
42
 
@@ -0,0 +1,49 @@
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
@@ -1,3 +1,3 @@
1
1
  module CallLogger
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: call_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maciej Rzasa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-29 00:00:00.000000000 Z
11
+ date: 2019-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -99,10 +99,11 @@ files:
99
99
  - bin/setup
100
100
  - call_logger.gemspec
101
101
  - lib/call_logger.rb
102
- - lib/call_logger/call_logger.rb
103
102
  - lib/call_logger/configuration.rb
104
103
  - lib/call_logger/formatter.rb
105
104
  - lib/call_logger/logger.rb
105
+ - lib/call_logger/method_wrapper.rb
106
+ - lib/call_logger/method_wrapper_builder.rb
106
107
  - lib/call_logger/version.rb
107
108
  homepage: https://github.com/mrzasa/call_logger
108
109
  licenses: