call_logger 0.3.0 → 0.4.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: 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: