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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +36 -0
- data/lib/call_logger.rb +14 -14
- data/lib/call_logger/{call_logger.rb → method_wrapper.rb} +0 -0
- data/lib/call_logger/method_wrapper_builder.rb +49 -0
- data/lib/call_logger/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3a3d44a1224ca8b9853cc6946bbdd41c7f5555b52fd26200923171763ad26e9
|
4
|
+
data.tar.gz: 36dc9907080ccacb3a3cd6da0311d17f6f4de1408ab7c90b4eeee31f7c4e37a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a233520174d5800c9b4f74d2cd002e7e1155d57381ca7bb0ab56a4ccae78f7e6a4aefee883e0f98bf3bcdc6f4c58200385cc2dad7cfe6ba01369760250db7def
|
7
|
+
data.tar.gz: 3d44fb992a646ae941360b4a233edd4bf48e93f4573c55dba683a7dd8209bfc598df6164eb1c1623c09f9333e57ba1435619eeb46bbf506b59b4afc025a32d91
|
data/Gemfile.lock
CHANGED
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/
|
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(
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
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
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
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
|
|
File without changes
|
@@ -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
|
data/lib/call_logger/version.rb
CHANGED
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.
|
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:
|
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:
|