pry-byebug 1.3.3 → 2.0.0

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
  SHA1:
3
- metadata.gz: 4f013e909a35fa66f73ddf492ea5cdce24662fdb
4
- data.tar.gz: d9e323fd262e0148ec80dc58e2e526d6d51bb693
3
+ metadata.gz: 8123f22dc42ff24f284f47d77bdf74679b8025c2
4
+ data.tar.gz: 1803eaf3cc4e019e64ce84835bb0a288cef8cebe
5
5
  SHA512:
6
- metadata.gz: a9afd2397a50060b37d1692a98cbde10cbb0eb1cbb7bd8c566fb5d29cf0d4d2ba3530299745b2edca7779531c6ccdfad39c8d76eae9bf33c1cc5494a75895300
7
- data.tar.gz: b87b20290a1c94642ef1bc0995ce055b1e0a96e65725bdbab4630f807aa7bb3237a0b1ccc906c43f086f69f1241dab604b3a40c6c259328f143e9a207fcf7bf6
6
+ metadata.gz: eecedab14af1c1eddfc82d5828a4418a239691b6ef27f67e4340458054e0646edd049ded5cde2dc1ef10efe72bf2abb70b4c759a1145710c2e25b9e59b3faeec
7
+ data.tar.gz: 33135d020dc22bf50e1a8f57b39a5dce8f5e8c1373cd8f380500a210b8199bf05a5c90084f286c2d003b2379703e025fe63d80465b2007dfa3d10b68849a0495
@@ -0,0 +1,2 @@
1
+ Lint/Debugger:
2
+ Enabled: false
@@ -1,3 +1,12 @@
1
+ ## 2.0.0 (2014-01-09)
2
+
3
+ - Improvements:
4
+ * Compatibility with byebug 3
5
+ * Now pry starts at the first line after binding.pry, not at binding.pry
6
+ - Bugfixes:
7
+ * 'continue' doesn't finish pry instance (issue #13)
8
+
9
+
1
10
  ## 1.3.3 (2014-25-06)
2
11
 
3
12
  * Relaxes pry dependency to support pry 0.10 series and further minor version
data/Gemfile CHANGED
@@ -2,8 +2,13 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'rake', '~> 10.2'
5
+ gem 'rake', '~> 10.3'
6
6
 
7
- group :development, :test do
8
- gem 'mocha', '~> 1.0'
7
+ group :development do
8
+ gem 'rubocop', '~> 0.25'
9
+ end
10
+
11
+ group :test do
12
+ gem 'mocha', '~> 1.1'
13
+ gem 'minitest', '~> 5.4'
9
14
  end
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
- pry-byebug [![Gem Version][1]][2] [![Build Status][3]][4]
2
- ============
1
+ # pry-byebug
2
+ [![Version][VersionBadge]][VersionURL]
3
+ [![Build][TravisBadge]][TravisURL]
4
+ [![Gittip][GittipBadge]][GittipURL]
3
5
 
4
6
  _Fast execution control in Pry_
5
7
 
@@ -15,9 +17,6 @@ def some_method
15
17
  end
16
18
  ```
17
19
 
18
- For a complete debugging environment, add
19
- [pry-stack_explorer][pry-stack_explorer] for call-stack frame navigation.
20
-
21
20
 
22
21
  ## Installation
23
22
 
@@ -59,25 +58,24 @@ conditional breakpoint. Edit existing breakpoints via various flags.
59
58
 
60
59
  Examples:
61
60
 
62
- ```
63
- break SomeClass#run Break at the start of `SomeClass#run`.
64
- break Foo#bar if baz? Break at `Foo#bar` only if `baz?`.
65
- break app/models/user.rb:15 Break at line 15 in user.rb.
66
- break 14 Break at line 14 in the current file.
61
+ ```ruby
62
+ break SomeClass#run # Break at the start of `SomeClass#run`.
63
+ break Foo#bar if baz? # Break at `Foo#bar` only if `baz?`.
64
+ break app/models/user.rb:15 # Break at line 15 in user.rb.
65
+ break 14 # Break at line 14 in the current file.
67
66
 
68
- break --condition 4 x > 2 Change condition on breakpoint #4 to 'x > 2'.
69
- break --condition 3 Remove the condition on breakpoint #3.
67
+ break --condition 4 x > 2 # Change condition on breakpoint #4 to 'x > 2'.
68
+ break --condition 3 # Remove the condition on breakpoint #3.
70
69
 
71
- break --delete 5 Delete breakpoint #5.
72
- break --disable-all Disable all breakpoints.
70
+ break --delete 5 # Delete breakpoint #5.
71
+ break --disable-all # Disable all breakpoints.
73
72
 
74
- break List all breakpoints. (Same as `breakpoints`)
75
- break --show 2 Show details about breakpoint #2.
73
+ break # List all breakpoints. (Same as `breakpoints`)
74
+ break --show 2 # Show details about breakpoint #2.
76
75
  ```
77
76
 
78
77
  Type `break --help` from a Pry session to see all available options.
79
78
 
80
-
81
79
  **breakpoints**: List all defined breakpoints. Pass `-v` or `--verbose` to see
82
80
  the source code around each breakpoint.
83
81
 
@@ -88,28 +86,22 @@ Only supports MRI 2.0.0 or newer. For MRI 1.9.3 or older, use
88
86
  [pry-debugger][pry-debugger]
89
87
 
90
88
 
91
- ## Contributors
89
+ ## Credits
92
90
 
93
- * Tee Parham (@teeparham)
94
- * Gopal Patel (@nixme)
95
- * John Mair (@banister)
96
- * Nicolas Viennot (@nviennot)
97
- * Benjamin R. Haskell (@benizi)
98
- * Joshua Hou (@jshou)
99
- * ...and others who helped with [pry-nav][pry-nav]
91
+ * Gopal Patel (@nixme), creator of [pry-debugger][pry-debugger], and everybody
92
+ who contributed to it. pry-byebug is a fork of pry-debugger so it wouldn't
93
+ exist as it is without those contributions.
94
+ * John Mair (@banister), creator of [pry][pry].
100
95
 
101
- Patches and bug reports are welcome. Just send a [pull request][pullrequests] or
102
- file an [issue][issues]. [Project changelog][changelog].
96
+ Patches and bug reports are welcome.
103
97
 
104
- [pry]: http://pry.github.com
105
- [byebug]: https://github.com/deivid-rodriguez/byebug
106
- [pry-debugger]: https://github.com/nixme/pry-debugger
98
+ [pry]: http://pry.github.com
99
+ [byebug]: https://github.com/deivid-rodriguez/byebug
100
+ [pry-debugger]: https://github.com/nixme/pry-debugger
107
101
  [pry-stack_explorer]: https://github.com/pry/pry-stack_explorer
108
- [pullrequests]: https://github.com/deivid-rodriguez/pry-byebug/pulls
109
- [issues]: https://github.com/deivid-rodriguez/pry-byebug/issues
110
- [changelog]: https://github.com/deivid-rodriguez/pry-byebug/blob/master/CHANGELOG.md
111
- [pry-nav]: https://github.com/nixme/pry-nav
112
- [1]: https://badge.fury.io/rb/pry-byebug.png
113
- [2]: http://badge.fury.io/rb/pry-byebug
114
- [3]: https://secure.travis-ci.org/deivid-rodriguez/pry-byebug.png
115
- [4]: http://travis-ci.org/deivid-rodriguez/pry-byebug
102
+ [VersionBadge]: https://badge.fury.io/rb/pry-byebug.png
103
+ [VersionURL]: http://badge.fury.io/rb/pry-byebug
104
+ [TravisBadge]: https://secure.travis-ci.org/deivid-rodriguez/pry-byebug.png
105
+ [TravisURL]: http://travis-ci.org/deivid-rodriguez/pry-byebug
106
+ [GittipBadge]: http://img.shields.io/gittip/deivid-rodriguez.svg
107
+ [GittipURL]: https://www.gittip.com/deivid-rodriguez
@@ -1,12 +1,12 @@
1
1
  module PryByebug
2
- extend self
3
-
2
+ #
4
3
  # Checks that a binding is in a local file context. Extracted from
5
- # https://github.com/pry/pry/blob/master/lib/pry/default_commands/context.rb
4
+ #
6
5
  def check_file_context(target)
7
6
  file = target.eval('__FILE__')
8
- file == Pry.eval_path || (file !~ /(\(.*\))|<.*>/ && file != '' && file != '-e')
7
+ file == Pry.eval_path || !Pry::Helpers::BaseHelpers.not_a_real_file?(file)
9
8
  end
9
+ module_function :check_file_context
10
10
 
11
11
  # Reference to currently running pry-remote server. Used by the processor.
12
12
  attr_accessor :current_remote_server
@@ -1,5 +1,5 @@
1
1
  module PryByebug
2
-
2
+ #
3
3
  # Wrapper for Byebug.breakpoints that respects our Processor and has better
4
4
  # failure behavior. Acts as an Enumerable.
5
5
  #
@@ -7,6 +7,9 @@ module PryByebug
7
7
  extend Enumerable
8
8
  extend self
9
9
 
10
+ #
11
+ # Breakpoint in a file:line location
12
+ #
10
13
  class FileBreakpoint < SimpleDelegator
11
14
  def source_code
12
15
  Pry::Code.from_file(source).around(pos, 3).with_marker(pos)
@@ -17,6 +20,9 @@ module PryByebug
17
20
  end
18
21
  end
19
22
 
23
+ #
24
+ # Breakpoint in a Class#method location
25
+ #
20
26
  class MethodBreakpoint < SimpleDelegator
21
27
  def initialize(byebug_bp, method)
22
28
  __setobj__ byebug_bp
@@ -36,32 +42,35 @@ module PryByebug
36
42
  @breakpoints ||= []
37
43
  end
38
44
 
39
- # Add method breakpoint.
45
+ #
46
+ # Adds a method breakpoint.
47
+ #
40
48
  def add_method(method, expression = nil)
41
49
  validate_expression expression
42
- Pry.processor.debugging = true
43
50
  owner, name = method.split(/[\.#]/)
44
- byebug_bp = Byebug.add_breakpoint(owner, name.to_sym, expression)
51
+ byebug_bp = Byebug::Breakpoint.add(owner, name.to_sym, expression)
45
52
  bp = MethodBreakpoint.new byebug_bp, method
46
53
  breakpoints << bp
47
54
  bp
48
55
  end
49
56
 
50
- # Add file breakpoint.
57
+ #
58
+ # Adds a file breakpoint.
59
+ #
51
60
  def add_file(file, line, expression = nil)
52
61
  real_file = (file != Pry.eval_path)
53
- raise ArgumentError, 'Invalid file!' if real_file && !File.exist?(file)
62
+ fail(ArgumentError, 'Invalid file!') if real_file && !File.exist?(file)
54
63
  validate_expression expression
55
64
 
56
- Pry.processor.debugging = true
57
-
58
65
  path = (real_file ? File.expand_path(file) : file)
59
- bp = FileBreakpoint.new Byebug.add_breakpoint(path, line, expression)
66
+ bp = FileBreakpoint.new Byebug::Breakpoint.add(path, line, expression)
60
67
  breakpoints << bp
61
68
  bp
62
69
  end
63
70
 
64
- # Change the conditional expression for a breakpoint.
71
+ #
72
+ # Changes the conditional expression for a breakpoint.
73
+ #
65
74
  def change(id, expression = nil)
66
75
  validate_expression expression
67
76
 
@@ -70,33 +79,40 @@ module PryByebug
70
79
  breakpoint
71
80
  end
72
81
 
73
- # Delete an existing breakpoint with the given ID.
82
+ #
83
+ # Deletes an existing breakpoint with the given ID.
84
+ #
74
85
  def delete(id)
75
- deleted = Byebug.started? &&
76
- Byebug.remove_breakpoint(id) &&
77
- breakpoints.delete(find_by_id(id))
78
- raise ArgumentError, "No breakpoint ##{id}" if not deleted
79
- Pry.processor.debugging = false if to_a.empty?
86
+ deleted = Byebug.started? &&
87
+ Byebug::Breakpoint.remove(id) && breakpoints.delete(find_by_id(id))
88
+ fail(ArgumentError, "No breakpoint ##{id}") unless deleted
80
89
  end
81
90
 
82
- # Delete all breakpoints.
83
- def clear
91
+ #
92
+ # Deletes all breakpoints.
93
+ #
94
+ def delete_all
84
95
  @breakpoints = []
85
96
  Byebug.breakpoints.clear if Byebug.started?
86
- Pry.processor.debugging = false
87
97
  end
88
98
 
89
- # Enable a disabled breakpoint with the given ID.
99
+ #
100
+ # Enables a disabled breakpoint with the given ID.
101
+ #
90
102
  def enable(id)
91
103
  change_status id, true
92
104
  end
93
105
 
94
- # Disable a breakpoint with the given ID.
106
+ #
107
+ # Disables a breakpoint with the given ID.
108
+ #
95
109
  def disable(id)
96
110
  change_status id, false
97
111
  end
98
112
 
99
- # Disable all breakpoints.
113
+ #
114
+ # Disables all breakpoints.
115
+ #
100
116
  def disable_all
101
117
  each do |breakpoint|
102
118
  breakpoint.enabled = false
@@ -117,12 +133,11 @@ module PryByebug
117
133
 
118
134
  def find_by_id(id)
119
135
  breakpoint = find { |b| b.id == id }
120
- raise ArgumentError, "No breakpoint ##{id}!" unless breakpoint
136
+ fail(ArgumentError, "No breakpoint ##{id}!") unless breakpoint
121
137
  breakpoint
122
138
  end
123
139
 
124
-
125
- private
140
+ private
126
141
 
127
142
  def change_status(id, enabled = true)
128
143
  breakpoint = find_by_id(id)
@@ -130,11 +145,10 @@ module PryByebug
130
145
  breakpoint
131
146
  end
132
147
 
133
- def validate_expression(expression)
134
- if expression && # `nil` implies no expression given, so pass
135
- (expression.empty? || !Pry::Code.complete_expression?(expression))
136
- raise "Invalid breakpoint conditional: #{expression}"
137
- end
148
+ def validate_expression(exp)
149
+ return unless exp && (exp.empty? || !Pry::Code.complete_expression?(exp))
150
+
151
+ fail("Invalid breakpoint conditional: #{expression}")
138
152
  end
139
153
  end
140
154
  end
@@ -1 +1 @@
1
- require 'pry-byebug'
1
+ require 'pry-byebug'
@@ -1,6 +1,9 @@
1
1
  require 'pry'
2
2
  require 'pry-byebug/breakpoints'
3
3
 
4
+ #
5
+ # Container for all of pry-byebug's functionality
6
+ #
4
7
  module PryByebug
5
8
  Commands = Pry::CommandSet.new do
6
9
  create_command 'step' do
@@ -73,7 +76,7 @@ module PryByebug
73
76
 
74
77
  def process
75
78
  check_file_context
76
- run 'exit-all'
79
+ breakout_navigation :continue
77
80
  end
78
81
  end
79
82
  alias_command 'c', 'continue'
@@ -95,91 +98,100 @@ module PryByebug
95
98
 
96
99
  Examples:
97
100
 
98
- break SomeClass#run Break at the start of `SomeClass#run`.
99
- break Foo#bar if baz? Break at `Foo#bar` only if `baz?`.
100
- break app/models/user.rb:15 Break at line 15 in user.rb.
101
- break 14 Break at line 14 in the current file.
101
+ break SomeClass#run Break at the start of `SomeClass#run`.
102
+ break Foo#bar if baz? Break at `Foo#bar` only if `baz?`.
103
+ break app/models/user.rb:15 Break at line 15 in user.rb.
104
+ break 14 Break at line 14 in the current file.
102
105
 
103
- break --condition 4 x > 2 Add/change condition on breakpoint #4.
104
- break --condition 3 Remove the condition on breakpoint #3.
106
+ break --condition 4 x > 2 Add/change condition on breakpoint #4.
107
+ break --condition 3 Remove the condition on breakpoint #3.
105
108
 
106
- break --delete 5 Delete breakpoint #5.
107
- break --disable-all Disable all breakpoints.
109
+ break --delete 5 Delete breakpoint #5.
110
+ break --disable-all Disable all breakpoints.
108
111
 
109
- break List all breakpoints. (Same as `breakpoints`)
110
- break --show 2 Show details about breakpoint #2.
112
+ break List all breakpoints.
113
+ break --show 2 Show details about breakpoint #2.
111
114
  BANNER
112
115
 
113
116
  def options(opt)
114
- opt.on :c, :condition, 'Change the condition of a breakpoint.', :argument => true, :as => Integer
115
- opt.on :s, :show, 'Show breakpoint details and source.', :argument => true, :as => Integer
116
- opt.on :D, :delete, 'Delete a breakpoint.', :argument => true, :as => Integer
117
- opt.on :d, :disable, 'Disable a breakpoint.', :argument => true, :as => Integer
118
- opt.on :e, :enable, 'Enable a disabled breakpoint.', :argument => true, :as => Integer
119
- opt.on :'disable-all', 'Disable all breakpoints.'
120
- opt.on :'delete-all', 'Delete all breakpoints.'
121
- method_options(opt)
117
+ defaults = { argument: true, as: Integer }
118
+
119
+ opt.on :c, :condition, 'Change condition of a breakpoint.', defaults
120
+ opt.on :s, :show, 'Show breakpoint details and source.', defaults
121
+ opt.on :D, :delete, 'Delete a breakpoint.', defaults
122
+ opt.on :d, :disable, 'Disable a breakpoint.', defaults
123
+ opt.on :e, :enable, 'Enable a disabled breakpoint.', defaults
124
+ opt.on :'disable-all', 'Disable all breakpoints.'
125
+ opt.on :'delete-all', 'Delete all breakpoints.'
122
126
  end
123
127
 
124
128
  def process
125
- Pry.processor.pry = _pry_
126
-
127
- { :delete => :delete,
128
- :disable => :disable,
129
- :enable => :enable,
130
- :'disable-all' => :disable_all,
131
- :'delete-all' => :clear
132
- }.each do |action, method|
133
- if opts.present?(action)
134
- Breakpoints.__send__ method, *(method == action ? [opts[action]] : [])
135
- return run 'breakpoints'
136
- end
129
+ all = %w(condition show delete disable enable disable-all delete-all)
130
+ all.each do |option|
131
+ next unless opts.present?(option)
132
+
133
+ method_name = "process_#{option.gsub('-', '_')}"
134
+ return send(method_name)
137
135
  end
138
136
 
139
- if opts.present?(:condition)
140
- Breakpoints.change(opts[:condition], args.empty? ? nil : args.join(' '))
137
+ new_breakpoint unless args.empty?
138
+ end
139
+
140
+ %w(delete disable enable).each do |command|
141
+ define_method(:"process_#{command}") do
142
+ Breakpoints.send(command, opts[command])
141
143
  run 'breakpoints'
142
- elsif opts.present?(:show)
143
- print_full_breakpoint Breakpoints.find_by_id(opts[:show])
144
- elsif args.empty?
144
+ end
145
+ end
146
+
147
+ %w(disable-all delete-all).each do |command|
148
+ method_name = command.gsub('-', '_')
149
+ define_method(:"process_#{method_name}") do
150
+ Breakpoints.send(method_name)
145
151
  run 'breakpoints'
146
- else
147
- new_breakpoint
148
152
  end
149
153
  end
150
154
 
155
+ def process_show
156
+ print_full_breakpoint(Breakpoints.find_by_id(opts[:show]))
157
+ end
158
+
159
+ def process_condition
160
+ expr = args.empty? ? nil : args.join(' ')
161
+ Breakpoints.change(opts[:condition], expr)
162
+ end
163
+
151
164
  def new_breakpoint
152
165
  place = args.shift
153
166
  condition = args.join(' ') if 'if' == args.shift
154
167
 
155
168
  bp =
156
169
  case place
157
- when /^(\d+)$/ # Line number only
158
- line = $1
159
- unless PryByebug.check_file_context(target)
160
- raise ArgumentError, 'Line number declaration valid only in a file context.'
161
- end
170
+ when /^(\d+)$/
171
+ line = Regexp.last_match[1]
172
+ errmsg = 'Line number declaration valid only in a file context.'
173
+ check_file_context(errmsg)
174
+
162
175
  Breakpoints.add_file(target.eval('__FILE__'), line.to_i, condition)
163
- when /^(.+):(\d+)$/ # File and line number
164
- Breakpoints.add_file($1, $2.to_i, condition)
176
+ when /^(.+):(\d+)$/
177
+ file, lineno = Regexp.last_match[1], Regexp.last_match[2].to_i
178
+ Breakpoints.add_file(file, lineno, condition)
165
179
  when /^(.*)[.#].+$/ # Method or class name
166
- if $1.strip.empty?
167
- unless PryByebug.check_file_context(target)
168
- raise ArgumentError, 'Method name declaration valid only in a file context.'
169
- end
180
+ if Regexp.last_match[1].strip.empty?
181
+ errmsg = 'Method name declaration valid only in a file context.'
182
+ check_file_context(errmsg)
170
183
  place = target.eval('self.class.to_s') + place
171
184
  end
172
- Breakpoints.add_method(place,condition)
185
+ Breakpoints.add_method(place, condition)
173
186
  else
174
- raise ArgumentError, 'Cannot identify arguments as breakpoint'
187
+ fail(ArgumentError, 'Cannot identify arguments as breakpoint')
175
188
  end
176
189
 
177
- print_full_breakpoint bp
190
+ print_full_breakpoint(bp)
178
191
  end
179
192
  end
180
193
  alias_command 'breakpoint', 'break'
181
194
 
182
-
183
195
  create_command 'breakpoints' do
184
196
  description 'List defined breakpoints.'
185
197
 
@@ -195,27 +207,16 @@ module PryByebug
195
207
  end
196
208
 
197
209
  def process
198
- if Breakpoints.count > 0
199
- if opts.verbose? # Long-form with source output
200
- Breakpoints.each { |b| print_full_breakpoint(b) }
201
- else # Simple table output
202
- max_width = [Math.log10(Breakpoints.count).ceil, 1].max
203
- header = "#{' ' * (max_width - 1)}# Enabled At "
204
-
205
- output.puts
206
- output.puts text.bold(header)
207
- output.puts text.bold('-' * header.size)
208
- Breakpoints.each do |breakpoint|
209
- output.printf "%#{max_width}d ", breakpoint.id
210
- output.print breakpoint.enabled? ? 'Yes ' : 'No '
211
- output.print breakpoint.to_s
212
- output.print " (if #{breakpoint.expr})" if breakpoint.expr
213
- output.puts
214
- end
215
- output.puts
216
- end
210
+ errmsg = 'No breakpoints defined.'
211
+ return output.puts text.bold(errmsg) unless Breakpoints.count > 0
212
+
213
+ if opts.verbose?
214
+ Breakpoints.each { |b| print_full_breakpoint(b) }
217
215
  else
218
- output.puts text.bold('No breakpoints defined.')
216
+ output.puts
217
+ print_breakpoints_header
218
+ Breakpoints.each { |b| print_short_breakpoint(b) }
219
+ output.puts
219
220
  end
220
221
  end
221
222
  end
@@ -224,28 +225,27 @@ module PryByebug
224
225
  helpers do
225
226
  def breakout_navigation(action, times = nil)
226
227
  _pry_.binding_stack.clear # Clear the binding stack.
227
- throw :breakout_nav, { # Break out of the REPL loop and signal tracer
228
- :action => action,
229
- :times => times,
230
- :pry => _pry_
231
- }
228
+
229
+ # Break out of the REPL loop and signal tracer
230
+ throw :breakout_nav, action: action, times: times, pry: _pry_
232
231
  end
233
232
 
234
233
  # Ensures that a command is executed in a local file context.
235
- def check_file_context
236
- unless PryByebug.check_file_context(target)
237
- raise Pry::CommandError, 'Cannot find local context. Did you use `binding.pry`?'
238
- end
234
+ def check_file_context(e = nil)
235
+ e ||= 'Cannot find local context. Did you use `binding.pry`?'
236
+ fail(Pry::CommandError, e) unless PryByebug.check_file_context(target)
239
237
  end
240
238
 
241
- # Print out full information about a breakpoint including surrounding code
242
- # at that point.
239
+ #
240
+ # Print out full information about a breakpoint.
241
+ #
242
+ # Includes surrounding code at that point.
243
+ #
243
244
  def print_full_breakpoint(breakpoint)
244
- line = breakpoint.pos
245
245
  output.print text.bold("Breakpoint #{breakpoint.id}: ")
246
- output.print "#{breakpoint.to_s} "
246
+ output.print "#{breakpoint} "
247
247
  output.print breakpoint.enabled? ? '(Enabled)' : '(Disabled)'
248
- output.puts ' :'
248
+ output.puts ' :'
249
249
  if (expr = breakpoint.expr)
250
250
  output.puts "#{text.bold('Condition:')} #{expr}"
251
251
  end
@@ -253,6 +253,34 @@ module PryByebug
253
253
  output.puts breakpoint.source_code.with_line_numbers.to_s
254
254
  output.puts
255
255
  end
256
+
257
+ #
258
+ # Print out concise information about a breakpoint.
259
+ #
260
+ def print_short_breakpoint(breakpoint)
261
+ output.printf "%#{max_width}d ", breakpoint.id
262
+ output.print breakpoint.enabled? ? 'Yes ' : 'No '
263
+ output.print breakpoint.to_s
264
+ output.print " (if #{breakpoint.expr})" if breakpoint.expr
265
+ output.puts
266
+ end
267
+
268
+ #
269
+ # Prints a header for the breakpoint list.
270
+ #
271
+ def print_breakpoints_header
272
+ header = "#{' ' * (max_width - 1)}# Enabled At "
273
+
274
+ output.puts text.bold(header)
275
+ output.puts text.bold('-' * header.size)
276
+ end
277
+
278
+ #
279
+ # Max width of breakpoints id column
280
+ #
281
+ def max_width
282
+ [Math.log10(Breakpoints.count).ceil, 1].max
283
+ end
256
284
  end
257
285
  end
258
286
  end