pry-byebug 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +6 -0
- data/CHANGELOG.md +7 -1
- data/README.md +5 -1
- data/Rakefile +0 -2
- data/lib/pry-byebug/commands.rb +3 -5
- data/lib/pry-byebug/processor.rb +44 -53
- data/lib/pry-byebug/pry_ext.rb +1 -1
- data/lib/pry-byebug/version.rb +1 -1
- data/pry-byebug.gemspec +3 -3
- data/test/base_test.rb +3 -4
- data/test/breakpoints_test.rb +3 -3
- data/test/commands_test.rb +68 -2
- data/test/examples/stepping.rb +25 -0
- data/test/processor_test.rb +2 -6
- data/test/pry_ext_test.rb +2 -2
- data/test/pry_remote_ext_test.rb +2 -2
- data/test/test_helper.rb +34 -5
- metadata +9 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e1e394709d63ed2099ec627d75981a29885c9641
|
4
|
+
data.tar.gz: 1a79cdd78a21fde30ff264adcbeeec8c96af877c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 083288cd0f862524132bda50de9ac708ee173e39718bb0594ca176c043cfc49cd35eca27c8ed69b67d3ad70c5d5a3d2ff10e99ffd89c77f4ba509beb2ee7e0ff
|
7
|
+
data.tar.gz: 3c0224f0d2895b5f60745ef89d672fc0cc11ac260ddb19ce81ac139f5c9146d3b8615d1ddb9a6610150a01225e832884f541ce91fd77f7720828a9e85fc9db22
|
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
-
## 1.1.
|
1
|
+
## 1.1.1 (2013-02-07)
|
2
|
+
|
3
|
+
* Adds some initial tests to the test suite
|
4
|
+
* Fixes bug when doing "step n" or "next n" where n > 1 right after binding.pry
|
2
5
|
|
6
|
+
|
7
|
+
## 1.1.0 (2013-06-06)
|
8
|
+
|
3
9
|
* Adds a test suite (thanks @teeparham!)
|
4
10
|
* Uses byebug ~> 1.4.0
|
5
11
|
* Uses s, n, f and c aliases by default (thanks @jgakos!)
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
pry-byebug
|
1
|
+
pry-byebug [![Gem Version][1]][2] [![Build Status][3]][4]
|
2
2
|
============
|
3
3
|
|
4
4
|
_Fast execution control in Pry_
|
@@ -112,3 +112,7 @@ file an [issue][issues]. [Project changelog][changelog].
|
|
112
112
|
[issues]: https://github.com/deivid-rodriguez/pry-byebug/issues
|
113
113
|
[changelog]: https://github.com/deivid-rodriguez/pry-byebug/blob/master/CHANGELOG.md
|
114
114
|
[pry-nav]: https://github.com/nixme/pry-nav
|
115
|
+
[1]: https://badge.fury.io/rb/pry-byebug.png
|
116
|
+
[2]: http://badge.fury.io/rb/pry-byebug
|
117
|
+
[3]: https://secure.travis-ci.org/deivid-rodriguez/pry-byebug.png
|
118
|
+
[4]: http://travis-ci.org/deivid-rodriguez/pry-byebug
|
data/Rakefile
CHANGED
data/lib/pry-byebug/commands.rb
CHANGED
@@ -48,7 +48,6 @@ module PryByebug
|
|
48
48
|
end
|
49
49
|
alias_command 'n', 'next'
|
50
50
|
|
51
|
-
|
52
51
|
create_command 'finish' do
|
53
52
|
description 'Execute until current stack frame returns.'
|
54
53
|
|
@@ -215,12 +214,11 @@ module PryByebug
|
|
215
214
|
end
|
216
215
|
alias_command 'breaks', 'breakpoints'
|
217
216
|
|
218
|
-
|
219
217
|
helpers do
|
220
218
|
def breakout_navigation(action, times = nil)
|
221
|
-
_pry_.binding_stack.clear
|
222
|
-
throw :breakout_nav, {
|
223
|
-
:action => action,
|
219
|
+
_pry_.binding_stack.clear # Clear the binding stack.
|
220
|
+
throw :breakout_nav, { # Break out of the REPL loop and signal tracer
|
221
|
+
:action => action,
|
224
222
|
:times => times,
|
225
223
|
:pry => _pry_
|
226
224
|
}
|
data/lib/pry-byebug/processor.rb
CHANGED
@@ -14,6 +14,7 @@ module PryByebug
|
|
14
14
|
# Wrap a Pry REPL to catch navigational commands and act on them.
|
15
15
|
def run(initial = true, &block)
|
16
16
|
return_value = nil
|
17
|
+
|
17
18
|
command = catch(:breakout_nav) do # Throws from PryByebug::Commands
|
18
19
|
return_value = yield
|
19
20
|
{} # Nothing thrown == no navigational command
|
@@ -31,18 +32,16 @@ module PryByebug
|
|
31
32
|
# inside Byebug. If we step normally, it'll stop inside this
|
32
33
|
# Processor. So jump out and stop at the above frame, then step/next
|
33
34
|
# from our callback.
|
34
|
-
finish
|
35
35
|
@delayed[command[:action]] = times
|
36
|
-
|
37
|
-
|
38
|
-
if :next == command[:action]
|
36
|
+
step_out 2
|
37
|
+
elsif :next == command[:action]
|
39
38
|
step_over times
|
40
39
|
|
41
40
|
elsif :step == command[:action]
|
42
|
-
|
41
|
+
step_into times
|
43
42
|
|
44
43
|
elsif :finish == command[:action]
|
45
|
-
|
44
|
+
step_out
|
46
45
|
end
|
47
46
|
else
|
48
47
|
stop
|
@@ -64,30 +63,24 @@ module PryByebug
|
|
64
63
|
end
|
65
64
|
end
|
66
65
|
|
67
|
-
|
68
66
|
# --- Callbacks from byebug C extension ---
|
69
|
-
|
70
67
|
def at_line(context, file, line)
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
@delayed = Hash.new(0) unless :step == context.stop_reason
|
68
|
+
# If any delayed nexts/steps, do 'em.
|
69
|
+
if @delayed[:next] > 1
|
70
|
+
step_over @delayed[:next] - 1
|
75
71
|
|
76
|
-
|
77
|
-
|
78
|
-
@delayed = Hash.new(0)
|
72
|
+
elsif @delayed[:step] > 1
|
73
|
+
step_into @delayed[:step] - 1
|
79
74
|
|
80
|
-
elsif @delayed[:
|
81
|
-
|
82
|
-
@delayed = Hash.new(0)
|
75
|
+
elsif @delayed[:finish] > 1
|
76
|
+
step_out @delayed[:finish] - 1
|
83
77
|
|
84
|
-
|
85
|
-
|
86
|
-
@delayed = Hash.new(0)
|
87
|
-
|
88
|
-
else # Otherwise, resume the pry session at the stopped line.
|
78
|
+
# Otherwise, resume the pry session at the stopped line.
|
79
|
+
else
|
89
80
|
resume_pry context
|
90
81
|
end
|
82
|
+
|
83
|
+
@delayed = Hash.new(0)
|
91
84
|
end
|
92
85
|
|
93
86
|
# Called when a breakpoint is triggered. Note: `at_line`` is called
|
@@ -99,7 +92,7 @@ module PryByebug
|
|
99
92
|
"Hit #{breakpoint.hit_count} times." )
|
100
93
|
if (expr = breakpoint.expr)
|
101
94
|
@pry.output.print Pry::Helpers::Text.bold("Condition: ")
|
102
|
-
@pry.output.puts
|
95
|
+
@pry.output.puts expr
|
103
96
|
end
|
104
97
|
end
|
105
98
|
|
@@ -107,42 +100,40 @@ module PryByebug
|
|
107
100
|
# TODO
|
108
101
|
end
|
109
102
|
|
103
|
+
private
|
110
104
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
new_binding = context.frame_binding(0)
|
117
|
-
Byebug.stop unless @always_enabled
|
105
|
+
# Resume an existing Pry REPL at the paused point.
|
106
|
+
# Binding extracted from Byebug::Context
|
107
|
+
def resume_pry(context)
|
108
|
+
new_binding = context.frame_binding(0)
|
109
|
+
Byebug.stop unless @always_enabled
|
118
110
|
|
119
|
-
|
120
|
-
|
121
|
-
|
111
|
+
run(false) do
|
112
|
+
@pry.repl new_binding
|
113
|
+
end
|
122
114
|
end
|
123
|
-
end
|
124
115
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
116
|
+
# Move execution forward.
|
117
|
+
def step_into(times)
|
118
|
+
Byebug.context.step_into times
|
119
|
+
end
|
129
120
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
121
|
+
# Move execution forward a number of lines in the same frame.
|
122
|
+
def step_over(lines)
|
123
|
+
Byebug.context.step_over lines, 0
|
124
|
+
end
|
134
125
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
126
|
+
# Execute until specified frame returns.
|
127
|
+
def step_out(frame = 0)
|
128
|
+
Byebug.context.step_out frame
|
129
|
+
end
|
139
130
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
131
|
+
# Cleanup when debugging is stopped and execution continues.
|
132
|
+
def stop
|
133
|
+
Byebug.stop if !@always_enabled && Byebug.started?
|
134
|
+
if PryByebug.current_remote_server # Cleanup DRb remote if running
|
135
|
+
PryByebug.current_remote_server.teardown
|
136
|
+
end
|
145
137
|
end
|
146
|
-
end
|
147
138
|
end
|
148
139
|
end
|
data/lib/pry-byebug/pry_ext.rb
CHANGED
@@ -9,7 +9,7 @@ class << Pry
|
|
9
9
|
@processor ||= PryByebug::Processor.new
|
10
10
|
|
11
11
|
if target.is_a?(Binding) && PryByebug.check_file_context(target)
|
12
|
-
# Wrap the
|
12
|
+
# Wrap the processor around the usual Pry.start to catch navigation
|
13
13
|
# commands.
|
14
14
|
@processor.run(true) do
|
15
15
|
start_without_pry_byebug(target, options)
|
data/lib/pry-byebug/version.rb
CHANGED
data/pry-byebug.gemspec
CHANGED
@@ -13,15 +13,15 @@ Gem::Specification.new do |gem|
|
|
13
13
|
|
14
14
|
gem.files = `git ls-files`.split("\n")
|
15
15
|
gem.test_files = `git ls-files -- test/*`.split("\n")
|
16
|
+
gem.require_paths = ['lib']
|
16
17
|
|
17
18
|
# Dependencies
|
18
19
|
gem.required_ruby_version = '>= 2.0.0'
|
19
20
|
|
20
21
|
gem.add_runtime_dependency 'pry', '~> 0.9.12'
|
21
|
-
gem.add_runtime_dependency 'byebug', '~> 1.
|
22
|
+
gem.add_runtime_dependency 'byebug', '~> 1.5.0'
|
22
23
|
|
23
24
|
gem.add_development_dependency 'bundler', '~> 1.3.5'
|
24
|
-
gem.add_development_dependency 'rake', '~> 10.0
|
25
|
-
gem.add_development_dependency 'minitest', '~> 5.0.3'
|
25
|
+
gem.add_development_dependency 'rake', '~> 10.1.0'
|
26
26
|
gem.add_development_dependency 'mocha', '~> 0.14.0'
|
27
27
|
end
|
data/test/base_test.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class BaseTest <
|
3
|
+
class BaseTest < MiniTest::Spec
|
4
4
|
def test_main_file_context
|
5
5
|
Pry.stubs eval_path: "<main>"
|
6
6
|
assert PryByebug.check_file_context(TOPLEVEL_BINDING)
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def test_other_file_context
|
10
10
|
Pry.stubs eval_path: "something"
|
11
|
-
refute PryByebug.check_file_context(TOPLEVEL_BINDING)
|
11
|
+
refute PryByebug.check_file_context(TOPLEVEL_BINDING)
|
12
12
|
end
|
13
|
-
|
14
13
|
end
|
15
14
|
|
data/test/breakpoints_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class BreakpointsTest <
|
4
|
-
|
3
|
+
class BreakpointsTest < MiniTest::Spec
|
4
|
+
|
5
5
|
def test_add_raises_argument_error
|
6
6
|
Pry.stubs eval_path: "something"
|
7
7
|
File.stubs :exist?
|
@@ -9,6 +9,6 @@ class BreakpointsTest < Minitest::Test
|
|
9
9
|
PryByebug::Breakpoints.add("file", 1)
|
10
10
|
end
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
end
|
14
14
|
|
data/test/commands_test.rb
CHANGED
@@ -1,6 +1,72 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class CommandsTest <
|
4
|
-
|
3
|
+
class CommandsTest < MiniTest::Spec
|
4
|
+
let(:step_file) do
|
5
|
+
(Pathname.new(__FILE__) + "../examples/stepping.rb").cleanpath.to_s
|
6
|
+
end
|
7
|
+
|
8
|
+
before do
|
9
|
+
Pry.color = false
|
10
|
+
Pry.pager = false
|
11
|
+
Pry.hooks = Pry::DEFAULT_HOOKS
|
12
|
+
@output = StringIO.new
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'Step Command' do
|
16
|
+
describe 'single step' do
|
17
|
+
before do
|
18
|
+
@input = InputTester.new('step')
|
19
|
+
redirect_pry_io(@input, @output) do
|
20
|
+
load step_file
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'shows current line' do
|
25
|
+
@output.string.must_match /\=> 3:/
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'multiple step' do
|
30
|
+
before do
|
31
|
+
@input = InputTester.new('step 2')
|
32
|
+
redirect_pry_io(@input, @output) do
|
33
|
+
load step_file
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'shows current line' do
|
38
|
+
@output.string.must_match /\=> 4:/
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'Next Command' do
|
44
|
+
describe 'single step' do
|
45
|
+
before do
|
46
|
+
@input = InputTester.new('next')
|
47
|
+
redirect_pry_io(@input, @output) do
|
48
|
+
load step_file
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'shows current line' do
|
53
|
+
@output.string.must_match /\=> 3:/
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe 'multiple step' do
|
58
|
+
before do
|
59
|
+
@input = InputTester.new('next 2')
|
60
|
+
redirect_pry_io(@input, @output) do
|
61
|
+
load step_file
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'shows current line' do
|
66
|
+
@output.string.must_match /\=> 20:/
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
5
71
|
end
|
6
72
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
binding.pry
|
2
|
+
|
3
|
+
class SteppingExample
|
4
|
+
def a
|
5
|
+
z = 2
|
6
|
+
b
|
7
|
+
end
|
8
|
+
|
9
|
+
def b
|
10
|
+
v2 = 5 if 1 == 2 ; [1,2,3].map { |a| a.to_f }
|
11
|
+
c
|
12
|
+
end
|
13
|
+
|
14
|
+
def c
|
15
|
+
z = 4
|
16
|
+
5
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
ex = SteppingExample.new.a
|
21
|
+
2.times do
|
22
|
+
ex += 1
|
23
|
+
end
|
24
|
+
|
25
|
+
ex
|
data/test/processor_test.rb
CHANGED
data/test/pry_ext_test.rb
CHANGED
data/test/pry_remote_ext_test.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,5 +1,34 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
|
1
|
+
require 'pry/test/helper'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'pry-byebug'
|
4
|
+
require 'mocha/setup'
|
5
|
+
|
6
|
+
# Set I/O streams. Out defaults to an anonymous StringIO.
|
7
|
+
def redirect_pry_io(new_in, new_out = StringIO.new)
|
8
|
+
old_in = Pry.input
|
9
|
+
old_out = Pry.output
|
10
|
+
|
11
|
+
Pry.input = new_in
|
12
|
+
Pry.output = new_out
|
13
|
+
begin
|
14
|
+
yield
|
15
|
+
ensure
|
16
|
+
Pry.input = old_in
|
17
|
+
Pry.output = old_out
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class InputTester
|
22
|
+
def initialize(*actions)
|
23
|
+
@orig_actions = actions.dup
|
24
|
+
@actions = actions
|
25
|
+
end
|
26
|
+
|
27
|
+
def readline(*)
|
28
|
+
@actions.shift
|
29
|
+
end
|
30
|
+
|
31
|
+
def rewind
|
32
|
+
@actions = @orig_actions.dup
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pry-byebug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Rodríguez
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pry
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - ~>
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 1.
|
34
|
+
version: 1.5.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ~>
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 1.
|
41
|
+
version: 1.5.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: bundler
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,28 +59,14 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - ~>
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 10.0
|
62
|
+
version: 10.1.0
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 10.0
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: minitest
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: 5.0.3
|
77
|
-
type: :development
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - ~>
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: 5.0.3
|
69
|
+
version: 10.1.0
|
84
70
|
- !ruby/object:Gem::Dependency
|
85
71
|
name: mocha
|
86
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,6 +91,7 @@ extra_rdoc_files: []
|
|
105
91
|
files:
|
106
92
|
- .gitignore
|
107
93
|
- .ruby-gemset
|
94
|
+
- .travis.yml
|
108
95
|
- CHANGELOG.md
|
109
96
|
- Gemfile
|
110
97
|
- LICENSE
|
@@ -122,6 +109,7 @@ files:
|
|
122
109
|
- test/base_test.rb
|
123
110
|
- test/breakpoints_test.rb
|
124
111
|
- test/commands_test.rb
|
112
|
+
- test/examples/stepping.rb
|
125
113
|
- test/processor_test.rb
|
126
114
|
- test/pry_ext_test.rb
|
127
115
|
- test/pry_remote_ext_test.rb
|
@@ -154,8 +142,8 @@ test_files:
|
|
154
142
|
- test/base_test.rb
|
155
143
|
- test/breakpoints_test.rb
|
156
144
|
- test/commands_test.rb
|
145
|
+
- test/examples/stepping.rb
|
157
146
|
- test/processor_test.rb
|
158
147
|
- test/pry_ext_test.rb
|
159
148
|
- test/pry_remote_ext_test.rb
|
160
149
|
- test/test_helper.rb
|
161
|
-
has_rdoc:
|