pry 0.9.12.2 → 0.14.2
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 +5 -5
- data/CHANGELOG.md +1141 -0
- data/LICENSE +2 -2
- data/README.md +466 -0
- data/bin/pry +4 -7
- data/lib/pry/basic_object.rb +10 -0
- data/lib/pry/block_command.rb +22 -0
- data/lib/pry/class_command.rb +194 -0
- data/lib/pry/cli.rb +97 -92
- data/lib/pry/code/code_file.rb +114 -0
- data/lib/pry/code/code_range.rb +7 -4
- data/lib/pry/code/loc.rb +27 -14
- data/lib/pry/code.rb +62 -90
- data/lib/pry/code_object.rb +83 -39
- data/lib/pry/color_printer.rb +66 -0
- data/lib/pry/command.rb +202 -371
- data/lib/pry/command_set.rb +151 -133
- data/lib/pry/command_state.rb +31 -0
- data/lib/pry/commands/amend_line.rb +86 -82
- data/lib/pry/commands/bang.rb +18 -14
- data/lib/pry/commands/bang_pry.rb +15 -11
- data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
- data/lib/pry/commands/cat/exception_formatter.rb +85 -73
- data/lib/pry/commands/cat/file_formatter.rb +56 -63
- data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
- data/lib/pry/commands/cat.rb +64 -47
- data/lib/pry/commands/cd.rb +42 -26
- data/lib/pry/commands/change_inspector.rb +34 -0
- data/lib/pry/commands/change_prompt.rb +51 -0
- data/lib/pry/commands/clear_screen.rb +20 -0
- data/lib/pry/commands/code_collector.rb +148 -131
- data/lib/pry/commands/disable_pry.rb +23 -19
- data/lib/pry/commands/easter_eggs.rb +23 -34
- data/lib/pry/commands/edit/exception_patcher.rb +21 -17
- data/lib/pry/commands/edit/file_and_line_locator.rb +33 -24
- data/lib/pry/commands/edit.rb +183 -167
- data/lib/pry/commands/exit.rb +40 -35
- data/lib/pry/commands/exit_all.rb +24 -20
- data/lib/pry/commands/exit_program.rb +20 -17
- data/lib/pry/commands/find_method.rb +167 -167
- data/lib/pry/commands/fix_indent.rb +16 -12
- data/lib/pry/commands/help.rb +140 -133
- data/lib/pry/commands/hist.rb +153 -132
- data/lib/pry/commands/import_set.rb +20 -15
- data/lib/pry/commands/jump_to.rb +25 -21
- data/lib/pry/commands/list_inspectors.rb +42 -0
- data/lib/pry/commands/ls/constants.rb +75 -0
- data/lib/pry/commands/ls/formatter.rb +55 -0
- data/lib/pry/commands/ls/globals.rb +50 -0
- data/lib/pry/commands/ls/grep.rb +23 -0
- data/lib/pry/commands/ls/instance_vars.rb +40 -0
- data/lib/pry/commands/ls/interrogatable.rb +24 -0
- data/lib/pry/commands/ls/jruby_hacks.rb +55 -0
- data/lib/pry/commands/ls/local_names.rb +37 -0
- data/lib/pry/commands/ls/local_vars.rb +47 -0
- data/lib/pry/commands/ls/ls_entity.rb +65 -0
- data/lib/pry/commands/ls/methods.rb +55 -0
- data/lib/pry/commands/ls/methods_helper.rb +50 -0
- data/lib/pry/commands/ls/self_methods.rb +34 -0
- data/lib/pry/commands/ls.rb +100 -303
- data/lib/pry/commands/nesting.rb +21 -17
- data/lib/pry/commands/play.rb +93 -49
- data/lib/pry/commands/pry_backtrace.rb +22 -18
- data/lib/pry/commands/pry_version.rb +15 -11
- data/lib/pry/commands/raise_up.rb +33 -27
- data/lib/pry/commands/reload_code.rb +57 -48
- data/lib/pry/commands/reset.rb +16 -12
- data/lib/pry/commands/ri.rb +57 -38
- data/lib/pry/commands/save_file.rb +45 -43
- data/lib/pry/commands/shell_command.rb +66 -34
- data/lib/pry/commands/shell_mode.rb +22 -20
- data/lib/pry/commands/show_doc.rb +80 -65
- data/lib/pry/commands/show_info.rb +193 -159
- data/lib/pry/commands/show_input.rb +16 -11
- data/lib/pry/commands/show_source.rb +113 -33
- data/lib/pry/commands/stat.rb +35 -31
- data/lib/pry/commands/switch_to.rb +21 -15
- data/lib/pry/commands/toggle_color.rb +21 -13
- data/lib/pry/commands/watch_expression/expression.rb +43 -0
- data/lib/pry/commands/watch_expression.rb +110 -0
- data/lib/pry/commands/whereami.rb +157 -134
- data/lib/pry/commands/wtf.rb +78 -40
- data/lib/pry/config/attributable.rb +22 -0
- data/lib/pry/config/lazy_value.rb +29 -0
- data/lib/pry/config/memoized_value.rb +34 -0
- data/lib/pry/config/value.rb +24 -0
- data/lib/pry/config.rb +290 -220
- data/lib/pry/control_d_handler.rb +28 -0
- data/lib/pry/core_extensions.rb +50 -27
- data/lib/pry/editor.rb +130 -102
- data/lib/pry/env.rb +18 -0
- data/lib/pry/exception_handler.rb +43 -0
- data/lib/pry/exceptions.rb +73 -0
- data/lib/pry/forwardable.rb +27 -0
- data/lib/pry/helpers/base_helpers.rb +22 -151
- data/lib/pry/helpers/command_helpers.rb +55 -63
- data/lib/pry/helpers/documentation_helpers.rb +21 -13
- data/lib/pry/helpers/options_helpers.rb +15 -8
- data/lib/pry/helpers/platform.rb +55 -0
- data/lib/pry/helpers/table.rb +44 -32
- data/lib/pry/helpers/text.rb +96 -86
- data/lib/pry/helpers.rb +3 -0
- data/lib/pry/history.rb +101 -70
- data/lib/pry/hooks.rb +67 -137
- data/lib/pry/indent.rb +79 -73
- data/lib/pry/input_completer.rb +283 -0
- data/lib/pry/input_lock.rb +129 -0
- data/lib/pry/inspector.rb +39 -0
- data/lib/pry/last_exception.rb +61 -0
- data/lib/pry/method/disowned.rb +19 -5
- data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +51 -42
- data/lib/pry/method/weird_method_locator.rb +80 -44
- data/lib/pry/method.rb +225 -176
- data/lib/pry/object_path.rb +91 -0
- data/lib/pry/output.rb +136 -0
- data/lib/pry/pager.rb +227 -68
- data/lib/pry/prompt.rb +214 -0
- data/lib/pry/pry_class.rb +216 -289
- data/lib/pry/pry_instance.rb +438 -500
- data/lib/pry/repl.rb +256 -0
- data/lib/pry/repl_file_loader.rb +34 -35
- data/lib/pry/ring.rb +89 -0
- data/lib/pry/slop/LICENSE +20 -0
- data/lib/pry/slop/commands.rb +190 -0
- data/lib/pry/slop/option.rb +210 -0
- data/lib/pry/slop.rb +672 -0
- data/lib/pry/syntax_highlighter.rb +26 -0
- data/lib/pry/system_command_handler.rb +17 -0
- data/lib/pry/testable/evalable.rb +24 -0
- data/lib/pry/testable/mockable.rb +22 -0
- data/lib/pry/testable/pry_tester.rb +88 -0
- data/lib/pry/testable/utility.rb +34 -0
- data/lib/pry/testable/variables.rb +52 -0
- data/lib/pry/testable.rb +68 -0
- data/lib/pry/version.rb +3 -1
- data/lib/pry/warning.rb +20 -0
- data/lib/pry/{module_candidate.rb → wrapped_module/candidate.rb} +36 -43
- data/lib/pry/wrapped_module.rb +102 -103
- data/lib/pry.rb +135 -261
- metadata +94 -283
- data/.document +0 -2
- data/.gitignore +0 -16
- data/.travis.yml +0 -21
- data/.yardopts +0 -1
- data/CHANGELOG +0 -534
- data/CONTRIBUTORS +0 -55
- data/Gemfile +0 -9
- data/Guardfile +0 -62
- data/README.markdown +0 -400
- data/Rakefile +0 -140
- data/TODO +0 -117
- data/lib/pry/commands/disabled_commands.rb +0 -2
- data/lib/pry/commands/gem_cd.rb +0 -26
- data/lib/pry/commands/gem_install.rb +0 -29
- data/lib/pry/commands/gem_list.rb +0 -33
- data/lib/pry/commands/gem_open.rb +0 -29
- data/lib/pry/commands/gist.rb +0 -102
- data/lib/pry/commands/install_command.rb +0 -51
- data/lib/pry/commands/simple_prompt.rb +0 -22
- data/lib/pry/commands.rb +0 -6
- data/lib/pry/completion.rb +0 -304
- data/lib/pry/custom_completions.rb +0 -6
- data/lib/pry/history_array.rb +0 -116
- data/lib/pry/plugins.rb +0 -103
- data/lib/pry/rbx_method.rb +0 -13
- data/lib/pry/rbx_path.rb +0 -22
- data/lib/pry/rubygem.rb +0 -74
- data/lib/pry/terminal.rb +0 -78
- data/lib/pry/test/helper.rb +0 -185
- data/man/pry.1 +0 -195
- data/man/pry.1.html +0 -204
- data/man/pry.1.ronn +0 -141
- data/pry.gemspec +0 -30
- data/spec/Procfile +0 -3
- data/spec/cli_spec.rb +0 -78
- data/spec/code_object_spec.rb +0 -277
- data/spec/code_spec.rb +0 -219
- data/spec/command_helpers_spec.rb +0 -29
- data/spec/command_integration_spec.rb +0 -644
- data/spec/command_set_spec.rb +0 -627
- data/spec/command_spec.rb +0 -821
- data/spec/commands/amend_line_spec.rb +0 -247
- data/spec/commands/bang_spec.rb +0 -19
- data/spec/commands/cat_spec.rb +0 -164
- data/spec/commands/cd_spec.rb +0 -250
- data/spec/commands/disable_pry_spec.rb +0 -25
- data/spec/commands/edit_spec.rb +0 -727
- data/spec/commands/exit_all_spec.rb +0 -34
- data/spec/commands/exit_program_spec.rb +0 -19
- data/spec/commands/exit_spec.rb +0 -34
- data/spec/commands/find_method_spec.rb +0 -70
- data/spec/commands/gem_list_spec.rb +0 -26
- data/spec/commands/gist_spec.rb +0 -79
- data/spec/commands/help_spec.rb +0 -56
- data/spec/commands/hist_spec.rb +0 -181
- data/spec/commands/jump_to_spec.rb +0 -15
- data/spec/commands/ls_spec.rb +0 -181
- data/spec/commands/play_spec.rb +0 -140
- data/spec/commands/raise_up_spec.rb +0 -56
- data/spec/commands/save_file_spec.rb +0 -177
- data/spec/commands/show_doc_spec.rb +0 -510
- data/spec/commands/show_input_spec.rb +0 -17
- data/spec/commands/show_source_spec.rb +0 -782
- data/spec/commands/whereami_spec.rb +0 -203
- data/spec/completion_spec.rb +0 -239
- data/spec/control_d_handler_spec.rb +0 -58
- data/spec/documentation_helper_spec.rb +0 -73
- data/spec/editor_spec.rb +0 -79
- data/spec/exception_whitelist_spec.rb +0 -21
- data/spec/fixtures/candidate_helper1.rb +0 -11
- data/spec/fixtures/candidate_helper2.rb +0 -8
- data/spec/fixtures/example.erb +0 -5
- data/spec/fixtures/example_nesting.rb +0 -33
- data/spec/fixtures/show_source_doc_examples.rb +0 -15
- data/spec/fixtures/testrc +0 -2
- data/spec/fixtures/testrcbad +0 -2
- data/spec/fixtures/whereami_helper.rb +0 -6
- data/spec/helper.rb +0 -34
- data/spec/helpers/bacon.rb +0 -86
- data/spec/helpers/mock_pry.rb +0 -43
- data/spec/helpers/table_spec.rb +0 -105
- data/spec/history_array_spec.rb +0 -67
- data/spec/hooks_spec.rb +0 -522
- data/spec/indent_spec.rb +0 -301
- data/spec/input_stack_spec.rb +0 -90
- data/spec/method_spec.rb +0 -482
- data/spec/prompt_spec.rb +0 -60
- data/spec/pry_defaults_spec.rb +0 -419
- data/spec/pry_history_spec.rb +0 -99
- data/spec/pry_output_spec.rb +0 -95
- data/spec/pry_spec.rb +0 -504
- data/spec/run_command_spec.rb +0 -25
- data/spec/sticky_locals_spec.rb +0 -157
- data/spec/syntax_checking_spec.rb +0 -81
- data/spec/wrapped_module_spec.rb +0 -261
- data/wiki/Customizing-pry.md +0 -397
- data/wiki/Home.md +0 -4
@@ -1,29 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
class Command::GemInstall < Pry::ClassCommand
|
3
|
-
match 'gem-install'
|
4
|
-
group 'Gems'
|
5
|
-
description 'Install a gem and refresh the gem cache.'
|
6
|
-
command_options :argument_required => true
|
7
|
-
|
8
|
-
banner <<-'BANNER'
|
9
|
-
Usage: gem-install GEM_NAME
|
10
|
-
|
11
|
-
Installs the given gem and refreshes the gem cache so that you can immediately
|
12
|
-
'require GEM_FILE'.
|
13
|
-
|
14
|
-
gem-install pry-stack_explorer
|
15
|
-
BANNER
|
16
|
-
|
17
|
-
def setup
|
18
|
-
require 'rubygems/dependency_installer' unless defined? Gem::DependencyInstaller
|
19
|
-
end
|
20
|
-
|
21
|
-
def process(gem)
|
22
|
-
Rubygem.install(gem)
|
23
|
-
output.puts "Gem `#{ text.green(gem) }` installed."
|
24
|
-
require gem
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
Pry::Commands.add_command(Pry::Command::GemInstall)
|
29
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
class Command::GemList < Pry::ClassCommand
|
3
|
-
match 'gem-list'
|
4
|
-
group 'Gems'
|
5
|
-
description 'List and search installed gems.'
|
6
|
-
|
7
|
-
banner <<-'BANNER'
|
8
|
-
Usage: gem-list [REGEX]
|
9
|
-
|
10
|
-
List all installed gems, when a regex is provided, limit the output to those
|
11
|
-
that match the regex.
|
12
|
-
BANNER
|
13
|
-
|
14
|
-
def process(pattern = nil)
|
15
|
-
pattern = Regexp.compile(pattern || '')
|
16
|
-
gems = Rubygem.list(pattern).group_by(&:name)
|
17
|
-
|
18
|
-
gems.each do |gem, specs|
|
19
|
-
specs.sort! do |a,b|
|
20
|
-
Gem::Version.new(b.version) <=> Gem::Version.new(a.version)
|
21
|
-
end
|
22
|
-
|
23
|
-
versions = specs.each_with_index.map do |spec, index|
|
24
|
-
index == 0 ? text.bright_green(spec.version.to_s) : text.green(spec.version.to_s)
|
25
|
-
end
|
26
|
-
|
27
|
-
output.puts "#{text.default gem} (#{versions.join ', '})"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
Pry::Commands.add_command(Pry::Command::GemList)
|
33
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
class Command::GemOpen < Pry::ClassCommand
|
3
|
-
match 'gem-open'
|
4
|
-
group 'Gems'
|
5
|
-
description 'Opens the working directory of the gem in your editor'
|
6
|
-
command_options :argument_required => true
|
7
|
-
|
8
|
-
banner <<-'BANNER'
|
9
|
-
Usage: gem-open GEM_NAME
|
10
|
-
|
11
|
-
Change the current working directory to that in which the given gem is
|
12
|
-
installed, and then opens your text editor.
|
13
|
-
|
14
|
-
gem-open pry-exception_explorer
|
15
|
-
BANNER
|
16
|
-
|
17
|
-
def process(gem)
|
18
|
-
Dir.chdir(Rubygem.spec(gem).full_gem_path) do
|
19
|
-
Pry::Editor.invoke_editor(".", 0, false)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def complete(str)
|
24
|
-
Rubygem.complete(str)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
Pry::Commands.add_command(Pry::Command::GemOpen)
|
29
|
-
end
|
data/lib/pry/commands/gist.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
class Command::Gist < Pry::ClassCommand
|
3
|
-
match 'gist'
|
4
|
-
group 'Misc'
|
5
|
-
description 'Playback a string variable or a method or a file as input.'
|
6
|
-
command_options :requires_gem => "jist"
|
7
|
-
|
8
|
-
banner <<-'BANNER'
|
9
|
-
Usage: gist [OPTIONS] [--help]
|
10
|
-
|
11
|
-
The gist command enables you to gist code from files and methods to github.
|
12
|
-
|
13
|
-
gist -i 20 --lines 1..3
|
14
|
-
gist Pry#repl --lines 1..-1
|
15
|
-
gist Rakefile --lines 5
|
16
|
-
BANNER
|
17
|
-
|
18
|
-
def setup
|
19
|
-
require 'jist'
|
20
|
-
end
|
21
|
-
|
22
|
-
def options(opt)
|
23
|
-
CodeCollector.inject_options(opt)
|
24
|
-
opt.on :login, "Authenticate the jist gem with GitHub"
|
25
|
-
opt.on :p, :public, "Create a public gist (default: false)", :default => false
|
26
|
-
opt.on :clip, "Copy the selected content to clipboard instead, do NOT gist it", :default => false
|
27
|
-
end
|
28
|
-
|
29
|
-
def process
|
30
|
-
return Jist.login! if opts.present?(:login)
|
31
|
-
cc = CodeCollector.new(args, opts, _pry_)
|
32
|
-
|
33
|
-
if cc.content =~ /\A\s*\z/
|
34
|
-
raise CommandError, "Found no code to gist."
|
35
|
-
end
|
36
|
-
|
37
|
-
if opts.present?(:clip)
|
38
|
-
clipboard_content(cc.content)
|
39
|
-
else
|
40
|
-
# we're overriding the default behavior of the 'in' option (as
|
41
|
-
# defined on CodeCollector) with our local behaviour.
|
42
|
-
content = opts.present?(:in) ? input_content : cc.content
|
43
|
-
gist_content content, cc.file
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def clipboard_content(content)
|
48
|
-
Jist.copy(content)
|
49
|
-
output.puts "Copied content to clipboard!"
|
50
|
-
end
|
51
|
-
|
52
|
-
def input_content
|
53
|
-
content = ""
|
54
|
-
CodeCollector.input_expression_ranges.each do |range|
|
55
|
-
input_expressions = _pry_.input_array[range] || []
|
56
|
-
Array(input_expressions).each_with_index do |code, index|
|
57
|
-
corrected_index = index + range.first
|
58
|
-
if code && code != ""
|
59
|
-
content << code
|
60
|
-
if code !~ /;\Z/
|
61
|
-
content << "#{comment_expression_result_for_gist(Pry.config.gist.inspecter.call(_pry_.output_array[corrected_index]))}"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
content
|
68
|
-
end
|
69
|
-
|
70
|
-
def comment_expression_result_for_gist(result)
|
71
|
-
content = ""
|
72
|
-
result.lines.each_with_index do |line, index|
|
73
|
-
if index == 0
|
74
|
-
content << "# => #{line}"
|
75
|
-
else
|
76
|
-
content << "# #{line}"
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
content
|
81
|
-
end
|
82
|
-
|
83
|
-
def gist_content(content, filename)
|
84
|
-
response = Jist.gist(content, :filename => filename || "pry_gist.rb", :public => !!opts[:p])
|
85
|
-
if response
|
86
|
-
url = response['html_url']
|
87
|
-
message = "Gist created at URL #{url}"
|
88
|
-
begin
|
89
|
-
Jist.copy(url)
|
90
|
-
message << ", which is now in the clipboard."
|
91
|
-
rescue Jist::ClipboardError
|
92
|
-
end
|
93
|
-
|
94
|
-
output.puts message
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
Pry::Commands.add_command(Pry::Command::Gist)
|
100
|
-
Pry::Commands.alias_command 'clipit', 'gist --clip'
|
101
|
-
Pry::Commands.alias_command 'jist', 'gist'
|
102
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
class Command::InstallCommand < Pry::ClassCommand
|
3
|
-
match 'install-command'
|
4
|
-
group 'Commands'
|
5
|
-
description 'Install a disabled command.'
|
6
|
-
|
7
|
-
banner <<-'BANNER'
|
8
|
-
Usage: install-command COMMAND
|
9
|
-
|
10
|
-
Installs the gems necessary to run the given COMMAND. You will generally not
|
11
|
-
need to run this unless told to by an error message.
|
12
|
-
BANNER
|
13
|
-
|
14
|
-
def process(name)
|
15
|
-
require 'rubygems/dependency_installer' unless defined? Gem::DependencyInstaller
|
16
|
-
command = find_command(name)
|
17
|
-
|
18
|
-
if command_dependencies_met?(command.options)
|
19
|
-
output.puts "Dependencies for #{command.name} are met. Nothing to do."
|
20
|
-
return
|
21
|
-
end
|
22
|
-
|
23
|
-
output.puts "Attempting to install `#{name}` command..."
|
24
|
-
gems_to_install = Array(command.options[:requires_gem])
|
25
|
-
|
26
|
-
gems_to_install.each do |g|
|
27
|
-
next if Rubygem.installed?(g)
|
28
|
-
output.puts "Installing `#{g}` gem..."
|
29
|
-
|
30
|
-
begin
|
31
|
-
Gem::DependencyInstaller.new.install(g)
|
32
|
-
rescue Gem::GemNotFoundException
|
33
|
-
raise CommandError, "Required Gem: `#{g}` not found. Aborting command installation."
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
Gem.refresh
|
38
|
-
gems_to_install.each do |g|
|
39
|
-
begin
|
40
|
-
require g
|
41
|
-
rescue LoadError
|
42
|
-
raise CommandError, "Required Gem: `#{g}` installed but not found?!. Aborting command installation."
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
output.puts "Installation of `#{name}` successful! Type `help #{name}` for information"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
Pry::Commands.add_command(Pry::Command::InstallCommand)
|
51
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
class Command::SimplePrompt < Pry::ClassCommand
|
3
|
-
match 'simple-prompt'
|
4
|
-
group 'Misc'
|
5
|
-
description 'Toggle the simple prompt.'
|
6
|
-
|
7
|
-
banner <<-'BANNER'
|
8
|
-
Toggle the simple prompt.
|
9
|
-
BANNER
|
10
|
-
|
11
|
-
def process
|
12
|
-
case _pry_.prompt
|
13
|
-
when Pry::SIMPLE_PROMPT
|
14
|
-
_pry_.pop_prompt
|
15
|
-
else
|
16
|
-
_pry_.push_prompt Pry::SIMPLE_PROMPT
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
Pry::Commands.add_command(Pry::Command::SimplePrompt)
|
22
|
-
end
|
data/lib/pry/commands.rb
DELETED
data/lib/pry/completion.rb
DELETED
@@ -1,304 +0,0 @@
|
|
1
|
-
# taken from irb
|
2
|
-
|
3
|
-
class Pry
|
4
|
-
|
5
|
-
module BondCompleter
|
6
|
-
|
7
|
-
def self.build_completion_proc(target, pry=nil, commands=[""])
|
8
|
-
if !@started
|
9
|
-
@started = true
|
10
|
-
start
|
11
|
-
end
|
12
|
-
|
13
|
-
Pry.current[:pry] = pry
|
14
|
-
proc{ |*a| Bond.agent.call(*a) }
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.start
|
18
|
-
Bond.start(:eval_binding => lambda{ Pry.current[:pry].current_context })
|
19
|
-
Bond.complete(:on => /\A/) do |input|
|
20
|
-
Pry.commands.complete(input.line,
|
21
|
-
:pry_instance => Pry.current[:pry],
|
22
|
-
:target => Pry.current[:pry].current_context,
|
23
|
-
:command_set => Pry.current[:pry].commands)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
# Implements tab completion for Readline in Pry
|
30
|
-
module InputCompleter
|
31
|
-
|
32
|
-
if Readline.respond_to?("basic_word_break_characters=")
|
33
|
-
Readline.basic_word_break_characters = " \t\n\"\\'`><=;|&{("
|
34
|
-
end
|
35
|
-
|
36
|
-
Readline.completion_append_character = nil
|
37
|
-
|
38
|
-
ReservedWords = [
|
39
|
-
"BEGIN", "END",
|
40
|
-
"alias", "and",
|
41
|
-
"begin", "break",
|
42
|
-
"case", "class",
|
43
|
-
"def", "defined", "do",
|
44
|
-
"else", "elsif", "end", "ensure",
|
45
|
-
"false", "for",
|
46
|
-
"if", "in",
|
47
|
-
"module",
|
48
|
-
"next", "nil", "not",
|
49
|
-
"or",
|
50
|
-
"redo", "rescue", "retry", "return",
|
51
|
-
"self", "super",
|
52
|
-
"then", "true",
|
53
|
-
"undef", "unless", "until",
|
54
|
-
"when", "while",
|
55
|
-
"yield" ]
|
56
|
-
|
57
|
-
Operators = [
|
58
|
-
"%", "&", "*", "**", "+", "-", "/",
|
59
|
-
"<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>",
|
60
|
-
"[]", "[]=", "^", "!", "!=", "!~"
|
61
|
-
]
|
62
|
-
|
63
|
-
# Return a new completion proc for use by Readline.
|
64
|
-
# @param [Binding] target The current binding context.
|
65
|
-
# @param [Array<String>] commands The array of Pry commands.
|
66
|
-
def self.build_completion_proc(target, pry=nil, commands=[""])
|
67
|
-
|
68
|
-
proc do |input|
|
69
|
-
|
70
|
-
# if there are multiple contexts e.g. cd 1/2/3
|
71
|
-
# get new target for 1/2 and find candidates for 3
|
72
|
-
path, input = build_path(input)
|
73
|
-
|
74
|
-
# We silence warnings here or Ruby 1.8 cries about "multiple values for
|
75
|
-
# block 0 for 1".
|
76
|
-
Helpers::BaseHelpers.silence_warnings do
|
77
|
-
unless path.call.empty?
|
78
|
-
target = begin
|
79
|
-
ctx = Helpers::BaseHelpers.context_from_object_path(path.call, pry)
|
80
|
-
ctx.first
|
81
|
-
rescue Pry::CommandError
|
82
|
-
[]
|
83
|
-
end
|
84
|
-
target = target.last
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
begin
|
89
|
-
bind = target
|
90
|
-
|
91
|
-
case input
|
92
|
-
|
93
|
-
|
94
|
-
# Complete stdlib symbols
|
95
|
-
|
96
|
-
when /^(\/[^\/]*\/)\.([^.]*)$/
|
97
|
-
# Regexp
|
98
|
-
receiver = $1
|
99
|
-
message = Regexp.quote($2)
|
100
|
-
|
101
|
-
candidates = Regexp.instance_methods.collect(&:to_s)
|
102
|
-
select_message(path, receiver, message, candidates)
|
103
|
-
|
104
|
-
when /^([^\]]*\])\.([^.]*)$/
|
105
|
-
# Array
|
106
|
-
receiver = $1
|
107
|
-
message = Regexp.quote($2)
|
108
|
-
|
109
|
-
candidates = Array.instance_methods.collect(&:to_s)
|
110
|
-
select_message(path, receiver, message, candidates)
|
111
|
-
|
112
|
-
when /^([^\}]*\})\.([^.]*)$/
|
113
|
-
# Proc or Hash
|
114
|
-
receiver = $1
|
115
|
-
message = Regexp.quote($2)
|
116
|
-
|
117
|
-
candidates = Proc.instance_methods.collect(&:to_s)
|
118
|
-
candidates |= Hash.instance_methods.collect(&:to_s)
|
119
|
-
select_message(path, receiver, message, candidates)
|
120
|
-
|
121
|
-
when /^(:[^:.]*)$/
|
122
|
-
# Symbol
|
123
|
-
if Symbol.respond_to?(:all_symbols)
|
124
|
-
sym = Regexp.quote($1)
|
125
|
-
candidates = Symbol.all_symbols.collect{|s| ":" + s.id2name}
|
126
|
-
|
127
|
-
candidates.grep(/^#{sym}/)
|
128
|
-
else
|
129
|
-
[]
|
130
|
-
end
|
131
|
-
|
132
|
-
when /^::([A-Z][^:\.\(]*)$/
|
133
|
-
# Absolute Constant or class methods
|
134
|
-
receiver = $1
|
135
|
-
candidates = Object.constants.collect(&:to_s)
|
136
|
-
candidates.grep(/^#{receiver}/).collect{|e| "::" + e}
|
137
|
-
|
138
|
-
|
139
|
-
# Complete target symbols
|
140
|
-
|
141
|
-
when /^([A-Z][A-Za-z0-9]*)$/
|
142
|
-
# Constant
|
143
|
-
message = $1
|
144
|
-
|
145
|
-
begin
|
146
|
-
context = target.eval("self")
|
147
|
-
context = context.class unless context.respond_to? :constants
|
148
|
-
candidates = context.constants.collect(&:to_s)
|
149
|
-
rescue
|
150
|
-
candidates = []
|
151
|
-
end
|
152
|
-
candidates = candidates.grep(/^#{message}/).collect(&path)
|
153
|
-
|
154
|
-
when /^([A-Z].*)::([^:.]*)$/
|
155
|
-
# Constant or class methods
|
156
|
-
receiver = $1
|
157
|
-
message = Regexp.quote($2)
|
158
|
-
begin
|
159
|
-
candidates = eval("#{receiver}.constants.collect(&:to_s)", bind)
|
160
|
-
candidates |= eval("#{receiver}.methods.collect(&:to_s)", bind)
|
161
|
-
rescue RescuableException
|
162
|
-
candidates = []
|
163
|
-
end
|
164
|
-
candidates.grep(/^#{message}/).collect{|e| receiver + "::" + e}
|
165
|
-
|
166
|
-
when /^(:[^:.]+)\.([^.]*)$/
|
167
|
-
# Symbol
|
168
|
-
receiver = $1
|
169
|
-
message = Regexp.quote($2)
|
170
|
-
|
171
|
-
candidates = Symbol.instance_methods.collect(&:to_s)
|
172
|
-
select_message(path, receiver, message, candidates)
|
173
|
-
|
174
|
-
when /^(-?(0[dbo])?[0-9_]+(\.[0-9_]+)?([eE]-?[0-9]+)?)\.([^.]*)$/
|
175
|
-
# Numeric
|
176
|
-
receiver = $1
|
177
|
-
message = Regexp.quote($5)
|
178
|
-
|
179
|
-
begin
|
180
|
-
candidates = eval(receiver, bind).methods.collect(&:to_s)
|
181
|
-
rescue RescuableException
|
182
|
-
candidates = []
|
183
|
-
end
|
184
|
-
select_message(path, receiver, message, candidates)
|
185
|
-
|
186
|
-
when /^(-?0x[0-9a-fA-F_]+)\.([^.]*)$/#
|
187
|
-
# Numeric(0xFFFF)
|
188
|
-
receiver = $1
|
189
|
-
message = Regexp.quote($2)
|
190
|
-
|
191
|
-
begin
|
192
|
-
candidates = eval(receiver, bind).methods.collect(&:to_s)
|
193
|
-
rescue RescuableException
|
194
|
-
candidates = []
|
195
|
-
end
|
196
|
-
select_message(path, receiver, message, candidates)
|
197
|
-
|
198
|
-
when /^(\$[^.]*)$/
|
199
|
-
# Global variables
|
200
|
-
regmessage = Regexp.new(Regexp.quote($1))
|
201
|
-
candidates = global_variables.collect(&:to_s).grep(regmessage)
|
202
|
-
|
203
|
-
when /^([^."].*)\.([^.]*)$/
|
204
|
-
# Variable
|
205
|
-
receiver = $1
|
206
|
-
message = Regexp.quote($2)
|
207
|
-
|
208
|
-
gv = eval("global_variables", bind).collect(&:to_s)
|
209
|
-
lv = eval("local_variables", bind).collect(&:to_s)
|
210
|
-
cv = eval("self.class.constants", bind).collect(&:to_s)
|
211
|
-
|
212
|
-
if (gv | lv | cv).include?(receiver) or /^[A-Z]/ =~ receiver && /\./ !~ receiver
|
213
|
-
# foo.func and foo is local var. OR
|
214
|
-
# Foo::Bar.func
|
215
|
-
begin
|
216
|
-
candidates = eval("#{receiver}.methods", bind).collect(&:to_s)
|
217
|
-
rescue RescuableException
|
218
|
-
candidates = []
|
219
|
-
end
|
220
|
-
else
|
221
|
-
# func1.func2
|
222
|
-
candidates = []
|
223
|
-
ObjectSpace.each_object(Module){|m|
|
224
|
-
begin
|
225
|
-
name = m.name.to_s
|
226
|
-
rescue RescuableException
|
227
|
-
name = ""
|
228
|
-
end
|
229
|
-
next if name != "IRB::Context" and
|
230
|
-
/^(IRB|SLex|RubyLex|RubyToken)/ =~ name
|
231
|
-
|
232
|
-
# jruby doesn't always provide #instance_methods() on each
|
233
|
-
# object.
|
234
|
-
if m.respond_to?(:instance_methods)
|
235
|
-
candidates.concat m.instance_methods(false).collect(&:to_s)
|
236
|
-
end
|
237
|
-
}
|
238
|
-
candidates.sort!
|
239
|
-
candidates.uniq!
|
240
|
-
end
|
241
|
-
select_message(path, receiver, message, candidates)
|
242
|
-
|
243
|
-
when /^\.([^.]*)$/
|
244
|
-
# Unknown(maybe String)
|
245
|
-
receiver = ""
|
246
|
-
message = Regexp.quote($1)
|
247
|
-
|
248
|
-
candidates = String.instance_methods(true).collect(&:to_s)
|
249
|
-
select_message(path, receiver, message, candidates)
|
250
|
-
|
251
|
-
else
|
252
|
-
|
253
|
-
candidates = eval(
|
254
|
-
"methods | private_methods | local_variables | " \
|
255
|
-
"self.class.constants | instance_variables",
|
256
|
-
bind
|
257
|
-
).collect(&:to_s)
|
258
|
-
|
259
|
-
if eval("respond_to?(:class_variables)", bind)
|
260
|
-
candidates += eval("class_variables", bind).collect(&:to_s)
|
261
|
-
end
|
262
|
-
candidates = (candidates|ReservedWords|commands).grep(/^#{Regexp.quote(input)}/)
|
263
|
-
candidates.collect(&path)
|
264
|
-
end
|
265
|
-
rescue RescuableException
|
266
|
-
[]
|
267
|
-
end
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
def self.select_message(path, receiver, message, candidates)
|
272
|
-
candidates.grep(/^#{message}/).collect { |e|
|
273
|
-
case e
|
274
|
-
when /^[a-zA-Z_]/
|
275
|
-
path.call(receiver + "." + e)
|
276
|
-
when /^[0-9]/
|
277
|
-
when *Operators
|
278
|
-
#receiver + " " + e
|
279
|
-
end
|
280
|
-
}.compact
|
281
|
-
end
|
282
|
-
|
283
|
-
# build_path seperates the input into two parts: path and input.
|
284
|
-
# input is the partial string that should be completed
|
285
|
-
# path is a proc that takes an input and builds a full path.
|
286
|
-
def self.build_path(input)
|
287
|
-
|
288
|
-
# check to see if the input is a regex
|
289
|
-
return proc {|input| input.to_s }, input if input[/\/\./]
|
290
|
-
|
291
|
-
trailing_slash = input.end_with?('/')
|
292
|
-
contexts = input.chomp('/').split(/\//)
|
293
|
-
input = contexts[-1]
|
294
|
-
|
295
|
-
path = Proc.new do |input|
|
296
|
-
p = contexts[0..-2].push(input).join('/')
|
297
|
-
p += '/' if trailing_slash && !input.nil?
|
298
|
-
p
|
299
|
-
end
|
300
|
-
|
301
|
-
return path, input
|
302
|
-
end
|
303
|
-
end
|
304
|
-
end
|
data/lib/pry/history_array.rb
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
# A history array is an array to which you can only add elements. Older
|
3
|
-
# entries are removed progressively, so that the aray never contains more than
|
4
|
-
# N elements.
|
5
|
-
#
|
6
|
-
# History arrays are used by Pry to store the output of the last commands.
|
7
|
-
#
|
8
|
-
# @example
|
9
|
-
# ary = Pry::HistoryArray.new 10
|
10
|
-
# ary << 1 << 2 << 3
|
11
|
-
# ary[0] # => 1
|
12
|
-
# ary[1] # => 2
|
13
|
-
# 10.times { |n| ary << n }
|
14
|
-
# ary[0] # => nil
|
15
|
-
# ary[-1] # => 9
|
16
|
-
class HistoryArray
|
17
|
-
include Enumerable
|
18
|
-
|
19
|
-
# @param [Integer] size Maximum amount of objects in the array
|
20
|
-
def initialize(size)
|
21
|
-
@max_size = size
|
22
|
-
|
23
|
-
@hash = {}
|
24
|
-
@count = 0
|
25
|
-
end
|
26
|
-
|
27
|
-
# Pushes an object at the end of the array
|
28
|
-
# @param [Object] value Object to be added
|
29
|
-
def <<(value)
|
30
|
-
@hash[@count] = value
|
31
|
-
|
32
|
-
if @hash.size > max_size
|
33
|
-
@hash.delete(@count - max_size)
|
34
|
-
end
|
35
|
-
|
36
|
-
@count += 1
|
37
|
-
|
38
|
-
self
|
39
|
-
end
|
40
|
-
|
41
|
-
# @overload [](index)
|
42
|
-
# @param [Integer] index Index of the item to access.
|
43
|
-
# @return [Object, nil] Item at that index or nil if it has been removed.
|
44
|
-
# @overload [](index, size)
|
45
|
-
# @param [Integer] index Index of the first item to access.
|
46
|
-
# @param [Integer] size Amount of items to access
|
47
|
-
# @return [Array, nil] The selected items. Nil if index is greater than
|
48
|
-
# the size of the array.
|
49
|
-
# @overload [](range)
|
50
|
-
# @param [Range<Integer>] range Range of indices to access.
|
51
|
-
# @return [Array, nil] The selected items. Nil if index is greater than
|
52
|
-
# the size of the array.
|
53
|
-
def [](index_or_range, size = nil)
|
54
|
-
if index_or_range.is_a? Integer
|
55
|
-
index = convert_index(index_or_range)
|
56
|
-
|
57
|
-
if size
|
58
|
-
end_index = index + size
|
59
|
-
index > @count ? nil : (index...[end_index, @count].min).map do |n|
|
60
|
-
@hash[n]
|
61
|
-
end
|
62
|
-
else
|
63
|
-
@hash[index]
|
64
|
-
end
|
65
|
-
else
|
66
|
-
range = convert_range(index_or_range)
|
67
|
-
range.begin > @count ? nil : range.map { |n| @hash[n] }
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# @return [Integer] Amount of objects in the array
|
72
|
-
def size
|
73
|
-
@count
|
74
|
-
end
|
75
|
-
alias count size
|
76
|
-
alias length size
|
77
|
-
|
78
|
-
def empty?
|
79
|
-
size == 0
|
80
|
-
end
|
81
|
-
|
82
|
-
def each
|
83
|
-
((@count - size)...@count).each do |n|
|
84
|
-
yield @hash[n]
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def to_a
|
89
|
-
((@count - size)...@count).map { |n| @hash[n] }
|
90
|
-
end
|
91
|
-
|
92
|
-
def pop!
|
93
|
-
@hash.delete @count - 1
|
94
|
-
@count -= 1
|
95
|
-
end
|
96
|
-
|
97
|
-
def inspect
|
98
|
-
"#<#{self.class} size=#{size} first=#{@count - size} max_size=#{max_size}>"
|
99
|
-
end
|
100
|
-
|
101
|
-
# @return [Integer] Maximum amount of objects in the array
|
102
|
-
attr_reader :max_size
|
103
|
-
|
104
|
-
private
|
105
|
-
def convert_index(n)
|
106
|
-
n >= 0 ? n : @count + n
|
107
|
-
end
|
108
|
-
|
109
|
-
def convert_range(range)
|
110
|
-
end_index = convert_index(range.end)
|
111
|
-
end_index += 1 unless range.exclude_end?
|
112
|
-
|
113
|
-
Range.new(convert_index(range.begin), [end_index, @count].min, true)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|