hyper-trace 1.0.alpha1.3 → 1.0.alpha1.8

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: cb2488badd7b9e7b836c075f53b027925092f3efa0946805a0f66ca46fbf0a1d
4
- data.tar.gz: d8c1cd1adcd5c8874688242c19949e23d56083fd88fa1bbd40153c63c02d655f
3
+ metadata.gz: 0a22c24fb1118d3a13c8918174b6d16a961dd959938dd26023b0ca721d726046
4
+ data.tar.gz: 290bc4e8cf9230f37882546edf9ff85da60bd1a098a45f9140294f1df8ae2837
5
5
  SHA512:
6
- metadata.gz: 9df0bfb46e922b71dd2a1c055d20da85e73fdc6b1a7b5b324f7947440cf898f0b5eed6ae5c4119d2d7a5204634cfa925229ec41d8f5b1f4be64a8fa86822b0fe
7
- data.tar.gz: d692b47f002b678012a5710a819bb90b5f583c14bf2afcd64352c3c793029c2613426de64465b459533e0462ea086a3b2cce87596bb6071c4a0559ecad7dfa7c
6
+ metadata.gz: 5e833fe34affd757cf911425635569fa92fa90c7c0e279d6fcc9942fc2865c731f649742da718bbadb041c4e07cd288eb86103857a21f7f84d761483e6763bbe
7
+ data.tar.gz: 5c1abe9dad2cc411546e50202f7977de825fcc66d38c4f8ff2a66e55116750d6c6d54ff0ad29e41f27a06f85f689c7fc71e098f5c2b9432ba39faee770018f46
data/.gitignore CHANGED
@@ -6,3 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+
10
+ # ignore Gemfile.locks https://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
11
+ /spec/test_app/Gemfile.lock
12
+ /Gemfile.lock
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
  gem 'hyperstack-config', path: '../hyperstack-config'
3
+ gem 'hyper-spec', path: '../hyper-spec'
3
4
  # Specify your gem's dependencies in hyper-trace.gemspec
4
5
  gemspec
data/hyper-trace.gemspec CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency 'hyperstack-config', HyperTrace::VERSION
22
- spec.add_development_dependency "bundler", ['>= 1.17.3', '< 2.1']
22
+ spec.add_development_dependency 'hyper-spec', HyperTrace::VERSION
23
+ spec.add_development_dependency "bundler"
23
24
  spec.add_development_dependency 'chromedriver-helper'
24
- spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rake"
25
26
  end
@@ -6,17 +6,7 @@ class Class
6
6
  alias hypertrace hyper_trace
7
7
  end
8
8
 
9
- class Method
10
- def parameters
11
- /.*function[^(]*\(([^)]*)\)/
12
- .match(`#{@method}.toString()`)[1]
13
- .split(',')
14
- .collect { |param| [:req, param.strip.to_sym] }
15
- end
16
- end
17
-
18
9
  module HyperTrace
19
-
20
10
  class Config
21
11
  def initialize(klass, instrument_class, opts, &block)
22
12
  @klass = klass
@@ -116,15 +106,11 @@ module HyperTrace
116
106
  def instrumentation_off(config)
117
107
  if config.instrument_class?
118
108
  config.klass.methods.grep(/^__hyper_trace_pre_.+$/).each do |method|
119
- config.klass.class_eval do
120
- class << self
121
- alias_method method.gsub(/^__hyper_trace_pre_/, ''), method
122
- end
123
- end
109
+ config.klass.singleton_class.alias_method method.gsub(/^__hyper_trace_pre_/, ''), method
124
110
  end
125
111
  else
126
112
  config.klass.instance_methods.grep(/^__hyper_trace_pre_.+$/).each do |method|
127
- config.klass.class_eval { alias_method method.gsub(/^__hyper_trace_pre_/, ''), method }
113
+ config.klass.alias_method method.gsub(/^__hyper_trace_pre_/, ''), method
128
114
  end
129
115
  end
130
116
  end
@@ -145,17 +131,12 @@ module HyperTrace
145
131
 
146
132
  def instrument_method(method, config)
147
133
  if config.instrument_class?
148
- config.klass.class_eval do
149
- class << self
150
- alias_method "__hyper_trace_pre_#{method}", method unless method_defined? "__pre_hyper_trace_#{method}"
151
- end
134
+ unless config.klass.singleton_class.method_defined? "__pre_hyper_trace_#{method}" # is this right?
135
+ config.klass.singleton_class.alias_method "__hyper_trace_pre_#{method}", method
152
136
  end
153
- add_hyper_trace_method(method, config)
154
137
  else
155
138
  unless config.klass.method_defined? "__pre_hyper_trace_#{method}"
156
- config.klass.class_eval do
157
- alias_method "__hyper_trace_pre_#{method}", method
158
- end
139
+ config.klass.alias_method "__hyper_trace_pre_#{method}", method
159
140
  end
160
141
  end
161
142
  add_hyper_trace_method(method, config)
@@ -194,28 +175,77 @@ module HyperTrace
194
175
  end
195
176
  end
196
177
 
178
+ def required(arity, actual_length)
179
+ if arity.negative?
180
+ req_count = - arity - 1
181
+ raise ArgumentError, "missing required arguments: #{actual_length} for #{req_count}" if req_count > actual_length
182
+ else
183
+ req_count = arity
184
+ raise ArgumentError, "incorrect number of arguments, expected #{req_count} got #{actual_length}" if req_count != actual_length
185
+ end
186
+ req_count
187
+ end
188
+
189
+ # [["req", "x"], ["opt", "y"], ["rest"], ["keyreq", "z"], ["key", "opt"], ["block", "flop"]]
190
+
191
+ def map_parameters(instance, name, actual, format = true)
192
+ method = instance.method("__hyper_trace_pre_#{name}")
193
+ map_with_specs(method, actual.dup, format) || map_without_specs(actual, format)
194
+ end
195
+
196
+ def key?(actual, key)
197
+ actual&.last&.respond_to?(:key?) && actual.last.key?(key)
198
+ end
199
+
200
+ def map_with_specs(method, actual, show_blank_rest)
201
+ specs = method.parameters
202
+ req_count = required(method.arity, actual.length)
203
+ args = {}
204
+
205
+ specs.each do |type, key|
206
+ case type
207
+ when :req
208
+ args[key] = actual.shift
209
+ req_count -= 1
210
+ when :opt
211
+ args[key] = actual.shift if actual.length > req_count
212
+ when (key || show_blank_rest) && :rest
213
+ args[key || '*'] = [*actual[0..-req_count - 1]]
214
+ when :keyreq
215
+ raise ArgumentError, "missing keyword argument: #{key}" unless key?(actual, key)
216
+
217
+ args[key] = actual.last[key]
218
+ when key?(actual, key) && :key
219
+ args[key] = actual.last[key]
220
+ end
221
+ end
222
+ args
223
+ rescue ArgumentError, Interrupt, SignalException => e
224
+ raise e
225
+ rescue Exception => e
226
+ nil
227
+ end
228
+
229
+ def map_without_specs(actual, format)
230
+ args = {}
231
+ prefix = 'p' unless format
232
+ actual.each_with_index { |value, i| args["#{prefix}#{i + 1}"] = value }
233
+ args
234
+ end
235
+
197
236
  def format_head(instance, name, args, &block)
198
237
  @formatting = true
199
- method = instance.method("__hyper_trace_pre_#{name}")
200
238
  if args.any?
201
239
  group(" #{name}(...)#{instance_tag(instance)}") do
202
- params = method.parameters
203
- group("args:", collapsed: true) do
204
- params.each_with_index do |param_spec, i|
205
- arg_name = param_spec[1]
206
- if arg_name == '$a_rest'
207
- arg_name = '*'
208
- arg = args[i..-1]
209
- else
210
- arg = args[i]
211
- end
212
- if safe_i(arg).length > 30 || show_js_object(arg)
213
- group "#{arg_name}: #{safe_s(arg)}"[0..29], collapsed: true do
214
- puts safe_i(arg)
215
- log arg if show_js_object(arg)
240
+ group("args: (#{args.length})", collapsed: true) do
241
+ map_parameters(instance, name, args).each do |arg, value|
242
+ if safe_i(value).length > 30 || show_js_object(value)
243
+ group "#{arg}: #{safe_s(value)}"[0..29], collapsed: true do
244
+ puts safe_i(value)
245
+ log value if show_js_object(value)
216
246
  end
217
247
  else
218
- group "#{arg_name}: #{safe_i(arg)}"
248
+ group "#{arg}: #{safe_i(value)}"
219
249
  end
220
250
  end
221
251
  end
@@ -286,7 +316,10 @@ module HyperTrace
286
316
  @formatting = true
287
317
  if safe_i(result).length > 40
288
318
  group "raised: #{safe_s(result)}"[0..40], collapsed: true do
289
- puts safe_i(result)
319
+ puts result.backtrace[0]
320
+ result.backtrace[1..-1].each do |line|
321
+ log line
322
+ end
290
323
  end
291
324
  else
292
325
  group "raised: #{safe_i(result)}"
@@ -305,24 +338,23 @@ module HyperTrace
305
338
 
306
339
  def breakpoint(location, config, name, args, instance, result = nil)
307
340
  if should_break? location, config, name, args, instance, result
308
- method = instance.method("__hyper_trace_pre_#{name}")
341
+ params = map_parameters(instance, name, args, false)
309
342
  fn_def = ['RESULT']
310
- fn_def += method.parameters.collect { |p| p[1] }
343
+ fn_def += params.keys
311
344
  fn_def += ["//break on #{location} of #{name}\nvar self = this;\ndebugger;\n;"]
312
345
  puts "break on #{location} of #{name}"
313
346
  fn = `Function.apply(#{self}, #{fn_def}).bind(#{instance})`
314
- fn.call(result, *args)
347
+ fn.call(result, *params.values)
315
348
  end
316
349
  end
317
350
 
318
- def call_original(instance, method, *args, &block)
351
+ def call_original(instance, method, args, &block)
319
352
  @formatting = false
320
353
  instance.send "__hyper_trace_pre_#{method}", *args, &block
321
354
  ensure
322
355
  @formatting = true
323
356
  end
324
357
 
325
-
326
358
  def add_hyper_trace_method(method, config)
327
359
  def_method = config.instrument_class? ? :define_singleton_method : :define_method
328
360
  config.klass.send(def_method, method) do |*args, &block|
@@ -330,7 +362,7 @@ module HyperTrace
330
362
  if HyperTrace.formatting?
331
363
  begin
332
364
  send "__hyper_trace_pre_#{method}", *args, &block
333
- rescue Exception
365
+ rescue StandardError
334
366
  "???"
335
367
  end
336
368
  else
@@ -338,11 +370,13 @@ module HyperTrace
338
370
  HyperTrace.format_head(self, method, args) do
339
371
  HyperTrace.format_instance_internal(self)
340
372
  HyperTrace.breakpoint(:enter, config, method, args, self)
341
- result = HyperTrace.call_original self, method, *args, &block
373
+ result = HyperTrace.call_original self, method, args, &block
342
374
  HyperTrace.format_result(result)
343
375
  HyperTrace.breakpoint(:exit, config, method, args, self, result)
344
376
  result
345
377
  end
378
+ rescue Interrupt, SignalException => e
379
+ raise e
346
380
  rescue Exception => e
347
381
  HyperTrace.format_exception(e)
348
382
  debugger unless HyperTrace.exclusions[self.class][:rescue].include? :method
@@ -1,3 +1,3 @@
1
1
  module HyperTrace
2
- VERSION = '1.0.alpha1.3'
2
+ VERSION = '1.0.alpha1.8'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyper-trace
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.alpha1.3
4
+ version: 1.0.alpha1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - catmando
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-17 00:00:00.000000000 Z
11
+ date: 2021-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hyperstack-config
@@ -16,34 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.alpha1.3
19
+ version: 1.0.alpha1.8
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.alpha1.3
26
+ version: 1.0.alpha1.8
27
+ - !ruby/object:Gem::Dependency
28
+ name: hyper-spec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.alpha1.8
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.alpha1.8
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: 1.17.3
34
- - - "<"
35
- - !ruby/object:Gem::Version
36
- version: '2.1'
47
+ version: '0'
37
48
  type: :development
38
49
  prerelease: false
39
50
  version_requirements: !ruby/object:Gem::Requirement
40
51
  requirements:
41
52
  - - ">="
42
53
  - !ruby/object:Gem::Version
43
- version: 1.17.3
44
- - - "<"
45
- - !ruby/object:Gem::Version
46
- version: '2.1'
54
+ version: '0'
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: chromedriver-helper
49
57
  requirement: !ruby/object:Gem::Requirement
@@ -62,16 +70,16 @@ dependencies:
62
70
  name: rake
63
71
  requirement: !ruby/object:Gem::Requirement
64
72
  requirements:
65
- - - "~>"
73
+ - - ">="
66
74
  - !ruby/object:Gem::Version
67
- version: '10.0'
75
+ version: '0'
68
76
  type: :development
69
77
  prerelease: false
70
78
  version_requirements: !ruby/object:Gem::Requirement
71
79
  requirements:
72
- - - "~>"
80
+ - - ">="
73
81
  - !ruby/object:Gem::Version
74
- version: '10.0'
82
+ version: '0'
75
83
  description:
76
84
  email:
77
85
  - mitch@catprint.com
@@ -83,7 +91,6 @@ files:
83
91
  - CODE_OF_CONDUCT.md
84
92
  - DOCS.md
85
93
  - Gemfile
86
- - Gemfile.lock
87
94
  - Rakefile
88
95
  - hyper-trace.gemspec
89
96
  - lib/hyper-trace.rb
@@ -109,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
116
  - !ruby/object:Gem::Version
110
117
  version: 1.3.1
111
118
  requirements: []
112
- rubygems_version: 3.0.2
119
+ rubygems_version: 3.0.8
113
120
  signing_key:
114
121
  specification_version: 4
115
122
  summary: Method tracing and conditional breakpoints for Opal Ruby
data/Gemfile.lock DELETED
@@ -1,73 +0,0 @@
1
- PATH
2
- remote: ../hyperstack-config
3
- specs:
4
- hyperstack-config (1.0.alpha1.3)
5
- listen (~> 3.0)
6
- mini_racer (~> 0.2.4)
7
- opal (>= 0.11.0, < 0.12.0)
8
- opal-browser (~> 0.2.0)
9
- uglifier
10
- websocket
11
-
12
- PATH
13
- remote: .
14
- specs:
15
- hyper-trace (1.0.alpha1.3)
16
- hyperstack-config (= 1.0.alpha1.3)
17
-
18
- GEM
19
- remote: https://rubygems.org/
20
- specs:
21
- archive-zip (0.11.0)
22
- io-like (~> 0.3.0)
23
- ast (2.4.0)
24
- chromedriver-helper (2.1.0)
25
- archive-zip (~> 0.10)
26
- nokogiri (~> 1.8)
27
- execjs (2.7.0)
28
- ffi (1.10.0)
29
- hike (1.2.3)
30
- io-like (0.3.0)
31
- libv8 (6.7.288.46.1)
32
- listen (3.1.5)
33
- rb-fsevent (~> 0.9, >= 0.9.4)
34
- rb-inotify (~> 0.9, >= 0.9.7)
35
- ruby_dep (~> 1.2)
36
- mini_portile2 (2.3.0)
37
- mini_racer (0.2.4)
38
- libv8 (>= 6.3)
39
- nokogiri (1.8.5)
40
- mini_portile2 (~> 2.3.0)
41
- opal (0.11.4)
42
- ast (>= 2.3.0)
43
- hike (~> 1.2)
44
- parser (= 2.3.3.1)
45
- sourcemap (~> 0.1.0)
46
- opal-browser (0.2.0)
47
- opal
48
- paggio
49
- paggio (0.2.6)
50
- parser (2.3.3.1)
51
- ast (~> 2.2)
52
- rake (10.5.0)
53
- rb-fsevent (0.10.3)
54
- rb-inotify (0.10.0)
55
- ffi (~> 1.0)
56
- ruby_dep (1.5.0)
57
- sourcemap (0.1.1)
58
- uglifier (4.1.20)
59
- execjs (>= 0.3.0, < 3)
60
- websocket (1.2.8)
61
-
62
- PLATFORMS
63
- ruby
64
-
65
- DEPENDENCIES
66
- bundler (>= 1.17.3, < 2.1)
67
- chromedriver-helper
68
- hyper-trace!
69
- hyperstack-config!
70
- rake (~> 10.0)
71
-
72
- BUNDLED WITH
73
- 2.0.1