action_tracer 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +2 -29
- data/lib/action_tracer.rb +1 -1
- data/lib/action_tracer/action_tracer.rb +0 -21
- data/lib/action_tracer/filters.rb +4 -3
- data/lib/action_tracer/monkey_patches/active_support/callbacks.rb +27 -0
- data/lib/action_tracer/railtie.rb +2 -0
- data/lib/action_tracer/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 833bc9f0ef13dc38365b9fed4b4ec1e6d31e3836ae07a44f366e2eb4d198e2d1
|
4
|
+
data.tar.gz: ae5c7acf603370367d3f77bd7999cfdc51ddce60a886951c4f3b05ca2c4ad442
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a8db105412a32d90e32e5f76947b8740dbc0dbdeebca1981304e1d09bd6922778a02f72e6d62c341df003eef120230bd7d0530b1eb8c797ee4c26d78d8fcc43
|
7
|
+
data.tar.gz: a1a9685cb4d7e8c3fad3560dd645c0ac7044ec3c1824f9a7abe75d4b0b123d905ea4713344231fef1a0ce78cbb5ac121fac22bbf6e92a939868a89e750102a73
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -15,31 +15,7 @@ Support for Rails application with ActiveController::API is comming soon.
|
|
15
15
|
|
16
16
|
## Usage
|
17
17
|
|
18
|
-
Run rails server or run rspec
|
19
|
-
|
20
|
-
```bash
|
21
|
-
$ ACTION_TRACER=1 rails server
|
22
|
-
```
|
23
|
-
|
24
|
-
You can also run rspec for your request specs.
|
25
|
-
|
26
|
-
```bash
|
27
|
-
$ ACTION_TRACER=1 rspec
|
28
|
-
```
|
29
|
-
|
30
|
-
If you use docker-compose, pass environment variable:
|
31
|
-
|
32
|
-
```yml
|
33
|
-
version: 3
|
34
|
-
services:
|
35
|
-
web:
|
36
|
-
build: .
|
37
|
-
command: bundle exec rails s -p 3000
|
38
|
-
environment:
|
39
|
-
ACTION_TRACER: 1
|
40
|
-
volumes:
|
41
|
-
# ...
|
42
|
-
```
|
18
|
+
Run rails server or run rspec and check `log/action_tracer.log`.
|
43
19
|
|
44
20
|
### Example
|
45
21
|
|
@@ -78,7 +54,7 @@ private
|
|
78
54
|
end
|
79
55
|
```
|
80
56
|
|
81
|
-
When you run rails server
|
57
|
+
When you run rails server and access `/awesome` (action is `#index`),
|
82
58
|
it will put logs for `log/action_tracer.log` like this:
|
83
59
|
|
84
60
|
```log
|
@@ -124,9 +100,6 @@ We can't recgnize the filter is actually executed or not.
|
|
124
100
|
## CommingFeatures
|
125
101
|
|
126
102
|
- Support for Rails application with ActiveController::API
|
127
|
-
- Add non-checking mode
|
128
|
-
- Memorizing filters are applied or not is very costly.
|
129
|
-
Add non-checking mode filters are actually applied or not.
|
130
103
|
- Log rotate
|
131
104
|
|
132
105
|
## Contributing
|
data/lib/action_tracer.rb
CHANGED
@@ -5,9 +5,7 @@ module ActionTracer
|
|
5
5
|
|
6
6
|
class << self
|
7
7
|
def log(controller)
|
8
|
-
filter_collector.enable
|
9
8
|
result = yield
|
10
|
-
filter_collector.disable
|
11
9
|
Filters.build(controller).print
|
12
10
|
applied_filters.clear
|
13
11
|
ActionTracer.logger.info ""
|
@@ -15,25 +13,6 @@ module ActionTracer
|
|
15
13
|
result
|
16
14
|
end
|
17
15
|
|
18
|
-
def filter_collector
|
19
|
-
@filter_collector ||= TracePoint.new(:return) do |tp|
|
20
|
-
# NOTE: ActiveSupport::Callbacks::CallTemplate is a private class
|
21
|
-
if tp.method_id == :expand && tp.defined_class == ActiveSupport::Callbacks::CallTemplate
|
22
|
-
if tp.return_value&.first.is_a? ActionController::Base
|
23
|
-
# target, block, method, *arguments = tp.return_value
|
24
|
-
case tp.return_value[2]
|
25
|
-
when :instance_exec # filter is a proc
|
26
|
-
applied_filters << tp.return_value[1]
|
27
|
-
when String # filter is an object
|
28
|
-
applied_filters << tp.return_value[1]
|
29
|
-
when Symbol # filter is a method
|
30
|
-
applied_filters << tp.return_value[2]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
16
|
def applied_filters
|
38
17
|
@applied_filters ||= []
|
39
18
|
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module ActionTracer
|
4
|
+
APPLIED = { true => "APPLIED", false => "NO_APPLIED", unrecognized: "UNRECOGNIZED", action: "ACTION" }.freeze
|
5
|
+
|
4
6
|
class Filter
|
5
|
-
APPLIED = { true => "APPLIED", false => "NO_APPLIED" }.freeze
|
6
7
|
PROC = :Proc
|
7
8
|
attr_reader :applied
|
8
9
|
|
@@ -16,7 +17,7 @@ module ActionTracer
|
|
16
17
|
if @method.respond_to? :source_location
|
17
18
|
[APPLIED[@applied], @filter, *@method.source_location]
|
18
19
|
else
|
19
|
-
[
|
20
|
+
[APPLIED[:unrecognized], @method]
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
@@ -42,7 +43,7 @@ module ActionTracer
|
|
42
43
|
|
43
44
|
def print
|
44
45
|
invoked_before.map(&:to_a).each { |filter| ActionTracer.logger.info filter }
|
45
|
-
ActionTracer.logger.info [
|
46
|
+
ActionTracer.logger.info [APPLIED[:action], @action.name, *@action.source_location]
|
46
47
|
invoked_after.map(&:to_a).reverse_each { |filter| ActionTracer.logger.info filter }
|
47
48
|
end
|
48
49
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActionTracer
|
4
|
+
module MonkeyPatches
|
5
|
+
module ActiveSupport
|
6
|
+
module Callbacks
|
7
|
+
module CallTemplate
|
8
|
+
def expand(*)
|
9
|
+
target, block, method, *arguments = super
|
10
|
+
if target.is_a? ActionController::Base
|
11
|
+
case method
|
12
|
+
when :instance_exec # filter is a proc
|
13
|
+
ActionTracer.applied_filters << block
|
14
|
+
when String # filter is an object
|
15
|
+
ActionTracer.applied_filters << block
|
16
|
+
when Symbol # filter is a method
|
17
|
+
ActionTracer.applied_filters << method
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
[target, block, method, *arguments]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -22,6 +22,8 @@ module ActionTracer
|
|
22
22
|
class Railtie < ::Rails::Railtie
|
23
23
|
initializer "action_tracer" do
|
24
24
|
ActiveSupport.on_load(:action_controller) do
|
25
|
+
require "action_tracer/monkey_patches/active_support/callbacks"
|
26
|
+
::ActiveSupport::Callbacks::CallTemplate.prepend ActionTracer::MonkeyPatches::ActiveSupport::Callbacks::CallTemplate
|
25
27
|
require "action_tracer/monkey_patches/abstract_controller/callbacks"
|
26
28
|
::ActionController::Base.prepend ActionTracer::MonkeyPatches::AbstractController::Callbacks
|
27
29
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: action_tracer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- makicamel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- lib/action_tracer/filters.rb
|
107
107
|
- lib/action_tracer/logger.rb
|
108
108
|
- lib/action_tracer/monkey_patches/abstract_controller/callbacks.rb
|
109
|
+
- lib/action_tracer/monkey_patches/active_support/callbacks.rb
|
109
110
|
- lib/action_tracer/railtie.rb
|
110
111
|
- lib/action_tracer/version.rb
|
111
112
|
homepage: https://github.com/makicamel/action_tracer
|