pry 0.10.pre.1-i386-mswin32 → 0.10.0.pre3-i386-mswin32
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +702 -0
- data/LICENSE +2 -2
- data/{README.markdown → README.md} +41 -35
- data/lib/pry.rb +82 -139
- data/lib/pry/cli.rb +77 -30
- data/lib/pry/code.rb +122 -183
- data/lib/pry/code/code_file.rb +103 -0
- data/lib/pry/code/code_range.rb +71 -0
- data/lib/pry/code/loc.rb +92 -0
- data/lib/pry/code_object.rb +172 -0
- data/lib/pry/color_printer.rb +55 -0
- data/lib/pry/command.rb +184 -28
- data/lib/pry/command_set.rb +113 -59
- data/lib/pry/commands.rb +4 -27
- data/lib/pry/commands/amend_line.rb +99 -0
- data/lib/pry/commands/bang.rb +20 -0
- data/lib/pry/commands/bang_pry.rb +17 -0
- data/lib/pry/commands/cat.rb +62 -0
- data/lib/pry/commands/cat/abstract_formatter.rb +27 -0
- data/lib/pry/commands/cat/exception_formatter.rb +77 -0
- data/lib/pry/commands/cat/file_formatter.rb +67 -0
- data/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
- data/lib/pry/commands/cd.rb +41 -0
- data/lib/pry/commands/change_inspector.rb +27 -0
- data/lib/pry/commands/change_prompt.rb +26 -0
- data/lib/pry/commands/code_collector.rb +165 -0
- data/lib/pry/commands/disable_pry.rb +27 -0
- data/lib/pry/commands/disabled_commands.rb +2 -0
- data/lib/pry/commands/easter_eggs.rb +112 -0
- data/lib/pry/commands/edit.rb +195 -0
- data/lib/pry/commands/edit/exception_patcher.rb +25 -0
- data/lib/pry/commands/edit/file_and_line_locator.rb +36 -0
- data/lib/pry/commands/exit.rb +42 -0
- data/lib/pry/commands/exit_all.rb +29 -0
- data/lib/pry/commands/exit_program.rb +23 -0
- data/lib/pry/commands/find_method.rb +193 -0
- data/lib/pry/commands/fix_indent.rb +19 -0
- data/lib/pry/commands/gem_cd.rb +26 -0
- data/lib/pry/commands/gem_install.rb +32 -0
- data/lib/pry/commands/gem_list.rb +33 -0
- data/lib/pry/commands/gem_open.rb +29 -0
- data/lib/pry/commands/gist.rb +101 -0
- data/lib/pry/commands/help.rb +164 -0
- data/lib/pry/commands/hist.rb +180 -0
- data/lib/pry/commands/import_set.rb +22 -0
- data/lib/pry/commands/install_command.rb +53 -0
- data/lib/pry/commands/jump_to.rb +29 -0
- data/lib/pry/commands/list_inspectors.rb +35 -0
- data/lib/pry/commands/list_prompts.rb +35 -0
- data/lib/pry/commands/ls.rb +114 -0
- data/lib/pry/commands/ls/constants.rb +47 -0
- data/lib/pry/commands/ls/formatter.rb +49 -0
- data/lib/pry/commands/ls/globals.rb +48 -0
- data/lib/pry/commands/ls/grep.rb +21 -0
- data/lib/pry/commands/ls/instance_vars.rb +39 -0
- data/lib/pry/commands/ls/interrogatable.rb +18 -0
- data/lib/pry/commands/ls/jruby_hacks.rb +49 -0
- data/lib/pry/commands/ls/local_names.rb +35 -0
- data/lib/pry/commands/ls/local_vars.rb +39 -0
- data/lib/pry/commands/ls/ls_entity.rb +70 -0
- data/lib/pry/commands/ls/methods.rb +57 -0
- data/lib/pry/commands/ls/methods_helper.rb +46 -0
- data/lib/pry/commands/ls/self_methods.rb +32 -0
- data/lib/pry/commands/nesting.rb +25 -0
- data/lib/pry/commands/play.rb +103 -0
- data/lib/pry/commands/pry_backtrace.rb +25 -0
- data/lib/pry/commands/pry_version.rb +17 -0
- data/lib/pry/commands/raise_up.rb +32 -0
- data/lib/pry/commands/reload_code.rb +62 -0
- data/lib/pry/commands/reset.rb +18 -0
- data/lib/pry/commands/ri.rb +60 -0
- data/lib/pry/commands/save_file.rb +61 -0
- data/lib/pry/commands/shell_command.rb +48 -0
- data/lib/pry/commands/shell_mode.rb +25 -0
- data/lib/pry/commands/show_doc.rb +83 -0
- data/lib/pry/commands/show_info.rb +195 -0
- data/lib/pry/commands/show_input.rb +17 -0
- data/lib/pry/commands/show_source.rb +50 -0
- data/lib/pry/commands/simple_prompt.rb +22 -0
- data/lib/pry/commands/stat.rb +40 -0
- data/lib/pry/commands/switch_to.rb +23 -0
- data/lib/pry/commands/toggle_color.rb +24 -0
- data/lib/pry/commands/watch_expression.rb +105 -0
- data/lib/pry/commands/watch_expression/expression.rb +38 -0
- data/lib/pry/commands/whereami.rb +190 -0
- data/lib/pry/commands/wtf.rb +57 -0
- data/lib/pry/config.rb +20 -229
- data/lib/pry/config/behavior.rb +139 -0
- data/lib/pry/config/convenience.rb +26 -0
- data/lib/pry/config/default.rb +165 -0
- data/lib/pry/core_extensions.rb +59 -38
- data/lib/pry/editor.rb +133 -0
- data/lib/pry/exceptions.rb +77 -0
- data/lib/pry/helpers.rb +1 -0
- data/lib/pry/helpers/base_helpers.rb +40 -154
- data/lib/pry/helpers/command_helpers.rb +19 -130
- data/lib/pry/helpers/documentation_helpers.rb +21 -11
- data/lib/pry/helpers/table.rb +109 -0
- data/lib/pry/helpers/text.rb +8 -9
- data/lib/pry/history.rb +61 -45
- data/lib/pry/history_array.rb +11 -1
- data/lib/pry/hooks.rb +10 -32
- data/lib/pry/indent.rb +110 -38
- data/lib/pry/input_completer.rb +242 -0
- data/lib/pry/input_lock.rb +132 -0
- data/lib/pry/inspector.rb +27 -0
- data/lib/pry/last_exception.rb +61 -0
- data/lib/pry/method.rb +199 -200
- data/lib/pry/method/disowned.rb +53 -0
- data/lib/pry/method/patcher.rb +125 -0
- data/lib/pry/method/weird_method_locator.rb +186 -0
- data/lib/pry/module_candidate.rb +39 -33
- data/lib/pry/object_path.rb +82 -0
- data/lib/pry/output.rb +50 -0
- data/lib/pry/pager.rb +234 -0
- data/lib/pry/plugins.rb +4 -3
- data/lib/pry/prompt.rb +26 -0
- data/lib/pry/pry_class.rb +199 -227
- data/lib/pry/pry_instance.rb +344 -403
- data/lib/pry/rbx_path.rb +1 -1
- data/lib/pry/repl.rb +202 -0
- data/lib/pry/repl_file_loader.rb +20 -26
- data/lib/pry/rubygem.rb +82 -0
- data/lib/pry/terminal.rb +79 -0
- data/lib/pry/test/helper.rb +170 -0
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +133 -48
- metadata +132 -197
- data/.document +0 -2
- data/.gemtest +0 -0
- data/.gitignore +0 -16
- data/.travis.yml +0 -17
- data/.yardopts +0 -1
- data/CHANGELOG +0 -387
- data/CONTRIBUTORS +0 -36
- data/Gemfile +0 -2
- data/Rakefile +0 -137
- data/TODO +0 -117
- data/examples/example_basic.rb +0 -15
- data/examples/example_command_override.rb +0 -32
- data/examples/example_commands.rb +0 -36
- data/examples/example_hooks.rb +0 -9
- data/examples/example_image_edit.rb +0 -67
- data/examples/example_input.rb +0 -7
- data/examples/example_input2.rb +0 -29
- data/examples/example_output.rb +0 -11
- data/examples/example_print.rb +0 -6
- data/examples/example_prompt.rb +0 -9
- data/examples/helper.rb +0 -6
- data/lib/pry/completion.rb +0 -221
- data/lib/pry/custom_completions.rb +0 -6
- data/lib/pry/default_commands/cd.rb +0 -81
- data/lib/pry/default_commands/commands.rb +0 -62
- data/lib/pry/default_commands/context.rb +0 -98
- data/lib/pry/default_commands/easter_eggs.rb +0 -95
- data/lib/pry/default_commands/editing.rb +0 -420
- data/lib/pry/default_commands/find_method.rb +0 -169
- data/lib/pry/default_commands/gems.rb +0 -84
- data/lib/pry/default_commands/gist.rb +0 -187
- data/lib/pry/default_commands/help.rb +0 -127
- data/lib/pry/default_commands/hist.rb +0 -120
- data/lib/pry/default_commands/input_and_output.rb +0 -306
- data/lib/pry/default_commands/introspection.rb +0 -410
- data/lib/pry/default_commands/ls.rb +0 -272
- data/lib/pry/default_commands/misc.rb +0 -38
- data/lib/pry/default_commands/navigating_pry.rb +0 -110
- data/lib/pry/default_commands/whereami.rb +0 -92
- data/lib/pry/extended_commands/experimental.rb +0 -7
- data/lib/pry/rbx_method.rb +0 -13
- data/man/pry.1 +0 -195
- data/man/pry.1.html +0 -204
- data/man/pry.1.ronn +0 -141
- data/pry.gemspec +0 -46
- data/test/candidate_helper1.rb +0 -11
- data/test/candidate_helper2.rb +0 -8
- data/test/helper.rb +0 -223
- data/test/test_cli.rb +0 -78
- data/test/test_code.rb +0 -201
- data/test/test_command.rb +0 -712
- data/test/test_command_helpers.rb +0 -9
- data/test/test_command_integration.rb +0 -668
- data/test/test_command_set.rb +0 -610
- data/test/test_completion.rb +0 -62
- data/test/test_control_d_handler.rb +0 -45
- data/test/test_default_commands/example.erb +0 -5
- data/test/test_default_commands/test_cd.rb +0 -318
- data/test/test_default_commands/test_context.rb +0 -280
- data/test/test_default_commands/test_documentation.rb +0 -314
- data/test/test_default_commands/test_find_method.rb +0 -50
- data/test/test_default_commands/test_gems.rb +0 -18
- data/test/test_default_commands/test_help.rb +0 -57
- data/test/test_default_commands/test_input.rb +0 -428
- data/test/test_default_commands/test_introspection.rb +0 -511
- data/test/test_default_commands/test_ls.rb +0 -151
- data/test/test_default_commands/test_shell.rb +0 -343
- data/test/test_default_commands/test_show_source.rb +0 -432
- data/test/test_exception_whitelist.rb +0 -21
- data/test/test_history_array.rb +0 -65
- data/test/test_hooks.rb +0 -521
- data/test/test_indent.rb +0 -277
- data/test/test_input_stack.rb +0 -86
- data/test/test_method.rb +0 -401
- data/test/test_pry.rb +0 -463
- data/test/test_pry_defaults.rb +0 -419
- data/test/test_pry_history.rb +0 -84
- data/test/test_pry_output.rb +0 -41
- data/test/test_sticky_locals.rb +0 -155
- data/test/test_syntax_checking.rb +0 -65
- data/test/test_wrapped_module.rb +0 -174
- data/test/testrc +0 -2
- data/test/testrcbad +0 -2
- data/wiki/Customizing-pry.md +0 -397
- data/wiki/Home.md +0 -4
data/lib/pry/rbx_path.rb
CHANGED
@@ -2,7 +2,7 @@ class Pry
|
|
2
2
|
module RbxPath
|
3
3
|
module_function
|
4
4
|
def is_core_path?(path)
|
5
|
-
path.start_with?("kernel") || path.start_with?("lib")
|
5
|
+
Pry::Helpers::BaseHelpers.rbx? && (path.start_with?("kernel") || path.start_with?("lib")) && File.exist?(convert_path_to_full(path))
|
6
6
|
end
|
7
7
|
|
8
8
|
def convert_path_to_full(path)
|
data/lib/pry/repl.rb
ADDED
@@ -0,0 +1,202 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
class Pry
|
4
|
+
class REPL
|
5
|
+
extend Forwardable
|
6
|
+
def_delegators :@pry, :input, :output
|
7
|
+
|
8
|
+
# @return [Pry] The instance of {Pry} that the user is controlling.
|
9
|
+
attr_accessor :pry
|
10
|
+
|
11
|
+
# Instantiate a new {Pry} instance with the given options, then start a
|
12
|
+
# {REPL} instance wrapping it.
|
13
|
+
# @option options See {Pry#initialize}
|
14
|
+
def self.start(options)
|
15
|
+
new(Pry.new(options)).start
|
16
|
+
end
|
17
|
+
|
18
|
+
# Create an instance of {REPL} wrapping the given {Pry}.
|
19
|
+
# @param [Pry] pry The instance of {Pry} that this {REPL} will control.
|
20
|
+
# @param [Hash] options Options for this {REPL} instance.
|
21
|
+
# @option options [Object] :target The initial target of the session.
|
22
|
+
def initialize(pry, options = {})
|
23
|
+
@pry = pry
|
24
|
+
@indent = Pry::Indent.new
|
25
|
+
|
26
|
+
if options[:target]
|
27
|
+
@pry.push_binding options[:target]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Start the read-eval-print loop.
|
32
|
+
# @return [Object?] If the session throws `:breakout`, return the value
|
33
|
+
# thrown with it.
|
34
|
+
# @raise [Exception] If the session throws `:raise_up`, raise the exception
|
35
|
+
# thrown with it.
|
36
|
+
def start
|
37
|
+
prologue
|
38
|
+
Pry::InputLock.for(:all).with_ownership { repl }
|
39
|
+
ensure
|
40
|
+
epilogue
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
# Set up the repl session.
|
46
|
+
# @return [void]
|
47
|
+
def prologue
|
48
|
+
pry.exec_hook :before_session, pry.output, pry.current_binding, pry
|
49
|
+
|
50
|
+
# Clear the line before starting Pry. This fixes issue #566.
|
51
|
+
if pry.config.correct_indent
|
52
|
+
Kernel.print Pry::Helpers::BaseHelpers.windows_ansi? ? "\e[0F" : "\e[0G"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# The actual read-eval-print loop.
|
57
|
+
#
|
58
|
+
# The {REPL} instance is responsible for reading and looping, whereas the
|
59
|
+
# {Pry} instance is responsible for evaluating user input and printing
|
60
|
+
# return values and command output.
|
61
|
+
#
|
62
|
+
# @return [Object?] If the session throws `:breakout`, return the value
|
63
|
+
# thrown with it.
|
64
|
+
# @raise [Exception] If the session throws `:raise_up`, raise the exception
|
65
|
+
# thrown with it.
|
66
|
+
def repl
|
67
|
+
loop do
|
68
|
+
case val = read
|
69
|
+
when :control_c
|
70
|
+
output.puts ""
|
71
|
+
pry.reset_eval_string
|
72
|
+
when :no_more_input
|
73
|
+
output.puts "" if output.tty?
|
74
|
+
break
|
75
|
+
else
|
76
|
+
output.puts "" if val.nil? && output.tty?
|
77
|
+
return pry.exit_value unless pry.eval(val)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Clean up after the repl session.
|
83
|
+
# @return [void]
|
84
|
+
def epilogue
|
85
|
+
pry.exec_hook :after_session, pry.output, pry.current_binding, pry
|
86
|
+
end
|
87
|
+
|
88
|
+
# Read a line of input from the user.
|
89
|
+
# @return [String] The line entered by the user.
|
90
|
+
# @return [nil] On `<Ctrl-D>`.
|
91
|
+
# @return [:control_c] On `<Ctrl+C>`.
|
92
|
+
# @return [:no_more_input] On EOF.
|
93
|
+
def read
|
94
|
+
@indent.reset if pry.eval_string.empty?
|
95
|
+
current_prompt = pry.select_prompt
|
96
|
+
indentation = pry.config.auto_indent ? @indent.current_prefix : ''
|
97
|
+
|
98
|
+
val = read_line("#{current_prompt}#{indentation}")
|
99
|
+
|
100
|
+
# Return nil for EOF, :no_more_input for error, or :control_c for <Ctrl-C>
|
101
|
+
return val unless String === val
|
102
|
+
|
103
|
+
if pry.config.auto_indent
|
104
|
+
original_val = "#{indentation}#{val}"
|
105
|
+
indented_val = @indent.indent(val)
|
106
|
+
|
107
|
+
if output.tty? && pry.config.correct_indent && Pry::Helpers::BaseHelpers.use_ansi_codes?
|
108
|
+
output.print @indent.correct_indentation(
|
109
|
+
current_prompt, indented_val,
|
110
|
+
original_val.length - indented_val.length
|
111
|
+
)
|
112
|
+
output.flush
|
113
|
+
end
|
114
|
+
else
|
115
|
+
indented_val = val
|
116
|
+
end
|
117
|
+
|
118
|
+
indented_val
|
119
|
+
end
|
120
|
+
|
121
|
+
# Manage switching of input objects on encountering `EOFError`s.
|
122
|
+
# @return [Object] Whatever the given block returns.
|
123
|
+
# @return [:no_more_input] Indicates that no more input can be read.
|
124
|
+
def handle_read_errors
|
125
|
+
should_retry = true
|
126
|
+
exception_count = 0
|
127
|
+
|
128
|
+
begin
|
129
|
+
yield
|
130
|
+
rescue EOFError
|
131
|
+
pry.config.input = Pry.config.input
|
132
|
+
if !should_retry
|
133
|
+
output.puts "Error: Pry ran out of things to read from! " \
|
134
|
+
"Attempting to break out of REPL."
|
135
|
+
return :no_more_input
|
136
|
+
end
|
137
|
+
should_retry = false
|
138
|
+
retry
|
139
|
+
|
140
|
+
# Handle <Ctrl+C> like Bash: empty the current input buffer, but don't
|
141
|
+
# quit. This is only for MRI 1.9; other versions of Ruby don't let you
|
142
|
+
# send Interrupt from within Readline.
|
143
|
+
rescue Interrupt
|
144
|
+
return :control_c
|
145
|
+
|
146
|
+
# If we get a random error when trying to read a line we don't want to
|
147
|
+
# automatically retry, as the user will see a lot of error messages
|
148
|
+
# scroll past and be unable to do anything about it.
|
149
|
+
rescue RescuableException => e
|
150
|
+
puts "Error: #{e.message}"
|
151
|
+
output.puts e.backtrace
|
152
|
+
exception_count += 1
|
153
|
+
if exception_count < 5
|
154
|
+
retry
|
155
|
+
end
|
156
|
+
puts "FATAL: Pry failed to get user input using `#{input}`."
|
157
|
+
puts "To fix this you may be able to pass input and output file " \
|
158
|
+
"descriptors to pry directly. e.g."
|
159
|
+
puts " Pry.config.input = STDIN"
|
160
|
+
puts " Pry.config.output = STDOUT"
|
161
|
+
puts " binding.pry"
|
162
|
+
return :no_more_input
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
# Returns the next line of input to be sent to the {Pry} instance.
|
167
|
+
# @param [String] current_prompt The prompt to use for input.
|
168
|
+
# @return [String?] The next line of input, or `nil` on <Ctrl-D>.
|
169
|
+
def read_line(current_prompt)
|
170
|
+
handle_read_errors do
|
171
|
+
if defined? Coolline and input.is_a? Coolline
|
172
|
+
input.completion_proc = proc do |cool|
|
173
|
+
completions = @pry.complete cool.completed_word
|
174
|
+
completions.compact
|
175
|
+
end
|
176
|
+
elsif input.respond_to? :completion_proc=
|
177
|
+
input.completion_proc = proc do |input|
|
178
|
+
@pry.complete input
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
if defined?(Readline) and input == Readline
|
183
|
+
input_readline(current_prompt, false) # false since we'll add it manually
|
184
|
+
elsif defined? Coolline and input.is_a? Coolline
|
185
|
+
input_readline(current_prompt)
|
186
|
+
else
|
187
|
+
if input.method(:readline).arity == 1
|
188
|
+
input_readline(current_prompt)
|
189
|
+
else
|
190
|
+
input_readline
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
def input_readline(*args)
|
197
|
+
Pry::InputLock.for(:all).interruptible_region do
|
198
|
+
input.readline(*args)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
data/lib/pry/repl_file_loader.rb
CHANGED
@@ -15,29 +15,40 @@ class Pry
|
|
15
15
|
full_name = File.expand_path(file_name)
|
16
16
|
raise RuntimeError, "No such file: #{full_name}" if !File.exists?(full_name)
|
17
17
|
|
18
|
-
|
18
|
+
define_additional_commands
|
19
|
+
@content = File.read(full_name)
|
19
20
|
end
|
20
21
|
|
21
22
|
# Switch to interactive mode, i.e take input from the user
|
22
23
|
# and use the regular print and exception handlers.
|
23
24
|
# @param [Pry] _pry_ the Pry instance to make interactive.
|
24
25
|
def interactive_mode(_pry_)
|
25
|
-
_pry_.input = Pry.config.input
|
26
|
-
_pry_.print = Pry.config.print
|
27
|
-
_pry_.exception_handler = Pry.config.exception_handler
|
26
|
+
_pry_.config.input = Pry.config.input
|
27
|
+
_pry_.config.print = Pry.config.print
|
28
|
+
_pry_.config.exception_handler = Pry.config.exception_handler
|
29
|
+
Pry::REPL.new(_pry_).start
|
28
30
|
end
|
29
31
|
|
30
32
|
# Switch to non-interactive mode. Essentially
|
31
33
|
# this means there is no result output
|
32
34
|
# and that the session becomes interactive when an exception is encountered.
|
33
35
|
# @param [Pry] _pry_ the Pry instance to make non-interactive.
|
34
|
-
def non_interactive_mode(_pry_)
|
36
|
+
def non_interactive_mode(_pry_, content)
|
35
37
|
_pry_.print = proc {}
|
36
|
-
_pry_.exception_handler = proc do |o, e,
|
37
|
-
|
38
|
+
_pry_.exception_handler = proc do |o, e, _p_|
|
39
|
+
_p_.run_command "cat --ex"
|
38
40
|
o.puts "...exception encountered, going interactive!"
|
39
41
|
interactive_mode(_pry_)
|
40
42
|
end
|
43
|
+
|
44
|
+
content.lines.each do |line|
|
45
|
+
break unless _pry_.eval line, :generated => true
|
46
|
+
end
|
47
|
+
|
48
|
+
unless _pry_.eval_string.empty?
|
49
|
+
_pry_.output.puts "#{_pry_.eval_string}...exception encountered, going interactive!"
|
50
|
+
interactive_mode(_pry_)
|
51
|
+
end
|
41
52
|
end
|
42
53
|
|
43
54
|
# Define a few extra commands useful for flipping back & forth
|
@@ -46,35 +57,18 @@ class Pry
|
|
46
57
|
s = self
|
47
58
|
|
48
59
|
Pry::Commands.command "make-interactive", "Make the session interactive" do
|
49
|
-
_pry_.input_stack.push _pry_.input
|
50
60
|
s.interactive_mode(_pry_)
|
51
61
|
end
|
52
62
|
|
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
63
|
Pry::Commands.command "load-file", "Load another file through the repl" do |file_name|
|
59
|
-
|
60
|
-
_pry_.input_stack.push(_pry_.input)
|
61
|
-
_pry_.input = content
|
64
|
+
s.non_interactive_mode(_pry_, File.read(File.expand_path(file_name)))
|
62
65
|
end
|
63
66
|
end
|
64
67
|
|
65
68
|
# Actually load the file through the REPL by setting file content
|
66
69
|
# as the REPL input stream.
|
67
70
|
def load
|
68
|
-
Pry.
|
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")])
|
71
|
+
non_interactive_mode(Pry.new, @content)
|
78
72
|
end
|
79
73
|
end
|
80
74
|
end
|
data/lib/pry/rubygem.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
class Pry
|
4
|
+
module Rubygem
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def installed?(name)
|
8
|
+
if Gem::Specification.respond_to?(:find_all_by_name)
|
9
|
+
Gem::Specification.find_all_by_name(name).any?
|
10
|
+
else
|
11
|
+
Gem.source_index.find_name(name).first
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Get the gem spec object for the given gem name.
|
16
|
+
#
|
17
|
+
# @param [String] name
|
18
|
+
# @return [Gem::Specification]
|
19
|
+
def spec(name)
|
20
|
+
specs = if Gem::Specification.respond_to?(:each)
|
21
|
+
Gem::Specification.find_all_by_name(name)
|
22
|
+
else
|
23
|
+
Gem.source_index.find_name(name)
|
24
|
+
end
|
25
|
+
|
26
|
+
first_spec = specs.sort_by{ |spec| Gem::Version.new(spec.version) }.last
|
27
|
+
|
28
|
+
first_spec or raise CommandError, "Gem `#{name}` not found"
|
29
|
+
end
|
30
|
+
|
31
|
+
# List gems matching a pattern.
|
32
|
+
#
|
33
|
+
# @param [Regexp] pattern
|
34
|
+
# @return [Array<Gem::Specification>]
|
35
|
+
def list(pattern = /.*/)
|
36
|
+
if Gem::Specification.respond_to?(:each)
|
37
|
+
Gem::Specification.select{|spec| spec.name =~ pattern }
|
38
|
+
else
|
39
|
+
Gem.source_index.gems.values.select{|spec| spec.name =~ pattern }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Completion function for gem-cd and gem-open.
|
44
|
+
#
|
45
|
+
# @param [String] so_far what the user's typed so far
|
46
|
+
# @return [Array<String>] completions
|
47
|
+
def complete(so_far)
|
48
|
+
if so_far =~ / ([^ ]*)\z/
|
49
|
+
self.list(%r{\A#{$2}}).map(&:name)
|
50
|
+
else
|
51
|
+
self.list.map(&:name)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Installs a gem with all its dependencies.
|
56
|
+
#
|
57
|
+
# @param [String] name
|
58
|
+
# @return [void]
|
59
|
+
def install(name)
|
60
|
+
gemrc_opts = Gem.configuration['gem'].split(' ')
|
61
|
+
destination = if gemrc_opts.include?('--user-install')
|
62
|
+
Gem.user_dir
|
63
|
+
elsif File.writable?(Gem.dir)
|
64
|
+
Gem.dir
|
65
|
+
else
|
66
|
+
Gem.user_dir
|
67
|
+
end
|
68
|
+
installer = Gem::DependencyInstaller.new(:install_dir => destination)
|
69
|
+
installer.install(name)
|
70
|
+
rescue Errno::EACCES
|
71
|
+
raise CommandError,
|
72
|
+
"Insufficient permissions to install #{ Pry::Helpers::Text.green(name) }."
|
73
|
+
rescue Gem::GemNotFoundException
|
74
|
+
raise CommandError,
|
75
|
+
"Gem #{ Pry::Helpers::Text.green(name) } not found. Aborting installation."
|
76
|
+
else
|
77
|
+
Gem.refresh
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
data/lib/pry/terminal.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
class Pry::Terminal
|
2
|
+
class << self
|
3
|
+
# Return a pair of [rows, columns] which gives the size of the window.
|
4
|
+
#
|
5
|
+
# If the window size cannot be determined, return nil.
|
6
|
+
def screen_size
|
7
|
+
rows, cols = actual_screen_size
|
8
|
+
if rows && cols
|
9
|
+
[rows.to_i, cols.to_i]
|
10
|
+
else
|
11
|
+
nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Return a screen size or a default if that fails.
|
16
|
+
def size! default = [27, 80]
|
17
|
+
screen_size || default
|
18
|
+
end
|
19
|
+
|
20
|
+
# Return a screen width or the default if that fails.
|
21
|
+
def width!
|
22
|
+
size![1]
|
23
|
+
end
|
24
|
+
|
25
|
+
# Return a screen height or the default if that fails.
|
26
|
+
def height!
|
27
|
+
size![0]
|
28
|
+
end
|
29
|
+
|
30
|
+
def actual_screen_size
|
31
|
+
# The best way, if possible (requires non-jruby ≥1.9 or io-console gem)
|
32
|
+
screen_size_according_to_io_console or
|
33
|
+
# Fall back to the old standby, though it might be stale:
|
34
|
+
screen_size_according_to_env or
|
35
|
+
# Fall further back, though this one is also out of date without something
|
36
|
+
# calling Readline.set_screen_size
|
37
|
+
screen_size_according_to_readline or
|
38
|
+
# Windows users can otherwise run ansicon and get a decent answer:
|
39
|
+
screen_size_according_to_ansicon_env
|
40
|
+
end
|
41
|
+
|
42
|
+
def screen_size_according_to_io_console
|
43
|
+
return if Pry::Helpers::BaseHelpers.jruby?
|
44
|
+
require 'io/console'
|
45
|
+
$stdout.winsize if $stdout.tty? and $stdout.respond_to?(:winsize)
|
46
|
+
rescue LoadError
|
47
|
+
# They probably don't have the io/console stdlib or the io-console gem.
|
48
|
+
# We'll keep trying.
|
49
|
+
end
|
50
|
+
|
51
|
+
def screen_size_according_to_env
|
52
|
+
size = [ENV['LINES'] || ENV['ROWS'], ENV['COLUMNS']]
|
53
|
+
size if nonzero_column?(size)
|
54
|
+
end
|
55
|
+
|
56
|
+
def screen_size_according_to_readline
|
57
|
+
if defined?(Readline) && Readline.respond_to?(:get_screen_size)
|
58
|
+
size = Readline.get_screen_size
|
59
|
+
size if nonzero_column?(size)
|
60
|
+
end
|
61
|
+
rescue Java::JavaLang::NullPointerException
|
62
|
+
# This rescue won't happen on jrubies later than:
|
63
|
+
# https://github.com/jruby/jruby/pull/436
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def screen_size_according_to_ansicon_env
|
68
|
+
return unless ENV['ANSICON'] =~ /\((.*)x(.*)\)/
|
69
|
+
size = [$2, $1]
|
70
|
+
size if nonzero_column?(size)
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def nonzero_column?(size)
|
76
|
+
size[1].to_i > 0
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|