pry-stack_explorer 0.2.9pre1 → 0.2.9pre2

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.
@@ -9,6 +9,12 @@ require "binding_of_caller"
9
9
 
10
10
  module PryStackExplorer
11
11
 
12
+ # @return [Hash] The hash storing all frames for all Pry instances for
13
+ # the current thread
14
+ def self.frame_hash
15
+ Thread.current[:__pry_frame_managers__]
16
+ end
17
+
12
18
  def self.init_frame_hash
13
19
  Thread.current[:__pry_frame_managers__] ||= Hash.new { |h, k| h[k] = [] }
14
20
  end
@@ -19,7 +25,7 @@ module PryStackExplorer
19
25
  # @param [Pry] _pry_ The Pry instance associated with the frame manager
20
26
  def self.create_and_push_frame_manager(bindings, _pry_)
21
27
  init_frame_hash
22
- Thread.current[:__pry_frame_managers__][_pry_].push FrameManager.new(bindings, _pry_)
28
+ frame_hash[_pry_].push FrameManager.new(bindings, _pry_)
23
29
  end
24
30
 
25
31
  # Return the complete frame manager stack for the Pry instance
@@ -28,21 +34,25 @@ module PryStackExplorer
28
34
  # @return [Array] The stack of Pry::FrameManager objections
29
35
  def self.frame_managers(_pry_)
30
36
  init_frame_hash
31
- Thread.current[:__pry_frame_managers__][_pry_]
37
+ frame_hash[_pry_]
32
38
  end
33
39
 
34
40
  # Delete the currently active frame manager
35
41
  # @param [Pry] _pry_ The Pry instance associated with the frame managers
36
42
  def self.pop_frame_manager(_pry_)
37
43
  init_frame_hash
38
- Thread.current[:__pry_frame_managers__][_pry_].pop
44
+ popped = frame_managers(_pry_).pop
45
+ frame_hash.delete(_pry_) if frame_managers(_pry_).empty?
46
+ _pry_.backtrace = popped.prior_backtrace
47
+ popped
39
48
  end
40
49
 
41
50
  # Clear the stack of frame managers for the Pry instance
42
51
  # @param [Pry] _pry_ The Pry instance associated with the frame managers
43
52
  def self.clear_frame_managers(_pry_)
44
53
  init_frame_hash
45
- Thread.current[:__pry_frame_managers__][_pry_].clear
54
+ pop_frame_manager(_pry_) until frame_managers(_pry_).empty?
55
+ frame_hash.delete(_pry_) # this line should be unnecessary!
46
56
  end
47
57
 
48
58
  class << self; alias_method :delete_frame_managers, :clear_frame_managers; end
@@ -50,7 +60,7 @@ module PryStackExplorer
50
60
  # @return [PryStackExplorer::FrameManager] The currently active frame manager
51
61
  def self.frame_manager(_pry_)
52
62
  init_frame_hash
53
- Thread.current[:__pry_frame_managers__][_pry_].last
63
+ frame_hash[_pry_].last
54
64
  end
55
65
 
56
66
  # Simple test to check whether two `Binding` objects are equal.
@@ -104,7 +114,7 @@ Pry.config.hooks.add_hook(:when_started, :save_caller_bindings) do |binding_stac
104
114
  end
105
115
 
106
116
  # Import the StackExplorer commands
107
- Pry.config.commands.import PryStackExplorer::StackCommands
117
+ Pry.config.commands.import PryStackExplorer::Commands
108
118
 
109
119
  # monkey-patch the whereami command to show some frame information,
110
120
  # useful for navigating stack.
@@ -1,7 +1,7 @@
1
1
  require 'pry'
2
2
 
3
3
  module PryStackExplorer
4
- StackCommands = Pry::CommandSet.new do
4
+ Commands = Pry::CommandSet.new do
5
5
  command "up", "Go up to the caller's context. Accepts optional numeric parameter for how many frames to move up." do |inc_str|
6
6
  inc = inc_str.nil? ? 1 : inc_str.to_i
7
7
 
@@ -13,12 +13,17 @@ module PryStackExplorer
13
13
  # FrameManager took over.
14
14
  attr_reader :prior_binding
15
15
 
16
+ # @return [Array] The backtrace of the Pry instance before the
17
+ # FrameManager took over.
18
+ attr_reader :prior_backtrace
19
+
16
20
  def initialize(bindings, _pry_)
17
21
  self.bindings = bindings
18
22
  self.binding_index = 0
19
23
  @pry = _pry_
20
24
  @user = {}
21
25
  @prior_binding = _pry_.binding_stack.last
26
+ @prior_backtrace = _pry_.backtrace
22
27
  end
23
28
 
24
29
  # Iterate over all frames
@@ -1,3 +1,3 @@
1
1
  module PryStackExplorer
2
- VERSION = "0.2.9pre1"
2
+ VERSION = "0.2.9pre2"
3
3
  end
@@ -1,21 +1,21 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  Gem::Specification.new do |s|
4
- s.name = "pry-stack_explorer"
5
- s.version = "0.2.9pre1"
4
+ s.name = %q{pry-stack_explorer}
5
+ s.version = "0.2.9pre2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["John Mair (banisterfiend)"]
9
- s.date = "2012-01-12"
10
- s.description = "Walk the stack in a Pry session"
11
- s.email = "jrmair@gmail.com"
12
- s.files = [".gemtest", ".gitignore", ".travis.yml", ".yardopts", "CHANGELOG", "Gemfile", "LICENSE", "README.md", "Rakefile", "examples/example.rb", "examples/example2.rb", "lib/pry-stack_explorer.rb", "lib/pry-stack_explorer/commands.rb", "lib/pry-stack_explorer/frame_manager.rb", "lib/pry-stack_explorer/version.rb", "pry-stack_explorer.gemspec", "test/helper.rb", "test/test_commands.rb", "test/test_frame_manager.rb", "test/test_stack_explorer.rb", "tester.rb"]
13
- s.homepage = "https://github.com/banister"
14
- s.require_paths = ["lib"]
8
+ s.authors = [%q{John Mair (banisterfiend)}]
9
+ s.date = %q{2012-01-14}
10
+ s.description = %q{Walk the stack in a Pry session}
11
+ s.email = %q{jrmair@gmail.com}
12
+ s.files = [%q{.gemtest}, %q{.gitignore}, %q{.travis.yml}, %q{.yardopts}, %q{CHANGELOG}, %q{Gemfile}, %q{LICENSE}, %q{README.md}, %q{Rakefile}, %q{examples/example.rb}, %q{examples/example2.rb}, %q{lib/pry-stack_explorer.rb}, %q{lib/pry-stack_explorer/commands.rb}, %q{lib/pry-stack_explorer/frame_manager.rb}, %q{lib/pry-stack_explorer/version.rb}, %q{pry-stack_explorer.gemspec}, %q{test/helper.rb}, %q{test/test_commands.rb}, %q{test/test_frame_manager.rb}, %q{test/test_stack_explorer.rb}, %q{tester.rb}]
13
+ s.homepage = %q{https://github.com/banister}
14
+ s.require_paths = [%q{lib}]
15
15
  s.required_ruby_version = Gem::Requirement.new(">= 1.9.2")
16
- s.rubygems_version = "1.8.11"
17
- s.summary = "Walk the stack in a Pry session"
18
- s.test_files = ["test/helper.rb", "test/test_commands.rb", "test/test_frame_manager.rb", "test/test_stack_explorer.rb"]
16
+ s.rubygems_version = %q{1.8.6}
17
+ s.summary = %q{Walk the stack in a Pry session}
18
+ s.test_files = [%q{test/helper.rb}, %q{test/test_commands.rb}, %q{test/test_frame_manager.rb}, %q{test/test_stack_explorer.rb}]
19
19
 
20
20
  if s.respond_to? :specification_version then
21
21
  s.specification_version = 3
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- describe PryStackExplorer::StackCommands do
3
+ describe PryStackExplorer::Commands do
4
4
 
5
5
  before do
6
6
  Pry.config.hooks.add_hook(:when_started, :save_caller_bindings, &WhenStartedHook)
@@ -130,6 +130,13 @@ describe PryStackExplorer do
130
130
  PryStackExplorer.frame_manager(_pry_).prior_binding.should == b
131
131
  end
132
132
 
133
+ it 'should save prior backtrace in FrameManager instance' do
134
+ _pry_ = Pry.new
135
+ _pry_.backtrace = ["my backtrace"]
136
+ PryStackExplorer.create_and_push_frame_manager(@bindings, _pry_)
137
+ PryStackExplorer.frame_manager(_pry_).prior_backtrace.should == _pry_.backtrace
138
+ end
139
+
133
140
  it "should create and push multiple FrameManagers" do
134
141
  PE.create_and_push_frame_manager(@bindings, @pry_instance)
135
142
  PE.create_and_push_frame_manager(@bindings, @pry_instance)
@@ -193,6 +200,31 @@ describe PryStackExplorer do
193
200
  PE.frame_managers(@pry_instance).count.should == 0
194
201
  PE.frame_managers(p2).count.should == 1
195
202
  end
203
+
204
+ it "should remove key when no frames remaining for Pry instance" do
205
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
206
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
207
+ PE.pop_frame_manager(@pry_instance)
208
+ PE.pop_frame_manager(@pry_instance)
209
+ PE.frame_hash.has_key?(@pry_instance).should == false
210
+ end
211
+
212
+ describe "_pry_.backtrace" do
213
+ it "should restore backtrace when frame is popped" do
214
+ p1 = Pry.new
215
+ bindings = [binding, binding]
216
+ p1.backtrace = "my backtrace1"
217
+ PE.create_and_push_frame_manager(bindings, p1)
218
+ p1.backtrace = "my backtrace2"
219
+ PE.create_and_push_frame_manager(bindings, p1)
220
+ p1.backtrace = "my backtrace3"
221
+
222
+ PE.pop_frame_manager(p1)
223
+ p1.backtrace.should == "my backtrace2"
224
+ PE.pop_frame_manager(p1)
225
+ p1.backtrace.should == "my backtrace1"
226
+ end
227
+ end
196
228
  end
197
229
 
198
230
  describe "PryStackExplorer.clear_frame_managers" do
@@ -200,18 +232,41 @@ describe PryStackExplorer do
200
232
  PE.create_and_push_frame_manager(@bindings, @pry_instance)
201
233
  PE.create_and_push_frame_manager(@bindings, @pry_instance)
202
234
  PE.clear_frame_managers(@pry_instance)
203
- PE.frame_managers(@pry_instance).count.should == 0
235
+ PE.frame_hash.has_key?(@pry_instance).should == false
204
236
  end
205
237
 
206
- it "should clear all FrameManagers for a Pry instance" do
238
+ it "should clear all FrameManagers for a Pry instance but leave others untouched" do
207
239
  p2 = Pry.new
208
240
  bindings = [binding, binding]
209
241
  PE.create_and_push_frame_manager(@bindings, @pry_instance)
210
242
  PE.create_and_push_frame_manager(bindings, p2)
211
243
  PE.clear_frame_managers(@pry_instance)
212
244
  PE.frame_managers(p2).count.should == 1
213
- PE.frame_managers(@pry_instance).count.should == 0
245
+ PE.frame_hash.has_key?(@pry_instance).should == false
246
+ end
247
+
248
+ it "should remove key" do
249
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
250
+ PE.create_and_push_frame_manager(@bindings, @pry_instance)
251
+ PE.clear_frame_managers(@pry_instance)
252
+ PE.frame_hash.has_key?(@pry_instance).should == false
253
+ end
254
+
255
+ describe "_pry_.backtrace" do
256
+ it "should restore backtrace to initial one when frame managers are cleared" do
257
+ p1 = Pry.new
258
+ bindings = [binding, binding]
259
+ p1.backtrace = "my backtrace1"
260
+ PE.create_and_push_frame_manager(bindings, p1)
261
+ p1.backtrace = "my backtrace2"
262
+ PE.create_and_push_frame_manager(bindings, p1)
263
+ p1.backtrace = "my backtrace3"
264
+
265
+ PE.clear_frame_managers(p1)
266
+ p1.backtrace.should == "my backtrace1"
267
+ end
214
268
  end
269
+
215
270
  end
216
271
  end
217
272
  end
metadata CHANGED
@@ -1,70 +1,66 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: pry-stack_explorer
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.9pre2
4
5
  prerelease: 5
5
- version: 0.2.9pre1
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - John Mair (banisterfiend)
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-01-12 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2012-01-14 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: binding_of_caller
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70272934305720 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
18
+ requirements:
21
19
  - - ~>
22
- - !ruby/object:Gem::Version
20
+ - !ruby/object:Gem::Version
23
21
  version: 0.6.1
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: pry
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70272934305720
25
+ - !ruby/object:Gem::Dependency
26
+ name: pry
27
+ requirement: &70272934305080 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
32
- - - "="
33
- - !ruby/object:Gem::Version
29
+ requirements:
30
+ - - =
31
+ - !ruby/object:Gem::Version
34
32
  version: 0.9.8pre4
35
33
  type: :runtime
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: bacon
39
34
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70272934305080
36
+ - !ruby/object:Gem::Dependency
37
+ name: bacon
38
+ requirement: &70272934304360 !ruby/object:Gem::Requirement
41
39
  none: false
42
- requirements:
40
+ requirements:
43
41
  - - ~>
44
- - !ruby/object:Gem::Version
42
+ - !ruby/object:Gem::Version
45
43
  version: 1.1.0
46
44
  type: :development
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: rake
50
45
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *70272934304360
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: &70272934303560 !ruby/object:Gem::Requirement
52
50
  none: false
53
- requirements:
51
+ requirements:
54
52
  - - ~>
55
- - !ruby/object:Gem::Version
56
- version: "0.9"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.9'
57
55
  type: :development
58
- version_requirements: *id004
56
+ prerelease: false
57
+ version_requirements: *70272934303560
59
58
  description: Walk the stack in a Pry session
60
59
  email: jrmair@gmail.com
61
60
  executables: []
62
-
63
61
  extensions: []
64
-
65
62
  extra_rdoc_files: []
66
-
67
- files:
63
+ files:
68
64
  - .gemtest
69
65
  - .gitignore
70
66
  - .travis.yml
@@ -88,32 +84,29 @@ files:
88
84
  - tester.rb
89
85
  homepage: https://github.com/banister
90
86
  licenses: []
91
-
92
87
  post_install_message:
93
88
  rdoc_options: []
94
-
95
- require_paths:
89
+ require_paths:
96
90
  - lib
97
- required_ruby_version: !ruby/object:Gem::Requirement
91
+ required_ruby_version: !ruby/object:Gem::Requirement
98
92
  none: false
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
102
96
  version: 1.9.2
103
- required_rubygems_version: !ruby/object:Gem::Requirement
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
98
  none: false
105
- requirements:
106
- - - ">"
107
- - !ruby/object:Gem::Version
99
+ requirements:
100
+ - - ! '>'
101
+ - !ruby/object:Gem::Version
108
102
  version: 1.3.1
109
103
  requirements: []
110
-
111
104
  rubyforge_project:
112
- rubygems_version: 1.8.11
105
+ rubygems_version: 1.8.6
113
106
  signing_key:
114
107
  specification_version: 3
115
108
  summary: Walk the stack in a Pry session
116
- test_files:
109
+ test_files:
117
110
  - test/helper.rb
118
111
  - test/test_commands.rb
119
112
  - test/test_frame_manager.rb