pry-moves 1.0.12 → 1.0.13

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: e1b513a3d36e4051c2db1e270a86b70baaaa150e9f1c76046e0cc3af8d213704
4
- data.tar.gz: 10e687ef4ce616be58d8fda903573118078c54a0425c7146b3cc64ff24b356c5
3
+ metadata.gz: 54b617db559dc0394f447095883171d67be49bbddd46bffb6d65206efd6a7d4b
4
+ data.tar.gz: aff84108e38f6be7e651ac0363f83046af91b287856773a8e5944b1d45e218f1
5
5
  SHA512:
6
- metadata.gz: 0e4e758371c47cc09470c8460e191e728040b81fd4496c055cc83f2cee7a4a9d196ddf2e5bb384e9a3ce71b4cf46088651a2c338907c98115a0bb461a8ec4390
7
- data.tar.gz: 2c2cc9896cd78dd420ff0dec84339f084c51e60eb95023d7a5be58cd362a84796d0c7d929862932c8d200cee3179cffae5c836b4c78fe5b6d1e657e56be47409
6
+ metadata.gz: 97c48fd3a44a337062e934de38faa1bce273f29ef81d6e7d3a957f38318deb1c512bc816ba1d12ab0b2c24893fd3c61453b4cf7b0f718b0bd198ff1e304f55bb
7
+ data.tar.gz: 2de12cf6e43a8f6e488acec5db74b8745b2b7ef27c6c3b526e6835ea5b89c2f013a1f180202056c401ac147878038d103ea62d81b0fbb3b4a0d3c85486c9db46
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pry-moves (1.0.11)
4
+ pry-moves (1.0.12)
5
5
  awesome_print (>= 1.8.0)
6
6
  binding_of_caller (~> 0.7)
7
7
  colorize (~> 0.8)
@@ -16,7 +16,7 @@ GEM
16
16
  debug_inspector (>= 0.0.1)
17
17
  coderay (1.1.2)
18
18
  colorize (0.8.1)
19
- debug_inspector (1.1.0)
19
+ debug_inspector (1.2.0)
20
20
  diff-lcs (1.3)
21
21
  diffy (3.4.2)
22
22
  method_source (0.9.0)
data/README.md CHANGED
@@ -38,14 +38,21 @@ Documentation for latest version. For [v0.1.12 see documentation here](https://g
38
38
  * `.method` or `123` or `:hash_key` - Continue traversing of last object in history. E.g. `orders` will list array, then `3` will enter `orders[3]`, then `.price` will enter `orders[3].price`
39
39
  * `watch variable` - display variable's value on each step
40
40
  * `diff expression` - display difference between saved expression (on first run) and expression 2
41
- * `profile` - profile most time-consuming code
41
+ * `profile [timeout]` - profile time-consuming code and infinite loops/recursion
42
42
  * `off` - Turn off debugging (don't stop on breakpoints)
43
43
  * `@` - restart and reload scripts (in app/ & spec/ by default), reload rake tasks. Configurable.
44
44
  * `#` - exit with code 3, can be wrapped in bash script to fully reload ruby scripts
45
45
  * `!` - exit
46
46
 
47
47
  Variable & methods names takes precedence over commands.
48
- So if you have variable named `step`, to execute command `step` type `cmd step` or command's alias, e.g. `s`
48
+ So if you have variable named `step`, to execute command `step` type `cmd step` or command's alias, e.g. `s`
49
+
50
+ Custom commands:
51
+ ```ruby
52
+ PryMoves.custom_command "say" do |args, output|
53
+ output.puts "Pry says: #{args}"
54
+ end
55
+ ```
49
56
 
50
57
  ## Examples
51
58
 
@@ -2,11 +2,18 @@ class PryMoves::Profile < PryMoves::TraceCommand
2
2
 
3
3
  def init(binding_)
4
4
  @start_line = binding_.eval('__LINE__')
5
+ @profiling_start_at = Time.now
6
+ @timeout = (@command[:param]&.to_i || 3).seconds
5
7
  end
6
8
 
7
9
  def trace(event, file, line, method, binding_)
8
10
  return unless file.start_with? PryMoves.project_root
9
11
 
12
+ if Time.now - @profiling_start_at > @timeout
13
+ PryMoves.messages << "Profiling timeout: #{@timeout} seconds"
14
+ return true
15
+ end
16
+
10
17
  stop = false
11
18
  place = "#{method} @ #{file}:#{line}"
12
19
  if @last_place != place
@@ -82,6 +82,8 @@ Pry::History.class_eval do
82
82
  line.match(cls.match)
83
83
  end
84
84
  push line
85
+ rescue => error
86
+ puts "Pry::History << error: #{error}"
85
87
  end
86
88
 
87
89
  end
@@ -45,6 +45,7 @@ class PryWrapper
45
45
  end
46
46
 
47
47
  ensure
48
+ PryMoves.trigger :after_debug, nil
48
49
  PryMoves.is_open = false
49
50
  Pry.config.marker = "=>"
50
51
  end
@@ -93,4 +94,4 @@ class PryWrapper
93
94
  end
94
95
 
95
96
  end
96
- end
97
+ end
@@ -1,3 +1,3 @@
1
1
  module PryMoves
2
- VERSION = '1.0.12'
2
+ VERSION = '1.0.13'
3
3
  end
data/lib/pry-moves.rb CHANGED
@@ -93,7 +93,7 @@ module PryMoves
93
93
  return if at and self.debug_called_times != at
94
94
  return if from and self.debug_called_times < from
95
95
  if message
96
- PryMoves.messages << (message.is_a?(String) ? message : message.ai)
96
+ PryMoves.messages << format_debug_object(message)
97
97
  end
98
98
  binding.pry options
99
99
  PryMoves.re_execution
@@ -127,9 +127,16 @@ module PryMoves
127
127
 
128
128
  MAX_MESSAGE_CHARS = 520
129
129
  def format_debug_object obj
130
- output = obj.ai rescue "#{obj.class} #{obj}"
131
- output.length > MAX_MESSAGE_CHARS ?
132
- output[0 .. MAX_MESSAGE_CHARS] + "... (cut)" : output
130
+ result = case obj
131
+ when String
132
+ obj
133
+ when Hash
134
+ result = obj.map {"#{_1}:#{_2}"}.join " "
135
+ result if result.length < 100
136
+ end
137
+ result ||= obj.ai rescue "#{obj.class} #{obj}"
138
+ result.length > MAX_MESSAGE_CHARS ?
139
+ result[0 .. MAX_MESSAGE_CHARS] + "... (cut)" : result
133
140
  end
134
141
 
135
142
  def debug_error(message, debug_object=nil)
@@ -159,6 +166,18 @@ module PryMoves
159
166
  Pry.commands.block_command command, "", &block
160
167
  end
161
168
 
169
+ def custom_command command, &block
170
+ cls = Pry::Commands.create_command command, "", :shellwords => false do; end
171
+ cls.define_method(:process_block) do |args, output|
172
+ block.call args, output
173
+ end
174
+ cls.class_eval do
175
+ def process
176
+ process_block args, output
177
+ end
178
+ end
179
+ end
180
+
162
181
  def locked?
163
182
  semaphore.locked?
164
183
  end
@@ -185,6 +204,8 @@ module PryMoves
185
204
 
186
205
  def trigger(event, context)
187
206
  triggers[event].each {|t| t.call context}
207
+ rescue => err
208
+ puts "PryMoves :#{event} Trigger error: #{err}".red
188
209
  end
189
210
 
190
211
  def triggers
@@ -193,7 +214,7 @@ module PryMoves
193
214
  end
194
215
  end
195
216
 
196
- TRIGGERS = [:each_new_run, :restart]
217
+ TRIGGERS = [:each_new_run, :restart, :after_debug]
197
218
  def on(trigger, &block)
198
219
  error "Invalid trigger, possible triggers: #{TRIGGERS}", trigger unless TRIGGERS.include? trigger
199
220
  triggers[trigger] << block
@@ -26,7 +26,7 @@ def shit!(err = 'Oh, shit!', debug_object = nil)
26
26
  message = "💩 #{err.is_a?(String) ? err : err.message}"
27
27
  raise err unless PryMoves.stop_on_breakpoints?
28
28
  lines = [message.red]
29
- lines.prepend debug_object.ai if debug_object
29
+ lines.prepend PryMoves.format_debug_object(debug_object) if debug_object
30
30
  PryMoves.debug_error lines.join("\n")
31
31
  nil
32
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pry-moves
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.12
4
+ version: 1.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - garmoshka-mo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-02 00:00:00.000000000 Z
11
+ date: 2025-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry