pry 0.9.9.6 → 0.9.10pre1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +35 -0
- data/CONTRIBUTORS +27 -26
- data/README.markdown +4 -4
- data/Rakefile +2 -2
- data/lib/pry.rb +25 -19
- data/lib/pry/cli.rb +31 -10
- data/lib/pry/code.rb +41 -83
- data/lib/pry/command.rb +87 -76
- data/lib/pry/command_set.rb +13 -20
- data/lib/pry/completion.rb +139 -121
- data/lib/pry/config.rb +4 -0
- data/lib/pry/core_extensions.rb +87 -30
- data/lib/pry/default_commands/cd.rb +31 -8
- data/lib/pry/default_commands/context.rb +4 -58
- data/lib/pry/default_commands/easter_eggs.rb +1 -1
- data/lib/pry/default_commands/editing.rb +21 -14
- data/lib/pry/default_commands/find_method.rb +5 -7
- data/lib/pry/default_commands/gist.rb +187 -0
- data/lib/pry/default_commands/hist.rb +6 -6
- data/lib/pry/default_commands/input_and_output.rb +73 -129
- data/lib/pry/default_commands/introspection.rb +107 -52
- data/lib/pry/default_commands/ls.rb +1 -1
- data/lib/pry/default_commands/misc.rb +0 -5
- data/lib/pry/default_commands/whereami.rb +92 -0
- data/lib/pry/helpers/base_helpers.rb +6 -1
- data/lib/pry/helpers/command_helpers.rb +30 -9
- data/lib/pry/helpers/documentation_helpers.rb +7 -7
- data/lib/pry/helpers/options_helpers.rb +1 -1
- data/lib/pry/helpers/text.rb +7 -9
- data/lib/pry/history.rb +15 -2
- data/lib/pry/hooks.rb +1 -1
- data/lib/pry/indent.rb +17 -10
- data/lib/pry/method.rb +35 -19
- data/lib/pry/module_candidate.rb +130 -0
- data/lib/pry/pry_class.rb +54 -22
- data/lib/pry/pry_instance.rb +71 -14
- data/lib/pry/repl_file_loader.rb +80 -0
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +121 -142
- data/pry.gemspec +12 -12
- data/test/candidate_helper1.rb +11 -0
- data/test/candidate_helper2.rb +8 -0
- data/test/helper.rb +16 -0
- data/test/test_code.rb +1 -1
- data/test/test_command.rb +364 -270
- data/test/test_command_integration.rb +235 -267
- data/test/test_completion.rb +36 -0
- data/test/test_control_d_handler.rb +45 -0
- data/test/test_default_commands/example.erb +5 -0
- data/test/test_default_commands/test_cd.rb +316 -11
- data/test/test_default_commands/test_context.rb +143 -192
- data/test/test_default_commands/test_documentation.rb +81 -14
- data/test/test_default_commands/test_find_method.rb +10 -2
- data/test/test_default_commands/test_input.rb +102 -111
- data/test/test_default_commands/test_introspection.rb +17 -12
- data/test/test_default_commands/test_ls.rb +8 -6
- data/test/test_default_commands/test_shell.rb +18 -15
- data/test/test_default_commands/test_show_source.rb +170 -44
- data/test/test_exception_whitelist.rb +6 -2
- data/test/test_hooks.rb +32 -0
- data/test/test_input_stack.rb +19 -16
- data/test/test_method.rb +0 -4
- data/test/test_prompt.rb +60 -0
- data/test/test_pry.rb +23 -31
- data/test/test_pry_defaults.rb +75 -57
- data/test/test_syntax_checking.rb +12 -11
- data/test/test_wrapped_module.rb +103 -0
- metadata +65 -24
data/lib/pry/pry_class.rb
CHANGED
@@ -5,7 +5,8 @@ require 'pry/config'
|
|
5
5
|
class Pry
|
6
6
|
|
7
7
|
# The RC Files to load.
|
8
|
-
RC_FILES = ["~/.pryrc"
|
8
|
+
RC_FILES = ["~/.pryrc"]
|
9
|
+
LOCAL_RC_FILE = "./.pryrc"
|
9
10
|
|
10
11
|
# class accessors
|
11
12
|
class << self
|
@@ -43,12 +44,12 @@ class Pry
|
|
43
44
|
# @return [Boolean] Whether Pry was activated from the command line.
|
44
45
|
attr_accessor :cli
|
45
46
|
|
46
|
-
# @return [Fixnum] The number of active Pry sessions.
|
47
|
-
attr_accessor :active_sessions
|
48
|
-
|
49
47
|
# @return [Boolean] Whether Pry sessions are quiet by default.
|
50
48
|
attr_accessor :quiet
|
51
49
|
|
50
|
+
# @return [Binding] A top level binding with no local variables
|
51
|
+
attr_accessor :toplevel_binding
|
52
|
+
|
52
53
|
# plugin forwardables
|
53
54
|
def_delegators :@plugin_manager, :plugins, :load_plugins, :locate_plugins
|
54
55
|
|
@@ -56,19 +57,31 @@ class Pry
|
|
56
57
|
:hooks, :color, :pager, :editor, :memory_size, :input_stack, :extra_sticky_locals
|
57
58
|
end
|
58
59
|
|
60
|
+
|
61
|
+
# Load the given file in the context of `Pry.toplevel_binding`
|
62
|
+
# @param [String] file_name The unexpanded file path.
|
63
|
+
def self.load_file_at_toplevel(file_name)
|
64
|
+
full_name = File.expand_path(file_name)
|
65
|
+
begin
|
66
|
+
toplevel_binding.eval(File.read(full_name)) if File.exists?(full_name)
|
67
|
+
rescue RescuableException => e
|
68
|
+
puts "Error loading #{file_name}: #{e}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
59
72
|
# Load the rc files given in the `Pry::RC_FILES` array.
|
60
73
|
# This method can also be used to reload the files if they have changed.
|
61
74
|
def self.load_rc
|
62
|
-
|
63
|
-
|
64
|
-
begin
|
65
|
-
load(file_name) if File.exists?(file_name)
|
66
|
-
rescue RescuableException => e
|
67
|
-
puts "Error loading #{file_name}: #{e}"
|
68
|
-
end
|
75
|
+
RC_FILES.uniq.each do |file_name|
|
76
|
+
load_file_at_toplevel(file_name)
|
69
77
|
end
|
70
78
|
end
|
71
79
|
|
80
|
+
# Load the local RC file (./.pryrc)
|
81
|
+
def self.load_local_rc
|
82
|
+
load_file_at_toplevel(LOCAL_RC_FILE)
|
83
|
+
end
|
84
|
+
|
72
85
|
# Load any Ruby files specified with the -r flag on the command line.
|
73
86
|
def self.load_requires
|
74
87
|
Pry.config.requires.each do |file|
|
@@ -92,6 +105,7 @@ class Pry
|
|
92
105
|
# note these have to be loaded here rather than in pry_instance as
|
93
106
|
# we only want them loaded once per entire Pry lifetime.
|
94
107
|
load_rc if Pry.config.should_load_rc
|
108
|
+
load_local_rc if Pry.config.should_load_local_rc
|
95
109
|
load_plugins if Pry.config.should_load_plugins
|
96
110
|
load_requires if Pry.config.should_load_requires
|
97
111
|
load_history if Pry.config.history.should_load
|
@@ -108,7 +122,7 @@ class Pry
|
|
108
122
|
# @option options (see Pry#initialize)
|
109
123
|
# @example
|
110
124
|
# Pry.start(Object.new, :input => MyInput.new)
|
111
|
-
def self.start(target=
|
125
|
+
def self.start(target=toplevel_binding, options={})
|
112
126
|
target = Pry.binding_for(target)
|
113
127
|
initial_session_setup
|
114
128
|
|
@@ -122,12 +136,7 @@ class Pry
|
|
122
136
|
pry_instance.backtrace.shift if pry_instance.backtrace.first =~ /pry.*core_extensions.*pry/
|
123
137
|
|
124
138
|
# yield the binding_stack to the hook for modification
|
125
|
-
pry_instance.exec_hook(
|
126
|
-
:when_started,
|
127
|
-
target,
|
128
|
-
options,
|
129
|
-
pry_instance
|
130
|
-
)
|
139
|
+
pry_instance.exec_hook(:when_started, target, options, pry_instance)
|
131
140
|
|
132
141
|
if !pry_instance.binding_stack.empty?
|
133
142
|
head = pry_instance.binding_stack.pop
|
@@ -135,10 +144,23 @@ class Pry
|
|
135
144
|
head = target
|
136
145
|
end
|
137
146
|
|
147
|
+
# Clear the line before starting Pry. This fixes the issue discussed here:
|
148
|
+
# https://github.com/pry/pry/issues/566
|
149
|
+
if Pry.config.auto_indent
|
150
|
+
Kernel.print Pry::Helpers::BaseHelpers.windows_ansi? ? "\e[0F" : "\e[0G"
|
151
|
+
end
|
152
|
+
|
138
153
|
# Enter the matrix
|
139
154
|
pry_instance.repl(head)
|
140
155
|
end
|
141
156
|
|
157
|
+
# Execute the file through the REPL loop, non-interactively.
|
158
|
+
# @param [String] file_name File name to load through the REPL.
|
159
|
+
def self.load_file_through_repl(file_name)
|
160
|
+
require "pry/repl_file_loader"
|
161
|
+
REPLFileLoader.new(file_name).load
|
162
|
+
end
|
163
|
+
|
142
164
|
# An inspector that clips the output to `max_length` chars.
|
143
165
|
# In case of > `max_length` chars the `#<Object...> notation is used.
|
144
166
|
# @param obj The object to view.
|
@@ -178,7 +200,7 @@ class Pry
|
|
178
200
|
|
179
201
|
# Run a Pry command from outside a session. The commands available are
|
180
202
|
# those referenced by `Pry.commands` (the default command set).
|
181
|
-
# @param [String]
|
203
|
+
# @param [String] command_string The Pry command (including arguments,
|
182
204
|
# if any).
|
183
205
|
# @param [Hash] options Optional named parameters.
|
184
206
|
# @return [Object] The return value of the Pry command.
|
@@ -234,10 +256,11 @@ class Pry
|
|
234
256
|
config.system = DEFAULT_SYSTEM
|
235
257
|
config.editor = default_editor_for_platform
|
236
258
|
config.should_load_rc = true
|
259
|
+
config.should_load_local_rc = true
|
237
260
|
config.should_trap_interrupts = Helpers::BaseHelpers.jruby?
|
238
261
|
config.disable_auto_reload = false
|
239
262
|
config.command_prefix = ""
|
240
|
-
config.auto_indent =
|
263
|
+
config.auto_indent = Helpers::BaseHelpers.use_ansi_codes?
|
241
264
|
config.correct_indent = true
|
242
265
|
config.collision_warning = false
|
243
266
|
|
@@ -312,7 +335,6 @@ class Pry
|
|
312
335
|
self.current_line = 1
|
313
336
|
self.line_buffer = [""]
|
314
337
|
self.eval_path = "(pry)"
|
315
|
-
self.active_sessions = 0
|
316
338
|
|
317
339
|
fix_coderay_colors
|
318
340
|
end
|
@@ -328,7 +350,7 @@ class Pry
|
|
328
350
|
begin
|
329
351
|
require 'coderay/encoders/term'
|
330
352
|
CodeRay::Encoders::Term::TOKEN_COLORS
|
331
|
-
rescue
|
353
|
+
rescue
|
332
354
|
end
|
333
355
|
end
|
334
356
|
|
@@ -363,4 +385,14 @@ class Pry
|
|
363
385
|
end
|
364
386
|
end
|
365
387
|
|
388
|
+
# Grab a copy of the TOPLEVEL_BINDING without any local variables.
|
389
|
+
# This binding has a default definee of Object, and new methods are
|
390
|
+
# private (just as in TOPLEVEL_BINDING).
|
391
|
+
def self.__binding_impl__
|
392
|
+
binding
|
393
|
+
end
|
394
|
+
Pry.toplevel_binding = __binding_impl__
|
395
|
+
Pry.toplevel_binding.eval("private")
|
396
|
+
class << self; undef __binding_impl__; end
|
397
|
+
|
366
398
|
Pry.init
|
data/lib/pry/pry_instance.rb
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
require "pry/indent"
|
2
2
|
|
3
|
+
##
|
4
|
+
# Pry is a powerful alternative to the standard IRB shell for Ruby. It
|
5
|
+
# features syntax highlighting, a flexible plugin architecture, runtime
|
6
|
+
# invocation and source and documentation browsing.
|
7
|
+
#
|
8
|
+
# Pry can be started similar to other command line utilities by simply running
|
9
|
+
# the following command:
|
10
|
+
#
|
11
|
+
# pry
|
12
|
+
#
|
13
|
+
# Once inside Pry you can invoke the help message:
|
14
|
+
#
|
15
|
+
# help
|
16
|
+
#
|
17
|
+
# This will show a list of available commands and their usage. For more
|
18
|
+
# information about Pry you can refer to the following resources:
|
19
|
+
#
|
20
|
+
# * http://pry.github.com/
|
21
|
+
# * https://github.com/pry/pry
|
22
|
+
# * the IRC channel, which is #pry on the Freenode network
|
23
|
+
#
|
3
24
|
class Pry
|
4
25
|
|
5
26
|
attr_accessor :input
|
@@ -28,6 +49,11 @@ class Pry
|
|
28
49
|
|
29
50
|
attr_accessor :extra_sticky_locals
|
30
51
|
|
52
|
+
attr_accessor :suppress_output
|
53
|
+
|
54
|
+
# This is exposed via Pry::Command#state.
|
55
|
+
attr_reader :command_state
|
56
|
+
|
31
57
|
# Special treatment for hooks as we want to alert people of the
|
32
58
|
# changed API
|
33
59
|
attr_reader :hooks
|
@@ -57,8 +83,9 @@ class Pry
|
|
57
83
|
def initialize(options={})
|
58
84
|
refresh(options)
|
59
85
|
|
60
|
-
@binding_stack
|
61
|
-
@indent
|
86
|
+
@binding_stack = []
|
87
|
+
@indent = Pry::Indent.new
|
88
|
+
@command_state = {}
|
62
89
|
end
|
63
90
|
|
64
91
|
# Refresh the Pry instance settings from the Pry class.
|
@@ -117,7 +144,7 @@ class Pry
|
|
117
144
|
# @return [Object] The value the local was set to.
|
118
145
|
def inject_local(name, value, b)
|
119
146
|
Thread.current[:__pry_local__] = value.is_a?(Proc) ? value.call : value
|
120
|
-
b.eval("#{name} = Thread.current[:__pry_local__]")
|
147
|
+
b.eval("#{name} = ::Thread.current[:__pry_local__]")
|
121
148
|
ensure
|
122
149
|
Thread.current[:__pry_local__] = nil
|
123
150
|
end
|
@@ -172,7 +199,6 @@ class Pry
|
|
172
199
|
|
173
200
|
@input_array << nil # add empty input so _in_ and _out_ match
|
174
201
|
|
175
|
-
Pry.active_sessions += 1
|
176
202
|
binding_stack.push target
|
177
203
|
end
|
178
204
|
|
@@ -181,9 +207,8 @@ class Pry
|
|
181
207
|
def repl_epilogue(target)
|
182
208
|
exec_hook :after_session, output, target, self
|
183
209
|
|
184
|
-
Pry.active_sessions -= 1
|
185
210
|
binding_stack.pop
|
186
|
-
Pry.save_history if Pry.config.history.should_save
|
211
|
+
Pry.save_history if Pry.config.history.should_save
|
187
212
|
end
|
188
213
|
|
189
214
|
# Start a read-eval-print-loop.
|
@@ -196,7 +221,6 @@ class Pry
|
|
196
221
|
# Pry.new.repl(Object.new)
|
197
222
|
def repl(target=TOPLEVEL_BINDING)
|
198
223
|
target = Pry.binding_for(target)
|
199
|
-
target_self = target.eval('self')
|
200
224
|
|
201
225
|
repl_prologue(target)
|
202
226
|
|
@@ -246,6 +270,8 @@ class Pry
|
|
246
270
|
|
247
271
|
code = r(target)
|
248
272
|
|
273
|
+
exec_hook :before_eval, code, self
|
274
|
+
|
249
275
|
result = target.eval(code, Pry.eval_path, Pry.current_line)
|
250
276
|
set_last_result(result, target, code)
|
251
277
|
|
@@ -272,12 +298,11 @@ class Pry
|
|
272
298
|
target = Pry.binding_for(target)
|
273
299
|
@suppress_output = false
|
274
300
|
|
275
|
-
val = ""
|
276
301
|
loop do
|
277
302
|
begin
|
278
303
|
# eval_string will probably be mutated by this method
|
279
304
|
retrieve_line(eval_string, target)
|
280
|
-
rescue CommandError, Slop::InvalidOptionError => e
|
305
|
+
rescue CommandError, Slop::InvalidOptionError, MethodSource::SourceNotFoundError => e
|
281
306
|
output.puts "Error: #{e.message}"
|
282
307
|
end
|
283
308
|
|
@@ -298,9 +323,9 @@ class Pry
|
|
298
323
|
# Output the result or pass to an exception handler (if result is an exception).
|
299
324
|
def show_result(result)
|
300
325
|
if last_result_is_exception?
|
301
|
-
exception_handler.call
|
326
|
+
exception_handler.call(output, result, self)
|
302
327
|
else
|
303
|
-
print.call
|
328
|
+
print.call(output, result)
|
304
329
|
end
|
305
330
|
rescue RescuableException => e
|
306
331
|
# Being uber-paranoid here, given that this exception arose because we couldn't
|
@@ -346,7 +371,7 @@ class Pry
|
|
346
371
|
# Handle <Ctrl+C> like Bash, empty the current input buffer but do not quit.
|
347
372
|
# This is only for ruby-1.9; other versions of ruby do not let you send Interrupt
|
348
373
|
# from within Readline.
|
349
|
-
rescue Interrupt
|
374
|
+
rescue Interrupt
|
350
375
|
output.puts ""
|
351
376
|
eval_string.replace("")
|
352
377
|
return
|
@@ -514,6 +539,7 @@ class Pry
|
|
514
539
|
# Manage switching of input objects on encountering EOFErrors
|
515
540
|
def handle_read_errors
|
516
541
|
should_retry = true
|
542
|
+
exception_count = 0
|
517
543
|
begin
|
518
544
|
yield
|
519
545
|
rescue EOFError
|
@@ -527,6 +553,7 @@ class Pry
|
|
527
553
|
else
|
528
554
|
self.input = input_stack.pop
|
529
555
|
end
|
556
|
+
|
530
557
|
retry
|
531
558
|
|
532
559
|
# Interrupts are handled in r() because they need to tweak eval_string
|
@@ -539,6 +566,11 @@ class Pry
|
|
539
566
|
# anything about it.
|
540
567
|
rescue RescuableException => e
|
541
568
|
puts "Error: #{e.message}"
|
569
|
+
output.puts e.backtrace
|
570
|
+
exception_count += 1
|
571
|
+
if exception_count < 5
|
572
|
+
retry
|
573
|
+
end
|
542
574
|
puts "FATAL: Pry failed to get user input using `#{input}`."
|
543
575
|
puts "To fix this you may be able to pass input and output file descriptors to pry directly. e.g."
|
544
576
|
puts " Pry.config.input = STDIN"
|
@@ -594,15 +626,40 @@ class Pry
|
|
594
626
|
def select_prompt(eval_string, target)
|
595
627
|
target_self = target.eval('self')
|
596
628
|
|
629
|
+
open_token = @indent.open_delimiters.any? ? @indent.open_delimiters.last :
|
630
|
+
@indent.stack.last
|
631
|
+
|
632
|
+
c = OpenStruct.new(
|
633
|
+
:object => target_self,
|
634
|
+
:nesting_level => binding_stack.size - 1,
|
635
|
+
:open_token => open_token,
|
636
|
+
:session_line => Pry.history.session_line_count + 1,
|
637
|
+
:history_line => Pry.history.history_line_count + 1,
|
638
|
+
:expr_number => input_array.count,
|
639
|
+
:_pry_ => self,
|
640
|
+
:binding_stack => binding_stack,
|
641
|
+
:input_array => input_array,
|
642
|
+
:eval_string => eval_string,
|
643
|
+
:cont => !eval_string.empty?)
|
644
|
+
|
597
645
|
# If input buffer is empty then use normal prompt
|
598
646
|
if eval_string.empty?
|
599
|
-
Array(prompt).first
|
647
|
+
generate_prompt(Array(prompt).first, c)
|
600
648
|
|
601
649
|
# Otherwise use the wait prompt (indicating multi-line expression)
|
602
650
|
else
|
603
|
-
Array(prompt).last
|
651
|
+
generate_prompt(Array(prompt).last, c)
|
652
|
+
end
|
653
|
+
end
|
654
|
+
|
655
|
+
def generate_prompt(prompt_proc, conf)
|
656
|
+
if prompt_proc.arity == 1
|
657
|
+
prompt_proc.call(conf)
|
658
|
+
else
|
659
|
+
prompt_proc.call(conf.object, conf.nesting_level, conf._pry_)
|
604
660
|
end
|
605
661
|
end
|
662
|
+
private :generate_prompt
|
606
663
|
|
607
664
|
# the array that the prompt stack is stored in
|
608
665
|
def prompt_stack
|
@@ -0,0 +1,80 @@
|
|
1
|
+
class Pry
|
2
|
+
|
3
|
+
# A class to manage the loading of files through the REPL loop.
|
4
|
+
# This is an interesting trick as it processes your file as if it
|
5
|
+
# was user input in an interactive session. As a result, all Pry
|
6
|
+
# commands are available, and they are executed non-interactively. Furthermore
|
7
|
+
# the session becomes interactive when the repl loop processes a
|
8
|
+
# 'make-interactive' command in the file. The session also becomes
|
9
|
+
# interactive when an exception is encountered, enabling you to fix
|
10
|
+
# the error before returning to non-interactive processing with the
|
11
|
+
# 'make-non-interactive' command.
|
12
|
+
|
13
|
+
class REPLFileLoader
|
14
|
+
def initialize(file_name)
|
15
|
+
full_name = File.expand_path(file_name)
|
16
|
+
raise RuntimeError, "No such file: #{full_name}" if !File.exists?(full_name)
|
17
|
+
|
18
|
+
@content = StringIO.new(File.read(full_name))
|
19
|
+
end
|
20
|
+
|
21
|
+
# Switch to interactive mode, i.e take input from the user
|
22
|
+
# and use the regular print and exception handlers.
|
23
|
+
# @param [Pry] _pry_ the Pry instance to make interactive.
|
24
|
+
def interactive_mode(_pry_)
|
25
|
+
_pry_.input = Pry.config.input
|
26
|
+
_pry_.print = Pry.config.print
|
27
|
+
_pry_.exception_handler = Pry.config.exception_handler
|
28
|
+
end
|
29
|
+
|
30
|
+
# Switch to non-interactive mode. Essentially
|
31
|
+
# this means there is no result output
|
32
|
+
# and that the session becomes interactive when an exception is encountered.
|
33
|
+
# @param [Pry] _pry_ the Pry instance to make non-interactive.
|
34
|
+
def non_interactive_mode(_pry_)
|
35
|
+
_pry_.print = proc {}
|
36
|
+
_pry_.exception_handler = proc do |o, e, _pry_|
|
37
|
+
_pry_.run_command "cat --ex"
|
38
|
+
o.puts "...exception encountered, going interactive!"
|
39
|
+
interactive_mode(_pry_)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Define a few extra commands useful for flipping back & forth
|
44
|
+
# between interactive/non-interactive modes
|
45
|
+
def define_additional_commands
|
46
|
+
s = self
|
47
|
+
|
48
|
+
Pry::Commands.command "make-interactive", "Make the session interactive" do
|
49
|
+
_pry_.input_stack.push _pry_.input
|
50
|
+
s.interactive_mode(_pry_)
|
51
|
+
end
|
52
|
+
|
53
|
+
Pry::Commands.command "make-non-interactive", "Make the session non-interactive" do
|
54
|
+
_pry_.input = _pry_.input_stack.pop
|
55
|
+
s.non_interactive_mode(_pry_)
|
56
|
+
end
|
57
|
+
|
58
|
+
Pry::Commands.command "load-file", "Load another file through the repl" do |file_name|
|
59
|
+
content = StringIO.new(File.read(File.expand_path(file_name)))
|
60
|
+
_pry_.input_stack.push(_pry_.input)
|
61
|
+
_pry_.input = content
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Actually load the file through the REPL by setting file content
|
66
|
+
# as the REPL input stream.
|
67
|
+
def load
|
68
|
+
Pry.initial_session_setup
|
69
|
+
define_additional_commands
|
70
|
+
|
71
|
+
Pry.config.hooks.add_hook(:when_started, :start_non_interactively) do |o, t, _pry_|
|
72
|
+
non_interactive_mode(_pry_)
|
73
|
+
end
|
74
|
+
|
75
|
+
Pry.start(Pry.toplevel_binding,
|
76
|
+
:input => @content,
|
77
|
+
:input_stack => [StringIO.new("exit-all\n")])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
data/lib/pry/version.rb
CHANGED