hyper-trace 1.0.alpha1.2 → 1.0.alpha1.7

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: 5f92731a61b2c0b5d7c08d5e49f43e1e6cb25c194584f9e462fad1587e58dfc2
4
- data.tar.gz: b1b4cd221498d4d21c2eb411322d20822b02024a8cc683dc220ecd96ec665118
3
+ metadata.gz: 3bded2eb39b56cc22c0ccc9cb3a6d2266e06df2dc3bf3cc6abc92fd13ba2e810
4
+ data.tar.gz: 9a5e453bffe2f43a266fb5d63357389d5ff9fc273762aed5239e6be8e7b0d54d
5
5
  SHA512:
6
- metadata.gz: f815653052ac48813673231070ceeb2c517ef2f773c20d8a3953e9929454d20175d4d223d498d9e3295419dea5a813339b59cd11fa427e5450d116f756465611
7
- data.tar.gz: 24c4012407372842dcdf6d3988ce338d9c784a84cdb9f38d9bdb2a9b0c78ba1e42c780f1662de072ec3ce0656141de829f1222f0622ae9998f4117450323a4d4
6
+ metadata.gz: 490e185537790509c9d071b55d0ba838269ccad8a9086689519b36a1b3d2aa402ff3891ccb485658462f58bd396c69b1f0a80f5aa94915abd8860f8aaa1042f7
7
+ data.tar.gz: 366d20b1a60b41e1ec46fd7e4b24e640c45e5fdc6d2d075a904557d2b44ab499aca1b25bb10962a08241b0b788727b263b7c74335000b4b79613f564d4489633
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.12"
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.2'
2
+ VERSION = '1.0.alpha1.7'
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.2
4
+ version: 1.0.alpha1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - catmando
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-16 00:00:00.000000000 Z
11
+ date: 2021-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hyperstack-config
@@ -16,28 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.alpha1.2
19
+ version: 1.0.alpha1.7
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.2
26
+ version: 1.0.alpha1.7
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.7
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.7
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.12'
47
+ version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: '1.12'
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: chromedriver-helper
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -56,16 +70,16 @@ dependencies:
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
- version: '10.0'
75
+ version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - "~>"
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
- version: '10.0'
82
+ version: '0'
69
83
  description:
70
84
  email:
71
85
  - mitch@catprint.com
@@ -77,7 +91,6 @@ files:
77
91
  - CODE_OF_CONDUCT.md
78
92
  - DOCS.md
79
93
  - Gemfile
80
- - Gemfile.lock
81
94
  - Rakefile
82
95
  - hyper-trace.gemspec
83
96
  - lib/hyper-trace.rb
@@ -103,8 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
116
  - !ruby/object:Gem::Version
104
117
  version: 1.3.1
105
118
  requirements: []
106
- rubyforge_project:
107
- rubygems_version: 2.7.8
119
+ rubygems_version: 3.0.8
108
120
  signing_key:
109
121
  specification_version: 4
110
122
  summary: Method tracing and conditional breakpoints for Opal Ruby
data/Gemfile.lock DELETED
@@ -1,74 +0,0 @@
1
- PATH
2
- remote: ../hyperstack-config
3
- specs:
4
- hyperstack-config (0.1)
5
- libv8 (~> 6.3.0)
6
- listen (~> 3.0)
7
- mini_racer (~> 0.1.15)
8
- opal (>= 0.11.0, < 0.12.0)
9
- opal-browser (~> 0.2.0)
10
- uglifier
11
- websocket
12
-
13
- PATH
14
- remote: .
15
- specs:
16
- hyper-trace (0.1.0)
17
- hyperstack-config (= 0.1.0)
18
-
19
- GEM
20
- remote: https://rubygems.org/
21
- specs:
22
- archive-zip (0.11.0)
23
- io-like (~> 0.3.0)
24
- ast (2.4.0)
25
- chromedriver-helper (2.1.0)
26
- archive-zip (~> 0.10)
27
- nokogiri (~> 1.8)
28
- execjs (2.7.0)
29
- ffi (1.9.25)
30
- hike (1.2.3)
31
- io-like (0.3.0)
32
- libv8 (6.3.292.48.1-x86_64-darwin-15)
33
- listen (3.1.5)
34
- rb-fsevent (~> 0.9, >= 0.9.4)
35
- rb-inotify (~> 0.9, >= 0.9.7)
36
- ruby_dep (~> 1.2)
37
- mini_portile2 (2.3.0)
38
- mini_racer (0.1.15)
39
- libv8 (~> 6.3)
40
- nokogiri (1.8.5)
41
- mini_portile2 (~> 2.3.0)
42
- opal (0.11.3)
43
- ast (>= 2.3.0)
44
- hike (~> 1.2)
45
- parser (= 2.3.3.1)
46
- sourcemap (~> 0.1.0)
47
- opal-browser (0.2.0)
48
- opal
49
- paggio
50
- paggio (0.2.6)
51
- parser (2.3.3.1)
52
- ast (~> 2.2)
53
- rake (10.5.0)
54
- rb-fsevent (0.10.3)
55
- rb-inotify (0.9.10)
56
- ffi (>= 0.5.0, < 2)
57
- ruby_dep (1.5.0)
58
- sourcemap (0.1.1)
59
- uglifier (4.1.19)
60
- execjs (>= 0.3.0, < 3)
61
- websocket (1.2.8)
62
-
63
- PLATFORMS
64
- ruby
65
-
66
- DEPENDENCIES
67
- bundler (~> 1.12)
68
- chromedriver-helper
69
- hyper-trace!
70
- hyperstack-config!
71
- rake (~> 10.0)
72
-
73
- BUNDLED WITH
74
- 1.16.1