tapping_device 0.4.0 → 0.4.1

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: 86f08b96d9d7d45cc1f0292a69749e5e5d853167e54a1981a26ec2b3905e31bd
4
- data.tar.gz: 50a7e86833462d2392150182abb75d37bde739b04f582a56dc9438f26f34cbc9
3
+ metadata.gz: 65b116ba192b195aca0df0f0400e8d2b0617b221c620dcaaf8eab0f16e2d85fb
4
+ data.tar.gz: 0cb2b12d7329f5f770bd8d1522b8ab0d5f7c1787d142d06116cf83908e136f63
5
5
  SHA512:
6
- metadata.gz: 3620752c8c95e09ebd81891f73ed5d30f2ff0d6b09aba90f0c34267936d7cd01e517beef6ea61aa5648124ba6d84c221ed0a42ae21a035bf12a7eb4bbdb4cf7e
7
- data.tar.gz: 2fc5bd412fbab8e6cb33c28b12b89c7a403b4f481844bcca096838119887e3321fef37d21ad3374ac88c26b0c93efc56b59691000f8d62b067c8acf690e69075
6
+ metadata.gz: 7192f5957a150267f71b4fe88a9eabb45f0966d5fda933e2a050f8a52e823ae338e6a3e35f24ff6f3ccef9f3b96c8fca9df300b8e3b3c4e69d29964f5ebdaa91
7
+ data.tar.gz: 264dd2bd5c83c1f716d272179c296a03bdf7612d2415602174432817769fa8f069612af45c0f58da722a0e499fe06bc440d3f1810bcc1a810e8c238e27fd97c5
@@ -19,6 +19,7 @@ jobs:
19
19
  ruby-version: ${{ matrix.ruby_version }}
20
20
  - name: Install sqlite
21
21
  run: |
22
+ sudo apt-get update
22
23
  sudo apt-get install libsqlite3-dev
23
24
 
24
25
  - name: Build and test with Rails ${{ matrix.rails_version }}
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tapping_device (0.3.0)
4
+ tapping_device (0.4.1)
5
5
  activerecord (>= 5.2)
6
6
 
7
7
  GEM
@@ -47,7 +47,7 @@ GEM
47
47
  thread_safe (0.3.6)
48
48
  tzinfo (1.2.5)
49
49
  thread_safe (~> 0.1)
50
- zeitwerk (2.2.1)
50
+ zeitwerk (2.2.2)
51
51
 
52
52
  PLATFORMS
53
53
  ruby
data/README.md CHANGED
@@ -15,7 +15,8 @@ class PostsController < ApplicationController
15
15
  def show
16
16
  @post = Post.find(params[:id])
17
17
  tap_on!(@post) do |payload|
18
- puts "Method: #{payload[:method_name]} line: #{payload[:filepath]}:#{payload[:line_number]}"
18
+ # this equals to `"Method: :#{payload[:method_name]}, line: #{payload[:filepath]}:#{payload[:line_number]}"`
19
+ puts(payload.method_name_and_location)
19
20
  end
20
21
  end
21
22
  end
@@ -24,9 +25,9 @@ end
24
25
  And you can see these in log:
25
26
 
26
27
  ```
27
- Method: name line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:5
28
- Method: user_id line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:10
29
- Method: to_param line: /RUBY_PATH/gems/2.6.0/gems/actionpack-5.2.0/lib/action_dispatch/routing/route_set.rb:236
28
+ Method: :name, line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:5
29
+ Method: :user_id, line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:10
30
+ Method: :to_param, line: /RUBY_PATH/gems/2.6.0/gems/actionpack-5.2.0/lib/action_dispatch/routing/route_set.rb:236
30
31
  ```
31
32
 
32
33
 
@@ -36,16 +37,16 @@ Or you can use `tap_assoc!`. This is very useful for tracking potential n+1 quer
36
37
 
37
38
  ```ruby
38
39
  tap_assoc!(order) do |payload|
39
- puts "Assoc: #{payload[:method_name]} line: #{payload[:filepath]}:#{payload[:line_number]}"
40
+ puts(payload.method_name_and_location)
40
41
  end
41
42
  ```
42
43
 
43
44
  ```
44
- Assoc: payments line: /RUBY_PATH/gems/2.6.0/gems/jsonapi-resources-0.9.10/lib/jsonapi/resource.rb:124
45
- Assoc: line_items line: /MY_PROJECT/app/models/line_item_container_helpers.rb:44
46
- Assoc: effective_line_items line: /MY_PROJECT/app/models/line_item_container_helpers.rb:110
47
- Assoc: amending_orders line: /MY_PROJECT/app/models/order.rb:385
48
- Assoc: amends_order line: /MY_PROJECT/app/models/order.rb:432
45
+ Method: :payments, line: /RUBY_PATH/gems/2.6.0/gems/jsonapi-resources-0.9.10/lib/jsonapi/resource.rb:124
46
+ Method: :line_items, line: /MY_PROJECT/app/models/line_item_container_helpers.rb:44
47
+ Method: :effective_line_items, line: /MY_PROJECT/app/models/line_item_container_helpers.rb:110
48
+ Method: :amending_orders, line: /MY_PROJECT/app/models/order.rb:385
49
+ Method: :amends_order, line: /MY_PROJECT/app/models/order.rb:432
49
50
  ```
50
51
 
51
52
 
@@ -118,8 +119,8 @@ In order to use `tapping_device`, you need to include `TappingDevice::Trackable`
118
119
  - `tap_assoc!(activerecord_object)` - tracks association calls on a record, like `post.comments`
119
120
  - `tap_sql!(activerecord_relation_or_model)` - tracks sql queries generated from the target
120
121
 
121
- ### Info of the call
122
- All tapping methods (start with `tap_`) takes a block and yield a hash as block argument.
122
+ ### Payload of the call
123
+ All tapping methods (start with `tap_`) takes a block and yield a `Payload` object as block argument. The `Payload` class inherits `Hash` so we can either use it as a hash, or you can call its keys as methods.
123
124
 
124
125
  ```ruby
125
126
  {
@@ -149,6 +150,10 @@ The hash contains
149
150
  - `trace` - stack trace of the call. Default is an empty array unless `with_trace_to` option is set
150
151
  - `tp` - trace point object of this call
151
152
 
153
+ #### Some useful helpers
154
+ - `method_name_and_location` - `"Method: :initialize, line: /PROJECT_PATH/tapping_device/spec/payload_spec.rb:7"`
155
+ - `method_name_and_arguments` - `"Method: :initialize, argments: [[:name, \"Stan\"], [:age, 25]]"`
156
+
152
157
 
153
158
  ### Options
154
159
  - `with_trace_to: 10` - the number of traces we want to put into `trace`. Default is `nil`, so `trace` would be empty
@@ -157,22 +162,23 @@ The hash contains
157
162
 
158
163
  ```ruby
159
164
  tap_on!(@post, exclude_by_paths: [/active_record/]) do |payload|
160
- puts "Method: #{payload[:method_name]} line: #{payload[:filepath]}:#{payload[:line_number]}"
165
+ # this equals to `"Method: #{payload[:method_name]} line: #{payload[:filepath]}:#{payload[:line_number]}"`
166
+ puts(payload.method_name_and_location)
161
167
  end
162
168
  ```
163
169
 
164
170
  ```
165
- Method: _read_attribute line: /RUBY_PATH/gems/2.6.0/gems/activerecord-5.2.0/lib/active_record/attribute_methods/read.rb:40
166
- Method: name line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:5
167
- Method: _read_attribute line: /RUBY_PATH/gems/2.6.0/gems/activerecord-5.2.0/lib/active_record/attribute_methods/read.rb:40
168
- Method: user_id line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:10
171
+ Method: :_read_attribute, line: /RUBY_PATH/gems/2.6.0/gems/activerecord-5.2.0/lib/active_record/attribute_methods/read.rb:40
172
+ Method: :name, line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:5
173
+ Method: :_read_attribute, line: /RUBY_PATH/gems/2.6.0/gems/activerecord-5.2.0/lib/active_record/attribute_methods/read.rb:40
174
+ Method: :user_id, line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:10
169
175
  .......
170
176
 
171
177
  # versus
172
178
 
173
- Method: name line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:5
174
- Method: user_id line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:10
175
- Method: to_param line: /RUBY_PATH/gems/2.6.0/gems/actionpack-5.2.0/lib/action_dispatch/routing/route_set.rb:236
179
+ Method: :name, line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:5
180
+ Method: :user_id, line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:10
181
+ Method: :to_param, line: /RUBY_PATH/gems/2.6.0/gems/actionpack-5.2.0/lib/action_dispatch/routing/route_set.rb:236
176
182
  ```
177
183
 
178
184
 
@@ -200,7 +206,8 @@ class PostsController < ApplicationController
200
206
 
201
207
  def show
202
208
  tap_on!(@post) do |payload|
203
- puts "Method: #{payload[:method_name]} line: #{payload[:filepath]}:#{payload[:line_number]}"
209
+ # this equals to `"Method: #{payload[:method_name]} line: #{payload[:filepath]}:#{payload[:line_number]}"`
210
+ puts(payload.method_name_and_location)
204
211
  end
205
212
  end
206
213
  end
@@ -209,25 +216,25 @@ end
209
216
  And you can see these in log:
210
217
 
211
218
  ```
212
- Method: name line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:5
213
- Method: user_id line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:10
214
- Method: to_param line: /RUBY_PATH/gems/2.6.0/gems/actionpack-5.2.0/lib/action_dispatch/routing/route_set.rb:236
219
+ Method: :name, line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:5
220
+ Method: :user_id, line: /PROJECT_PATH/sample/app/views/posts/show.html.erb:10
221
+ Method: :to_param, line: /RUBY_PATH/gems/2.6.0/gems/actionpack-5.2.0/lib/action_dispatch/routing/route_set.rb:236
215
222
  ```
216
223
 
217
224
  ### `tap_assoc!`
218
225
 
219
226
  ```ruby
220
227
  tap_assoc!(order) do |payload|
221
- puts "Assoc: #{payload[:method_name]} line: #{payload[:filepath]}:#{payload[:line_number]}"
228
+ puts(payload.method_name_and_location)
222
229
  end
223
230
  ```
224
231
 
225
232
  ```
226
- Assoc: payments line: /RUBY_PATH/gems/2.6.0/gems/jsonapi-resources-0.9.10/lib/jsonapi/resource.rb:124
227
- Assoc: line_items line: /MY_PROJECT/app/models/line_item_container_helpers.rb:44
228
- Assoc: effective_line_items line: /MY_PROJECT/app/models/line_item_container_helpers.rb:110
229
- Assoc: amending_orders line: /MY_PROJECT/app/models/order.rb:385
230
- Assoc: amends_order line: /MY_PROJECT/app/models/order.rb:432
233
+ Method: :payments, line: /RUBY_PATH/gems/2.6.0/gems/jsonapi-resources-0.9.10/lib/jsonapi/resource.rb:124
234
+ Method: :line_items, line: /MY_PROJECT/app/models/line_item_container_helpers.rb:44
235
+ Method: :effective_line_items, line: /MY_PROJECT/app/models/line_item_container_helpers.rb:110
236
+ Method: :amending_orders, line: /MY_PROJECT/app/models/order.rb:385
237
+ Method: :amends_order, line: /MY_PROJECT/app/models/order.rb:432
231
238
  ```
232
239
 
233
240
  ### `tap_sql!` (beta)
@@ -0,0 +1,27 @@
1
+ class TappingDevice
2
+ class Payload < Hash
3
+ ATTRS = [:receiver, :method_name, :arguments, :return_value, :filepath, :line_number, :defined_class, :trace, :tp]
4
+
5
+ ATTRS.each do |attr|
6
+ define_method attr do
7
+ self[attr]
8
+ end
9
+ end
10
+
11
+ def self.init(hash)
12
+ h = new
13
+ hash.each do |k, v|
14
+ h[k] = v
15
+ end
16
+ h
17
+ end
18
+
19
+ def method_name_and_location
20
+ "Method: :#{method_name}, line: #{filepath}:#{line_number}"
21
+ end
22
+
23
+ def method_name_and_arguments
24
+ "Method: :#{method_name}, argments: #{arguments.to_s}"
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,3 @@
1
1
  class TappingDevice
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -1,5 +1,6 @@
1
1
  require "active_record"
2
2
  require "tapping_device/version"
3
+ require "tapping_device/payload"
3
4
  require "tapping_device/trackable"
4
5
  require "tapping_device/exceptions"
5
6
  require "tapping_device/sql_tapping_methods"
@@ -152,7 +153,7 @@ class TappingDevice
152
153
  def build_yield_parameters(tp:, filepath:, line_number:)
153
154
  arguments = tp.binding.local_variables.map { |n| [n, tp.binding.local_variable_get(n)] }
154
155
 
155
- {
156
+ Payload.init({
156
157
  receiver: tp.self,
157
158
  method_name: tp.callee_id,
158
159
  arguments: arguments,
@@ -162,7 +163,7 @@ class TappingDevice
162
163
  defined_class: tp.defined_class,
163
164
  trace: caller[CALLER_START_POINT..(CALLER_START_POINT + options[:with_trace_to])],
164
165
  tp: tp
165
- }
166
+ })
166
167
  end
167
168
 
168
169
  def tap_init?(klass, parameters)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tapping_device
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - st0012
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-25 00:00:00.000000000 Z
11
+ date: 2019-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -130,6 +130,7 @@ files:
130
130
  - bin/setup
131
131
  - lib/tapping_device.rb
132
132
  - lib/tapping_device/exceptions.rb
133
+ - lib/tapping_device/payload.rb
133
134
  - lib/tapping_device/sql_listener.rb
134
135
  - lib/tapping_device/sql_tapping_methods.rb
135
136
  - lib/tapping_device/trackable.rb