pry-stack_explorer 0.6.1 → 0.6.2

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.
@@ -0,0 +1,374 @@
1
+ require_relative 'test_helper'
2
+
3
+ describe PryStackExplorer do
4
+
5
+ describe "Pry.start" do
6
+ include ResetHelper
7
+
8
+ let(:bingbong){ BingBong.new }
9
+
10
+ describe ":initial_frame option" do
11
+ it 'should default to first frame when no option provided' do
12
+ redirect_pry_io(StringIO.new("@frame = __method__\nexit\n"), out=StringIO.new) do
13
+ bingbong.bing
14
+ end
15
+
16
+ expect(bingbong.frame).to eq(:bang)
17
+ end
18
+
19
+ it 'should begin at correct frame even if Pry.start is monkey-patched (only works with one monkey-patch currently)' do
20
+ class << Pry
21
+ alias_method :old_start, :start
22
+
23
+ def start(*args, &block)
24
+ old_start(*args, &block)
25
+ end
26
+ end
27
+
28
+ o = BingBong.new
29
+
30
+ redirect_pry_io(
31
+ InputTester.new(
32
+ "@frames = SE.frame_manager(pry_instance).bindings.take(3)",
33
+ "exit-all"
34
+ )
35
+ ){ o.bing }
36
+
37
+ expect(
38
+ o.frames.map { |f| f.eval("__method__") }
39
+ ).to eq([:bang, :bong, :bing])
40
+
41
+ class << Pry
42
+ alias_method :start, :old_start
43
+ end
44
+ end
45
+
46
+ it 'should begin session at specified frame' do
47
+ o = bingbong
48
+ def o.bang; Pry.start(binding, :initial_frame => 1); end
49
+
50
+ redirect_pry_io(StringIO.new("@frame = __method__\nexit-all\n"), out=StringIO.new) do
51
+ o.bing
52
+ end
53
+
54
+ expect(o.frame).to eq(:bong)
55
+ end
56
+
57
+ it 'should begin session at specified frame when using :call_stack' do
58
+ o = Object.new
59
+ class << o; attr_accessor :frame; end
60
+ def o.alpha() binding end
61
+ def o.beta() binding end
62
+ def o.gamma() binding end
63
+
64
+ redirect_pry_io(StringIO.new("@frame = __method__\nexit\n"), out=StringIO.new) do
65
+ Pry.start(binding, :call_stack => [o.gamma, o.beta, o.alpha], :initial_frame => 1)
66
+ end
67
+
68
+ expect(o.frame).to eq(:beta)
69
+ end
70
+
71
+ # regression test for #12
72
+ it 'does not infinite loop when pry is started in MyObject#==' do
73
+ o = Object.new
74
+ def o.==(other)
75
+ binding.pry
76
+ end
77
+
78
+ redirect_pry_io(InputTester.new(":hello", "exit-all"), out=StringIO.new) do
79
+ o.==(1)
80
+ end
81
+
82
+ expect(out.string).to match(/hello/)
83
+ end
84
+ end
85
+
86
+ describe ":call_stack option" do
87
+ it 'should invoke a session with the call stack set' do
88
+ redirect_pry_io(StringIO.new("stack\nexit\n"), out=StringIO.new) do
89
+ bingbong.bing
90
+ end
91
+
92
+ expect(out.string).to match(/bang.*?bong.*?bing/m)
93
+ end
94
+
95
+ it 'should set no call stack when :call_stack => false' do
96
+ def bingbong.bang; Pry.start(binding, :call_stack => false); end
97
+
98
+ redirect_pry_io(StringIO.new("stack\nexit\n"), out=StringIO.new) do
99
+ bingbong.bing
100
+ end
101
+
102
+ expect(out.string).to match(/No caller stack/)
103
+ end
104
+
105
+ it 'should set custom call stack when :call_stack => [b1, b2]' do
106
+ o = Object.new
107
+ def o.alpha() binding end
108
+ def o.beta() binding end
109
+ def o.gamma() binding end
110
+
111
+ redirect_pry_io(StringIO.new("stack\nexit\n"), out=StringIO.new) do
112
+ Pry.start(binding, :call_stack => [o.beta, o.gamma, o.alpha])
113
+ end
114
+
115
+ expect(out.string).to match(/beta.*?gamma.*?alpha/m)
116
+ end
117
+
118
+ it 'should raise if custom call stack does not contain bindings' do
119
+ o = OpenStruct.new
120
+ redirect_pry_io(StringIO.new("self.errors = pry_instance.hooks.errors\nexit\n")) do
121
+ Pry.start(o, :call_stack => [1, 2, 3])
122
+ end
123
+ expect(o.errors.first.is_a?(ArgumentError)).to eq(true)
124
+ end
125
+
126
+ it 'should raise if custom call stack is empty' do
127
+ o = OpenStruct.new
128
+ redirect_pry_io(StringIO.new("self.errors = pry_instance.hooks.errors\nexit\n")) do
129
+ Pry.start o, :call_stack => []
130
+ end
131
+ expect(o.errors.first.is_a?(ArgumentError)).to eq(true)
132
+ end
133
+ end
134
+ end
135
+
136
+ describe "class methods" do
137
+ before do
138
+ @pry_instance = Pry.new
139
+ @bindings = [binding, binding]
140
+ end
141
+
142
+ after do
143
+ PE.clear_frame_managers(@pry_instance)
144
+ end
145
+
146
+ describe "PryStackExplorer.create_and_push_frame_manager" do
147
+
148
+ it "should create and push one new FrameManager" do
149
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
150
+ expect(PE.frame_manager(@pry_instance).is_a?(PE::FrameManager)).to eq(true)
151
+ expect(PE.frame_managers(@pry_instance).count).to eq(1)
152
+ end
153
+
154
+ it "should refresh Pry instance to use FrameManager's active binding" do
155
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
156
+ expect(@pry_instance.binding_stack.size).to eq(1)
157
+ expect(@pry_instance.binding_stack.first).to eq(@bindings.first)
158
+ end
159
+
160
+ it 'should save prior binding in FrameManager instance' do
161
+ _pry_ = Pry.new
162
+ _pry_.binding_stack.push(b=binding)
163
+ PryStackExplorer.create_and_push_frame_manager(@bindings, _pry_)
164
+ expect(PryStackExplorer.frame_manager(_pry_).prior_binding).to eq(b)
165
+ end
166
+
167
+ describe ":initial_frame option" do
168
+ it 'should start on specified frame' do
169
+ PE.create_and_push_frame_manager(@bindings, @pry_instance, :initial_frame => 1)
170
+ expect(@pry_instance.binding_stack.size).to eq(1)
171
+ expect(@pry_instance.binding_stack.first).to eq(@bindings.last)
172
+ end
173
+
174
+ describe "negative numbers" do
175
+ it 'should work with negative frame number (-1)' do
176
+ PE.create_and_push_frame_manager(@bindings, @pry_instance, :initial_frame => -1)
177
+ expect(@pry_instance.binding_stack.size).to eq(1)
178
+ expect(@pry_instance.binding_stack.first).to eq(@bindings.last)
179
+ end
180
+
181
+ it 'should work with negative frame number (-2)' do
182
+ PE.create_and_push_frame_manager(@bindings, @pry_instance, :initial_frame => -2)
183
+ expect(@pry_instance.binding_stack.size).to eq(1)
184
+ expect(@pry_instance.binding_stack.first).to eq(@bindings.first)
185
+ end
186
+ end
187
+ end
188
+
189
+ it 'should save prior backtrace in FrameManager instance' do
190
+ _pry_ = Pry.new
191
+ _pry_.backtrace = ["my backtrace"]
192
+ PryStackExplorer.create_and_push_frame_manager(@bindings, _pry_)
193
+ expect(PryStackExplorer.frame_manager(_pry_).prior_backtrace).to eq(_pry_.backtrace)
194
+ end
195
+
196
+ it "should create and push multiple FrameManagers" do
197
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
198
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
199
+ expect(PE.frame_managers(@pry_instance).count).to eq(2)
200
+ end
201
+
202
+ it 'should push FrameManagers to stacks based on Pry instance' do
203
+ p2 = Pry.new
204
+ bindings = [binding, binding]
205
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
206
+ PE.create_and_push_frame_manager(bindings, p2)
207
+ expect(PE.frame_managers(@pry_instance).count).to eq(1)
208
+ expect(PE.frame_managers(p2).count).to eq(1)
209
+ end
210
+ end
211
+
212
+ describe "PryStackExplorer.frame_manager" do
213
+ it "should have the correct bindings" do
214
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
215
+ expect(PE.frame_manager(@pry_instance).bindings).to eq(@bindings)
216
+ end
217
+
218
+ it "should return the last pushed FrameManager" do
219
+ bindings = [binding, binding]
220
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
221
+ PE.create_and_push_frame_manager(bindings, @pry_instance)
222
+ expect(PE.frame_manager(@pry_instance).bindings).to eq(bindings)
223
+ end
224
+
225
+ it "should return the correct FrameManager for the given Pry instance" do
226
+ bindings = [binding, binding]
227
+ p2 = Pry.new
228
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
229
+ PE.create_and_push_frame_manager(bindings, p2)
230
+ expect(PE.frame_manager(@pry_instance).bindings).to eq(@bindings)
231
+ expect(PE.frame_manager(p2).bindings).to eq(bindings)
232
+ end
233
+ end
234
+
235
+ describe "PryStackExplorer.pop_frame_manager" do
236
+ it "should remove FrameManager from stack" do
237
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
238
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
239
+ PE.pop_frame_manager(@pry_instance)
240
+ expect(PE.frame_managers(@pry_instance).count).to eq(1)
241
+ end
242
+
243
+ it "should return the most recently added FrameManager" do
244
+ bindings = [binding, binding]
245
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
246
+ PE.create_and_push_frame_manager(bindings, @pry_instance)
247
+ expect(PE.pop_frame_manager(@pry_instance).bindings).to eq(bindings)
248
+ end
249
+
250
+ it "should remove FrameManager from the appropriate stack based on Pry instance" do
251
+ p2 = Pry.new
252
+ bindings = [binding, binding]
253
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
254
+ PE.create_and_push_frame_manager(bindings, p2)
255
+ PE.pop_frame_manager(@pry_instance)
256
+ expect(PE.frame_managers(@pry_instance).count).to eq(0)
257
+ expect(PE.frame_managers(p2).count).to eq(1)
258
+ end
259
+
260
+ it "should remove key when no frames remaining for Pry instance" do
261
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
262
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
263
+ PE.pop_frame_manager(@pry_instance)
264
+ PE.pop_frame_manager(@pry_instance)
265
+ expect(PE.frame_hash.has_key?(@pry_instance)).to eq(false)
266
+ end
267
+
268
+ it 'should not change size of binding_stack when popping' do
269
+ bindings = [bindings, bindings]
270
+ PE.create_and_push_frame_manager(bindings, @pry_instance)
271
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
272
+ PE.pop_frame_manager(@pry_instance)
273
+ expect(@pry_instance.binding_stack.size).to eq(1)
274
+ end
275
+
276
+ it 'should return nil when popping non-existent frame manager' do
277
+ expect(PE.pop_frame_manager(@pry_instance)).to eq(nil)
278
+ end
279
+
280
+ describe "restoring previous binding" do
281
+ it 'should restore previous binding for Pry instance on pop, where previous binding is not first frame' do
282
+ bindings = [binding, binding]
283
+ PE.create_and_push_frame_manager(bindings, @pry_instance).binding_index = 1
284
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
285
+ PE.pop_frame_manager(@pry_instance)
286
+ expect(@pry_instance.binding_stack.first).to eq(bindings[1])
287
+ end
288
+
289
+ it 'should restore previous binding for Pry instance on pop (previous frame frame manager)' do
290
+ bindings = [binding, binding]
291
+ PE.create_and_push_frame_manager(bindings, @pry_instance)
292
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
293
+ PE.pop_frame_manager(@pry_instance)
294
+ expect(@pry_instance.binding_stack.first).to eq(bindings.first)
295
+ end
296
+
297
+ it 'should restore previous binding for Pry instance on pop (no previous frame manager)' do
298
+ b = binding
299
+ @pry_instance.binding_stack = [b]
300
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
301
+ PE.pop_frame_manager(@pry_instance)
302
+ expect(@pry_instance.binding_stack.first).to eq(b)
303
+ end
304
+
305
+ it 'should restore previous binding for Pry instance on pop (no previous frame manager AND no empty binding_stack)' do
306
+ b = binding
307
+ @pry_instance.binding_stack = [b]
308
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
309
+ @pry_instance.binding_stack.clear
310
+ PE.pop_frame_manager(@pry_instance)
311
+ expect(@pry_instance.binding_stack.first).to eq(b)
312
+ end
313
+ end
314
+
315
+ describe "_pry_.backtrace" do
316
+ it "should restore backtrace when frame is popped" do
317
+ p1 = Pry.new
318
+ bindings = [binding, binding]
319
+ p1.backtrace = "my backtrace1"
320
+ PE.create_and_push_frame_manager(bindings, p1)
321
+ p1.backtrace = "my backtrace2"
322
+ PE.create_and_push_frame_manager(bindings, p1)
323
+ p1.backtrace = "my backtrace3"
324
+
325
+ PE.pop_frame_manager(p1)
326
+ expect(p1.backtrace).to eq("my backtrace2")
327
+ PE.pop_frame_manager(p1)
328
+ expect(p1.backtrace).to eq("my backtrace1")
329
+ end
330
+ end
331
+ end
332
+
333
+ describe "PryStackExplorer.clear_frame_managers" do
334
+ it "should clear all FrameManagers for a Pry instance" do
335
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
336
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
337
+ PE.clear_frame_managers(@pry_instance)
338
+ expect(PE.frame_hash.has_key?(@pry_instance)).to eq(false)
339
+ end
340
+
341
+ it "should clear all FrameManagers for a Pry instance but leave others untouched" do
342
+ p2 = Pry.new
343
+ bindings = [binding, binding]
344
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
345
+ PE.create_and_push_frame_manager(bindings, p2)
346
+ PE.clear_frame_managers(@pry_instance)
347
+ expect(PE.frame_managers(p2).count).to eq(1)
348
+ expect(PE.frame_hash.has_key?(@pry_instance)).to eq(false)
349
+ end
350
+
351
+ it "should remove key" do
352
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
353
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
354
+ PE.clear_frame_managers(@pry_instance)
355
+ expect(PE.frame_hash.has_key?(@pry_instance)).to eq(false)
356
+ end
357
+
358
+ describe "_pry_.backtrace" do
359
+ it "should restore backtrace to initial one when frame managers are cleared" do
360
+ p1 = Pry.new
361
+ bindings = [binding, binding]
362
+ p1.backtrace = "my backtrace1"
363
+ PE.create_and_push_frame_manager(bindings, p1)
364
+ p1.backtrace = "my backtrace2"
365
+ PE.create_and_push_frame_manager(bindings, p1)
366
+ p1.backtrace = "my backtrace3"
367
+
368
+ PE.clear_frame_managers(p1)
369
+ expect(p1.backtrace).to eq("my backtrace1")
370
+ end
371
+ end
372
+ end
373
+ end
374
+ end
@@ -0,0 +1,11 @@
1
+ class BingBong
2
+ attr_reader :frames, :frame, :methods
3
+
4
+ def initialize
5
+ @methods = []
6
+ end
7
+
8
+ def bing; bong; end
9
+ def bong; bang; end
10
+ def bang; Pry.start(binding); end
11
+ end
@@ -0,0 +1,17 @@
1
+ class InputTester
2
+ def initialize(*actions)
3
+ if actions.last.is_a?(Hash) && actions.last.keys == [:history]
4
+ @hist = actions.pop[:history]
5
+ end
6
+ @orig_actions = actions.dup
7
+ @actions = actions
8
+ end
9
+
10
+ def readline(*)
11
+ @actions.shift.tap{ |line| @hist << line if @hist }
12
+ end
13
+
14
+ def rewind
15
+ @actions = @orig_actions.dup
16
+ end
17
+ end
@@ -0,0 +1,49 @@
1
+ module IOUtils
2
+ def redirect_pry_output!
3
+ @pry_output = StringIO.new
4
+ Pry.config.output = @pry_output
5
+ end
6
+
7
+ attr_accessor :pry_output
8
+
9
+ # Set I/O streams.
10
+ #
11
+ # Out defaults to an anonymous StringIO.
12
+ def with_pry_output_captured(new_in, new_out = StringIO.new)
13
+ old_in = Pry.input
14
+ old_out = Pry.output
15
+
16
+ Pry.input = new_in
17
+ Pry.output = new_out
18
+
19
+ begin
20
+ yield
21
+ ensure
22
+ Pry.input = old_in
23
+ Pry.output = old_out
24
+ end
25
+
26
+ new_out
27
+ end
28
+
29
+ alias :redirect_pry_io :with_pry_output_captured
30
+
31
+
32
+ def mock_pry(*args)
33
+ binding = args.first.is_a?(Binding) ? args.shift : binding()
34
+
35
+ input = InputTester.new(*args)
36
+ output = StringIO.new
37
+
38
+ redirect_pry_io(input, output) do
39
+ binding.pry
40
+ end
41
+
42
+ output.string
43
+ end
44
+
45
+ def issue_pry_commands(*commands, &block)
46
+ input_tester = InputTester.new(*commands)
47
+ redirect_pry_io(input_tester, &block).string
48
+ end
49
+ end
@@ -0,0 +1,57 @@
1
+ module ResetHelper
2
+
3
+ def self.reset_pry_defaults!
4
+ # Pry.reset_defaults
5
+
6
+ # Pry.color = false
7
+ Pry.pager = false
8
+ Pry.config.hooks = Pry::Hooks.new
9
+ # Pry.config.should_load_rc = false
10
+ # Pry.config.should_load_plugins = false
11
+ # Pry.config.auto_indent = false
12
+ # Pry.config.collision_warning = false
13
+ end
14
+
15
+ def hooks
16
+ Hooks
17
+ end
18
+
19
+ def self.included(base)
20
+ base.class_exec do
21
+ before :all do
22
+ ResetHelper.reset_pry_defaults!
23
+ end
24
+
25
+ around do |example|
26
+ hooks.with_setup{ example.run }
27
+ end
28
+ end
29
+ end
30
+
31
+ module Hooks; end
32
+
33
+ class << Hooks
34
+ def memoize!
35
+ @@hooks = {
36
+ when_started: Pry.config.hooks.get_hook(:when_started, :save_caller_bindings),
37
+ after_session: Pry.config.hooks.get_hook(:after_session, :delete_frame_manager)
38
+ }
39
+ end
40
+
41
+ def setup!
42
+ Pry.config.hooks.add_hook(:when_started, :save_caller_bindings, @@hooks[:when_started])
43
+ Pry.config.hooks.add_hook(:after_session, :delete_frame_manager, @@hooks[:after_session])
44
+ end
45
+
46
+ def teardown!
47
+ Pry.config.hooks.delete_hook(:when_started, :save_caller_bindings)
48
+ Pry.config.hooks.delete_hook(:after_session, :delete_frame_manager)
49
+ end
50
+
51
+ def with_setup(&block)
52
+ setup!
53
+ yield
54
+ teardown!
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,27 @@
1
+ require 'ostruct'
2
+ require 'pry'
3
+
4
+ Dir[File.expand_path("../support/**/*.rb", __FILE__)].each do |file|
5
+ require file
6
+ end
7
+
8
+ if RUBY_VERSION >= '2.7.2'
9
+ # NOTE: https://bugs.ruby-lang.org/issues/17000
10
+ Warning[:deprecated] = true
11
+ end
12
+
13
+ # unless Object.const_defined? 'PryStackExplorer'
14
+ $:.unshift File.expand_path '../../lib', __FILE__
15
+ require 'pry-stack_explorer'
16
+ # end
17
+
18
+ puts "Testing pry-stack_explorer version #{PryStackExplorer::VERSION}..."
19
+ puts "Ruby version: #{RUBY_VERSION}"
20
+
21
+ PE = PryStackExplorer
22
+
23
+ ResetHelper::Hooks.memoize!
24
+
25
+ RSpec.configure do |config|
26
+ config.include IOUtils
27
+ end
metadata CHANGED
@@ -1,27 +1,26 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pry-stack_explorer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mair (banisterfiend)
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2021-02-08 00:00:00.000000000 Z
10
+ date: 2026-03-13 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: binding_of_caller
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">="
18
17
  - !ruby/object:Gem::Version
19
18
  version: '1.0'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
- - - "~>"
23
+ - - ">="
25
24
  - !ruby/object:Gem::Version
26
25
  version: '1.0'
27
26
  - !ruby/object:Gem::Dependency
@@ -66,28 +65,43 @@ dependencies:
66
65
  - - "~>"
67
66
  - !ruby/object:Gem::Version
68
67
  version: '0.9'
69
- description:
70
- email:
71
- - jrmair@gmail.com
68
+ description: Walk the stack in a Pry session
69
+ email: jrmair@gmail.com
72
70
  executables: []
73
71
  extensions: []
74
72
  extra_rdoc_files: []
75
73
  files:
74
+ - ".gemtest"
75
+ - ".gitignore"
76
+ - ".rspec"
77
+ - ".travis.yml"
78
+ - ".yardopts"
79
+ - CHANGELOG
80
+ - Gemfile
76
81
  - LICENSE
77
82
  - README.md
83
+ - Rakefile
84
+ - bin/rspec
85
+ - examples/example.rb
86
+ - examples/example2.rb
87
+ - examples/example3.rb
78
88
  - lib/pry-stack_explorer.rb
79
89
  - lib/pry-stack_explorer/commands.rb
80
90
  - lib/pry-stack_explorer/frame_manager.rb
81
91
  - lib/pry-stack_explorer/version.rb
82
92
  - lib/pry-stack_explorer/when_started_hook.rb
93
+ - pry-stack_explorer.gemspec
94
+ - test/commands_test.rb
95
+ - test/frame_manager_test.rb
96
+ - test/stack_explorer_test.rb
97
+ - test/support/bingbong.rb
98
+ - test/support/input_tester.rb
99
+ - test/support/io_utils.rb
100
+ - test/support/reset_helper.rb
101
+ - test/test_helper.rb
83
102
  homepage: https://github.com/pry/pry-stack_explorer
84
- licenses:
85
- - MIT
86
- metadata:
87
- bug_tracker_uri: https://github.com/pry/pry-stack_explorer/issues
88
- source_code_uri: https://github.com/pry/pry-stack_explorer
89
- changelog_uri: https://github.com/pry/pry-stack_explorer/blob/master/CHANGELOG
90
- post_install_message:
103
+ licenses: []
104
+ metadata: {}
91
105
  rdoc_options: []
92
106
  require_paths:
93
107
  - lib
@@ -95,15 +109,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
109
  requirements:
96
110
  - - ">="
97
111
  - !ruby/object:Gem::Version
98
- version: 2.6.0
112
+ version: '0'
99
113
  required_rubygems_version: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
102
116
  - !ruby/object:Gem::Version
103
117
  version: '0'
104
118
  requirements: []
105
- rubygems_version: 3.2.3
106
- signing_key:
119
+ rubygems_version: 3.6.9
107
120
  specification_version: 4
108
121
  summary: Walk the stack in a Pry session
109
- test_files: []
122
+ test_files:
123
+ - test/commands_test.rb
124
+ - test/frame_manager_test.rb
125
+ - test/stack_explorer_test.rb
126
+ - test/support/bingbong.rb
127
+ - test/support/input_tester.rb
128
+ - test/support/io_utils.rb
129
+ - test/support/reset_helper.rb
130
+ - test/test_helper.rb