pry 0.9.7.4 → 0.9.8pre2
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.
- data/.gitignore +1 -3
- data/README.markdown +3 -1
- data/Rakefile +48 -31
- data/bin/pry +2 -80
- data/lib/pry.rb +17 -20
- data/lib/pry/cli.rb +152 -0
- data/lib/pry/command_processor.rb +13 -0
- data/lib/pry/command_set.rb +102 -9
- data/lib/pry/config.rb +28 -6
- data/lib/pry/default_commands/context.rb +9 -8
- data/lib/pry/default_commands/documentation.rb +55 -13
- data/lib/pry/default_commands/easter_eggs.rb +1 -1
- data/lib/pry/default_commands/input.rb +25 -25
- data/lib/pry/default_commands/introspection.rb +19 -18
- data/lib/pry/default_commands/ls.rb +23 -38
- data/lib/pry/default_commands/shell.rb +47 -15
- data/lib/pry/helpers/command_helpers.rb +28 -6
- data/lib/pry/helpers/options_helpers.rb +7 -4
- data/lib/pry/helpers/text.rb +23 -3
- data/lib/pry/history.rb +55 -17
- data/lib/pry/history_array.rb +2 -0
- data/lib/pry/hooks.rb +108 -0
- data/lib/pry/indent.rb +9 -5
- data/lib/pry/method.rb +99 -50
- data/lib/pry/plugins.rb +10 -2
- data/lib/pry/pry_class.rb +48 -20
- data/lib/pry/pry_instance.rb +106 -91
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +73 -0
- data/man/pry.1 +195 -0
- data/man/pry.1.html +204 -0
- data/man/pry.1.ronn +141 -0
- data/pry.gemspec +21 -24
- data/test/helper.rb +12 -3
- data/test/test_cli.rb +78 -0
- data/test/test_command_set.rb +193 -1
- data/test/test_default_commands/test_context.rb +19 -4
- data/test/test_default_commands/test_input.rb +2 -2
- data/test/test_default_commands/test_introspection.rb +63 -6
- data/test/test_default_commands/test_ls.rb +8 -35
- data/test/test_default_commands/test_shell.rb +36 -1
- data/test/test_hooks.rb +175 -0
- data/test/test_indent.rb +2 -0
- data/test/test_method.rb +10 -0
- data/test/test_pry.rb +35 -34
- data/test/test_pry_history.rb +24 -24
- data/test/test_syntax_checking.rb +47 -0
- data/test/test_wrapped_module.rb +71 -0
- metadata +40 -34
@@ -32,13 +32,13 @@ class Pry
|
|
32
32
|
end
|
33
33
|
|
34
34
|
start_line = false
|
35
|
-
if opts.
|
35
|
+
if opts.present?(:'base-one')
|
36
36
|
start_line = 1
|
37
|
-
elsif opts.
|
37
|
+
elsif opts.present?(:'line-numbers')
|
38
38
|
start_line = meth.source_line || 1
|
39
39
|
end
|
40
40
|
|
41
|
-
render_output(opts.flood
|
41
|
+
render_output(opts.present?(:flood), start_line, code)
|
42
42
|
end
|
43
43
|
|
44
44
|
alias_command "show-source", "show-method"
|
@@ -61,7 +61,7 @@ class Pry
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
next if opts.help
|
64
|
+
next if opts.present?(:help)
|
65
65
|
|
66
66
|
command_name = args.shift
|
67
67
|
if !command_name
|
@@ -84,11 +84,11 @@ class Pry
|
|
84
84
|
end
|
85
85
|
|
86
86
|
start_line = false
|
87
|
-
if opts.
|
87
|
+
if opts.present?(:'line-numbers')
|
88
88
|
start_line = block.source_line || 1
|
89
89
|
end
|
90
90
|
|
91
|
-
render_output(opts.flood
|
91
|
+
render_output(opts.present?(:flood), opts.present?(:'line-numbers') ? block.source_line : false, code)
|
92
92
|
code
|
93
93
|
else
|
94
94
|
raise CommandError, "No such command: #{command_name}."
|
@@ -114,18 +114,18 @@ class Pry
|
|
114
114
|
output.puts opt
|
115
115
|
end
|
116
116
|
end
|
117
|
-
next if opts.
|
117
|
+
next if opts.present?(:help)
|
118
118
|
|
119
|
-
if [opts.ex
|
119
|
+
if [opts.present?(:ex), opts.present?(:temp), opts.present?(:in), !args.empty?].count(true) > 1
|
120
120
|
raise CommandError, "Only one of --ex, --temp, --in and FILE may be specified."
|
121
121
|
end
|
122
122
|
|
123
123
|
# edit of local code, eval'd within pry.
|
124
|
-
if !opts.ex
|
124
|
+
if !opts.present?(:ex) && args.empty?
|
125
125
|
|
126
|
-
content = if opts.
|
126
|
+
content = if opts.present?(:temp)
|
127
127
|
""
|
128
|
-
elsif opts.
|
128
|
+
elsif opts.present?(:in)
|
129
129
|
case opts[:i]
|
130
130
|
when Range
|
131
131
|
(_pry_.input_array[opts[:i]] || []).join
|
@@ -146,7 +146,7 @@ class Pry
|
|
146
146
|
f.puts(content)
|
147
147
|
f.flush
|
148
148
|
invoke_editor(f.path, line)
|
149
|
-
if !opts.
|
149
|
+
if !opts.present?(:'no-reload')
|
150
150
|
silence_warnings do
|
151
151
|
eval_string.replace(File.read(f.path))
|
152
152
|
end
|
@@ -155,7 +155,7 @@ class Pry
|
|
155
155
|
|
156
156
|
# edit of remote code, eval'd at top-level
|
157
157
|
else
|
158
|
-
if opts.ex
|
158
|
+
if opts.present?(:ex)
|
159
159
|
if _pry_.last_exception.nil?
|
160
160
|
raise CommandError, "No exception found."
|
161
161
|
end
|
@@ -186,12 +186,12 @@ class Pry
|
|
186
186
|
line = file_name.sub!(/:(\d+)$/, "") ? $1.to_i : 1
|
187
187
|
end
|
188
188
|
|
189
|
-
line = opts[:l].to_i if opts.
|
189
|
+
line = opts[:l].to_i if opts.present?(:line)
|
190
190
|
|
191
191
|
invoke_editor(file_name, line)
|
192
192
|
set_file_and_dir_locals(file_name)
|
193
193
|
|
194
|
-
if opts.
|
194
|
+
if opts.present?(:reload) || ((opts.present?(:ex) || file_name.end_with?(".rb")) && !opts.present?(:'no-reload'))
|
195
195
|
silence_warnings do
|
196
196
|
TOPLEVEL_BINDING.eval(File.read(file_name), file_name)
|
197
197
|
end
|
@@ -222,7 +222,7 @@ class Pry
|
|
222
222
|
raise CommandError, "No editor set!\nEnsure that #{text.bold("Pry.config.editor")} is set to your editor of choice."
|
223
223
|
end
|
224
224
|
|
225
|
-
if opts.
|
225
|
+
if opts.present?(:patch) || meth.dynamically_defined?
|
226
226
|
lines = meth.source.lines.to_a
|
227
227
|
|
228
228
|
if ((original_name = meth.original_name) &&
|
@@ -256,7 +256,7 @@ class Pry
|
|
256
256
|
|
257
257
|
invoke_editor(file, opts["no-jump"] ? 0 : line)
|
258
258
|
silence_warnings do
|
259
|
-
load file if !opts.
|
259
|
+
load file if !opts.present?(:'no-jump') && !Pry.config.disable_auto_reload
|
260
260
|
end
|
261
261
|
end
|
262
262
|
end
|
@@ -269,7 +269,8 @@ class Pry
|
|
269
269
|
target.eval("alias #{temp_name} #{meth_name}")
|
270
270
|
yield
|
271
271
|
target.eval("alias #{meth_name} #{temp_name}")
|
272
|
-
|
272
|
+
ensure
|
273
|
+
target.eval("undef #{temp_name}") rescue nil
|
273
274
|
end
|
274
275
|
end
|
275
276
|
end
|
@@ -21,36 +21,19 @@ class Pry
|
|
21
21
|
|
22
22
|
# Get all the methods that we'll want to output
|
23
23
|
def all_methods(obj, opts)
|
24
|
-
opts.
|
24
|
+
opts.present?(:'instance-methods') ? Pry::Method.all_from_class(obj) : Pry::Method.all_from_obj(obj)
|
25
25
|
end
|
26
26
|
|
27
27
|
def resolution_order(obj, opts)
|
28
|
-
opts.
|
29
|
-
end
|
30
|
-
|
31
|
-
# Get the name of the klass for pretty display in the title column of ls -m
|
32
|
-
# as there can only ever be one singleton class of a non-class, we just call
|
33
|
-
# that "self".
|
34
|
-
def class_name(klass)
|
35
|
-
if klass == klass.ancestors.first
|
36
|
-
(klass.name || "") == "" ? klass.to_s : klass.name
|
37
|
-
elsif klass.ancestors.include?(Module)
|
38
|
-
begin
|
39
|
-
"#{class_name(ObjectSpace.each_object(klass).detect{ |x| class << x; self; end == klass })}.self"
|
40
|
-
rescue # ObjectSpace is not enabled by default in jruby
|
41
|
-
klass.to_s.sub(/#<Class:(.*)>/, '\1.self')
|
42
|
-
end
|
43
|
-
else
|
44
|
-
"self"
|
45
|
-
end
|
28
|
+
opts.present?(:'instance-methods') ? Pry::Method.instance_resolution_order(obj) : Pry::Method.resolution_order(obj)
|
46
29
|
end
|
47
30
|
|
48
31
|
# Get a lambda that can be used with .take_while to prevent over-eager
|
49
32
|
# traversal of the Object's ancestry graph.
|
50
33
|
def below_ceiling(obj, opts)
|
51
|
-
ceiling = if opts.
|
52
|
-
[opts.
|
53
|
-
elsif opts.
|
34
|
+
ceiling = if opts.present?(:quiet)
|
35
|
+
[opts.present?(:'instance-methods') ? obj.ancestors[1] : obj.class.ancestors[1]] + Pry.config.ls.ceiling
|
36
|
+
elsif opts.present?(:verbose)
|
54
37
|
[]
|
55
38
|
else
|
56
39
|
Pry.config.ls.ceiling.dup
|
@@ -142,7 +125,7 @@ class Pry
|
|
142
125
|
USAGE
|
143
126
|
|
144
127
|
opt.on :m, "methods", "Show public methods defined on the Object (default)"
|
145
|
-
opt.on :M, "
|
128
|
+
opt.on :M, "instance-methods", "Show methods defined in a Module or Class"
|
146
129
|
|
147
130
|
opt.on :p, "ppp", "Show public, protected (in yellow) and private (in green) methods"
|
148
131
|
opt.on :q, "quiet", "Show only methods defined on object.singleton_class and object.class"
|
@@ -160,46 +143,48 @@ class Pry
|
|
160
143
|
opt.on :h, "help", "Show help"
|
161
144
|
end
|
162
145
|
|
163
|
-
next output.puts(opts) if opts.
|
146
|
+
next output.puts(opts.to_s) if opts.present?(:help)
|
164
147
|
|
165
148
|
obj = args.empty? ? target_self : target.eval(args.join(" "))
|
166
149
|
|
167
150
|
# exclude -q, -v and --grep because they don't specify what the user wants to see.
|
168
|
-
has_opts = (opts.
|
151
|
+
has_opts = (opts.present?(:methods) || opts.present?(:'instance-methods') || opts.present?(:ppp) ||
|
152
|
+
opts.present?(:globals) || opts.present?(:locals) || opts.present?(:constants) ||
|
153
|
+
opts.present?(:ivars))
|
169
154
|
|
170
|
-
show_methods = opts.
|
171
|
-
show_constants = opts.
|
172
|
-
show_ivars = opts.
|
173
|
-
show_locals = opts.
|
155
|
+
show_methods = opts.present?(:methods) || opts.present?(:'instance-methods') || opts.present?(:ppp) || !has_opts
|
156
|
+
show_constants = opts.present?(:constants) || (!has_opts && Module === obj)
|
157
|
+
show_ivars = opts.present?(:ivars) || !has_opts
|
158
|
+
show_locals = opts.present?(:locals) || (!has_opts && args.empty?)
|
174
159
|
|
175
160
|
grep_regex, grep = [Regexp.new(opts[:G] || "."), lambda{ |x| x.grep(grep_regex) }]
|
176
161
|
|
177
|
-
raise Pry::CommandError, "-l does not make sense with a specified Object" if opts.
|
178
|
-
raise Pry::CommandError, "-g does not make sense with a specified Object" if opts.
|
179
|
-
raise Pry::CommandError, "-q does not make sense with -v" if opts.
|
180
|
-
raise Pry::CommandError, "-M only makes sense with a Module or a Class" if opts.
|
181
|
-
raise Pry::CommandError, "-c only makes sense with a Module or a Class" if opts.
|
162
|
+
raise Pry::CommandError, "-l does not make sense with a specified Object" if opts.present?(:locals) && !args.empty?
|
163
|
+
raise Pry::CommandError, "-g does not make sense with a specified Object" if opts.present?(:globals) && !args.empty?
|
164
|
+
raise Pry::CommandError, "-q does not make sense with -v" if opts.present?(:quiet) && opts.present?(:verbose)
|
165
|
+
raise Pry::CommandError, "-M only makes sense with a Module or a Class" if opts.present?(:'instance-methods') && !(Module === obj)
|
166
|
+
raise Pry::CommandError, "-c only makes sense with a Module or a Class" if opts.present?(:constants) && !args.empty? && !(Module === obj)
|
182
167
|
|
183
168
|
|
184
|
-
if opts.
|
169
|
+
if opts.present?(:globals)
|
185
170
|
output_section("global variables", grep[format_globals(target.eval("global_variables"))])
|
186
171
|
end
|
187
172
|
|
188
173
|
if show_constants
|
189
174
|
mod = Module === obj ? obj : Object
|
190
175
|
constants = mod.constants
|
191
|
-
constants -= (mod.ancestors - [mod]).map(&:constants).flatten unless opts.
|
176
|
+
constants -= (mod.ancestors - [mod]).map(&:constants).flatten unless opts.present?(:verbose)
|
192
177
|
output_section("constants", grep[format_constants(mod, constants)])
|
193
178
|
end
|
194
179
|
|
195
180
|
if show_methods
|
196
181
|
# methods is a hash {Module/Class => [Pry::Methods]}
|
197
|
-
methods = all_methods(obj, opts).select{ |method| opts.
|
182
|
+
methods = all_methods(obj, opts).select{ |method| opts.present?(:ppp) || method.visibility == :public }.group_by(&:owner)
|
198
183
|
|
199
184
|
# reverse the resolution order so that the most useful information appears right by the prompt
|
200
185
|
resolution_order(obj, opts).take_while(&below_ceiling(obj, opts)).reverse.each do |klass|
|
201
186
|
methods_here = format_methods((methods[klass] || []).select{ |m| m.name =~ grep_regex })
|
202
|
-
output_section "#{
|
187
|
+
output_section "#{Pry::WrappedModule.new(klass).method_prefix}methods", methods_here
|
203
188
|
end
|
204
189
|
end
|
205
190
|
|
@@ -31,7 +31,7 @@ class Pry
|
|
31
31
|
|
32
32
|
alias_command "file-mode", "shell-mode"
|
33
33
|
|
34
|
-
command "cat", "Show
|
34
|
+
command "cat", "Show code from a file or Pry's input buffer. Type `cat --help` for more information." do |*args|
|
35
35
|
start_line = 0
|
36
36
|
end_line = -1
|
37
37
|
file_name = nil
|
@@ -68,6 +68,8 @@ class Pry
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
+
opt.on :i, :in, "Show entries from Pry's input expression history. Takes an index or range.", :optional => true, :as => Range, :default => -5..-1
|
72
|
+
|
71
73
|
opt.on :l, "line-numbers", "Show line numbers."
|
72
74
|
opt.on :t, :type, "The specific file type for syntax higlighting (e.g ruby, python)", true, :as => Symbol
|
73
75
|
opt.on :f, :flood, "Do not use a pager to view text longer than one screen."
|
@@ -76,9 +78,9 @@ class Pry
|
|
76
78
|
end
|
77
79
|
end
|
78
80
|
|
79
|
-
next if opts.help
|
81
|
+
next if opts.present?(:help)
|
80
82
|
|
81
|
-
if opts.ex
|
83
|
+
if opts.present?(:ex)
|
82
84
|
if file_name.nil?
|
83
85
|
raise CommandError, "No Exception or Exception has no associated file."
|
84
86
|
end
|
@@ -86,23 +88,53 @@ class Pry
|
|
86
88
|
file_name = args.shift
|
87
89
|
end
|
88
90
|
|
89
|
-
if
|
90
|
-
|
91
|
-
|
91
|
+
if opts.present?(:in)
|
92
|
+
normalized_range = absolute_index_range(opts[:i], _pry_.input_array.length)
|
93
|
+
input_items = _pry_.input_array[normalized_range] || []
|
94
|
+
|
95
|
+
zipped_items = normalized_range.zip(input_items).reject { |_, s| s.nil? || s == "" }
|
96
|
+
|
97
|
+
unless zipped_items.length > 0
|
98
|
+
raise CommandError, "No expressions found."
|
99
|
+
end
|
100
|
+
|
101
|
+
if opts[:i].is_a?(Range)
|
102
|
+
contents = ""
|
103
|
+
|
104
|
+
zipped_items.each do |i, s|
|
105
|
+
contents << "#{text.bold(i.to_s)}:\n"
|
106
|
+
|
107
|
+
code = syntax_highlight_by_file_type_or_specified(s, nil, :ruby)
|
108
|
+
|
109
|
+
if opts.present?(:'line-numbers')
|
110
|
+
contents << text.indent(text.with_line_numbers(code, 1), 2)
|
111
|
+
else
|
112
|
+
contents << text.indent(code, 2)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
else
|
116
|
+
contents = syntax_highlight_by_file_type_or_specified(zipped_items.first.last, nil, :ruby)
|
117
|
+
end
|
118
|
+
else
|
119
|
+
unless file_name
|
120
|
+
raise CommandError, "Must provide a file name."
|
121
|
+
end
|
122
|
+
|
123
|
+
begin
|
124
|
+
contents, _, _ = read_between_the_lines(file_name, start_line, end_line)
|
125
|
+
rescue Errno::ENOENT
|
126
|
+
raise CommandError, "Could not find file: #{file_name}"
|
127
|
+
end
|
92
128
|
|
93
|
-
begin
|
94
|
-
contents, _, _ = read_between_the_lines(file_name, start_line, end_line)
|
95
129
|
contents = syntax_highlight_by_file_type_or_specified(contents, file_name, opts[:type])
|
96
|
-
rescue Errno::ENOENT
|
97
|
-
raise CommandError, "Could not find file: #{file_name}"
|
98
|
-
end
|
99
130
|
|
100
|
-
|
101
|
-
|
131
|
+
if opts.present?(:'line-numbers')
|
132
|
+
contents = text.with_line_numbers contents, start_line + 1
|
133
|
+
end
|
102
134
|
end
|
103
135
|
|
104
136
|
# add the arrow pointing to line that caused the exception
|
105
|
-
if opts.ex
|
137
|
+
if opts.present?(:ex)
|
106
138
|
ex_file, ex_line = _pry_.last_exception.bt_source_location_for(bt_index)
|
107
139
|
contents = text.with_line_numbers contents, start_line + 1, :bright_red
|
108
140
|
|
@@ -122,7 +154,7 @@ class Pry
|
|
122
154
|
|
123
155
|
set_file_and_dir_locals(file_name)
|
124
156
|
|
125
|
-
if opts.
|
157
|
+
if opts.present?(:flood)
|
126
158
|
output.puts contents
|
127
159
|
else
|
128
160
|
stagger_output(contents)
|
@@ -22,7 +22,7 @@ class Pry
|
|
22
22
|
# Open a temp file and yield it to the block, closing it after
|
23
23
|
# @return [String] The path of the temp file
|
24
24
|
def temp_file
|
25
|
-
file = Tempfile.new([
|
25
|
+
file = Tempfile.new(['pry', '.rb'])
|
26
26
|
yield file
|
27
27
|
ensure
|
28
28
|
file.close
|
@@ -41,7 +41,7 @@ class Pry
|
|
41
41
|
if meth.super
|
42
42
|
meth = meth.super
|
43
43
|
else
|
44
|
-
command_error("
|
44
|
+
command_error("'#{meth.name_with_owner}' has no super method.", omit_help)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -86,13 +86,16 @@ class Pry
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def syntax_highlight_by_file_type_or_specified(contents, file_name, file_type)
|
89
|
-
|
90
|
-
|
91
|
-
|
89
|
+
if file_type
|
90
|
+
language_detected = file_type
|
91
|
+
else
|
92
|
+
_, language_detected = file_map.find do |k, v|
|
93
|
+
Array(k).any? do |matcher|
|
94
|
+
matcher == File.extname(file_name) || matcher == File.basename(file_name)
|
95
|
+
end
|
92
96
|
end
|
93
97
|
end
|
94
98
|
|
95
|
-
language_detected = file_type if file_type
|
96
99
|
if Pry.color
|
97
100
|
CodeRay.scan(contents, language_detected).term
|
98
101
|
else
|
@@ -247,6 +250,25 @@ class Pry
|
|
247
250
|
text.gsub(/^#{margin}/, '')
|
248
251
|
end
|
249
252
|
|
253
|
+
def absolute_index_number(line_number, array_length)
|
254
|
+
if line_number >= 0
|
255
|
+
line_number
|
256
|
+
else
|
257
|
+
[array_length + line_number, 0].max
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
def absolute_index_range(range_or_number, array_length)
|
262
|
+
case range_or_number
|
263
|
+
when Range
|
264
|
+
a = absolute_index_number(range_or_number.begin, array_length)
|
265
|
+
b = absolute_index_number(range_or_number.end, array_length)
|
266
|
+
else
|
267
|
+
a = b = absolute_index_number(range_or_number, array_length)
|
268
|
+
end
|
269
|
+
|
270
|
+
Range.new(a, b)
|
271
|
+
end
|
250
272
|
end
|
251
273
|
|
252
274
|
end
|
@@ -22,7 +22,7 @@ class Pry
|
|
22
22
|
yield opt
|
23
23
|
|
24
24
|
opt.on :h, :help, "This message" do
|
25
|
-
output.puts opt
|
25
|
+
output.puts opt.to_s
|
26
26
|
throw :command_done
|
27
27
|
end
|
28
28
|
end
|
@@ -47,11 +47,14 @@ class Pry
|
|
47
47
|
|
48
48
|
# Add the derived :method_object option to a used Slop instance.
|
49
49
|
def process_method_object_options(args, opts)
|
50
|
-
opts[:instance] = opts['instance-methods'] if opts.m?
|
51
50
|
# TODO: de-hack when we upgrade Slop: https://github.com/injekt/slop/pull/30
|
52
|
-
opts.options[:super].force_argument_value opts.options[:super].count if opts.super
|
51
|
+
opts.options[:super].force_argument_value opts.options[:super].count if opts.present?(:super)
|
53
52
|
|
54
|
-
get_method_or_raise(args.empty? ? nil : args.join(" "), @method_target,
|
53
|
+
get_method_or_raise(args.empty? ? nil : args.join(" "), @method_target,
|
54
|
+
:super => opts[:super],
|
55
|
+
:instance => opts.present?(:'instance-methods') && !opts.present?(:'methods'),
|
56
|
+
:methods => opts.present?(:'methods') && !opts.present?(:'instance-methods')
|
57
|
+
)
|
55
58
|
end
|
56
59
|
end
|
57
60
|
end
|
data/lib/pry/helpers/text.rb
CHANGED
@@ -61,11 +61,23 @@ class Pry
|
|
61
61
|
# @param [Proc]
|
62
62
|
# @return [void]
|
63
63
|
def no_color &block
|
64
|
-
boolean = Pry.color
|
65
|
-
Pry.color = false
|
64
|
+
boolean = Pry.config.color
|
65
|
+
Pry.config.color = false
|
66
66
|
yield
|
67
67
|
ensure
|
68
|
-
Pry.color = boolean
|
68
|
+
Pry.config.color = boolean
|
69
|
+
end
|
70
|
+
|
71
|
+
# Executes _block_ with _Pry.config.pager_ set to false.
|
72
|
+
#
|
73
|
+
# @param [Proc]
|
74
|
+
# @return [void]
|
75
|
+
def no_pager &block
|
76
|
+
boolean = Pry.config.pager
|
77
|
+
Pry.config.pager = false
|
78
|
+
yield
|
79
|
+
ensure
|
80
|
+
Pry.config.pager = boolean
|
69
81
|
end
|
70
82
|
|
71
83
|
# Returns _text_ in a numbered list, beginning at _offset_.
|
@@ -81,6 +93,14 @@ class Pry
|
|
81
93
|
"#{self.send(color, adjusted_index)}: #{line}"
|
82
94
|
end.join
|
83
95
|
end
|
96
|
+
|
97
|
+
# Returns _text_ indented by _chars_ spaces.
|
98
|
+
#
|
99
|
+
# @param [String] text
|
100
|
+
# @param [Fixnum] chars
|
101
|
+
def indent(text, chars)
|
102
|
+
text.lines.map { |l| "#{' ' * chars}#{l}" }.join
|
103
|
+
end
|
84
104
|
end
|
85
105
|
|
86
106
|
end
|