pry 0.9.7.4-java → 0.9.8-java
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -3
- data/CHANGELOG +43 -0
- data/README.markdown +3 -1
- data/Rakefile +51 -32
- data/bin/pry +2 -80
- data/lib/pry.rb +33 -26
- data/lib/pry/cli.rb +152 -0
- data/lib/pry/code.rb +351 -0
- data/lib/pry/command.rb +422 -0
- data/lib/pry/command_set.rb +259 -129
- data/lib/pry/commands.rb +0 -1
- data/lib/pry/config.rb +43 -9
- data/lib/pry/default_commands/context.rb +109 -92
- data/lib/pry/default_commands/documentation.rb +174 -63
- data/lib/pry/default_commands/easter_eggs.rb +26 -2
- data/lib/pry/default_commands/gems.rb +65 -37
- data/lib/pry/default_commands/input.rb +175 -243
- data/lib/pry/default_commands/introspection.rb +173 -112
- data/lib/pry/default_commands/ls.rb +96 -114
- data/lib/pry/default_commands/shell.rb +175 -70
- data/lib/pry/helpers/base_helpers.rb +7 -2
- data/lib/pry/helpers/command_helpers.rb +71 -77
- data/lib/pry/helpers/options_helpers.rb +10 -41
- data/lib/pry/helpers/text.rb +24 -4
- data/lib/pry/history.rb +55 -17
- data/lib/pry/history_array.rb +2 -0
- data/lib/pry/hooks.rb +252 -0
- data/lib/pry/indent.rb +9 -5
- data/lib/pry/method.rb +149 -50
- data/lib/pry/plugins.rb +12 -4
- data/lib/pry/pry_class.rb +69 -26
- data/lib/pry/pry_instance.rb +187 -115
- 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 +29 -32
- data/test/helper.rb +32 -36
- data/test/test_cli.rb +78 -0
- data/test/test_code.rb +201 -0
- data/test/test_command.rb +327 -0
- data/test/test_command_integration.rb +512 -0
- data/test/test_command_set.rb +338 -12
- data/test/test_completion.rb +1 -1
- data/test/test_default_commands.rb +1 -2
- data/test/test_default_commands/test_context.rb +27 -5
- data/test/test_default_commands/test_documentation.rb +20 -8
- data/test/test_default_commands/test_input.rb +84 -45
- data/test/test_default_commands/test_introspection.rb +74 -17
- data/test/test_default_commands/test_ls.rb +9 -36
- data/test/test_default_commands/test_shell.rb +240 -13
- data/test/test_hooks.rb +490 -0
- data/test/test_indent.rb +2 -0
- data/test/test_method.rb +60 -0
- data/test/test_pry.rb +29 -904
- data/test/test_pry_defaults.rb +380 -0
- data/test/test_pry_history.rb +24 -24
- data/test/test_syntax_checking.rb +63 -0
- data/test/test_wrapped_module.rb +71 -0
- metadata +50 -39
- data/lib/pry/command_context.rb +0 -53
- data/lib/pry/command_processor.rb +0 -181
- data/lib/pry/extended_commands/user_command_api.rb +0 -65
- data/test/test_command_processor.rb +0 -176
data/.gitignore
CHANGED
data/CHANGELOG
CHANGED
@@ -1,3 +1,46 @@
|
|
1
|
+
X/X/2012 version 0.9.8
|
2
|
+
|
3
|
+
MAJOR NEW FEATURES
|
4
|
+
- upgraded command api, https://github.com/pry/pry/wiki/Custom-commands
|
5
|
+
- added a system of hooks for customizing pry behaviour
|
6
|
+
- changed syntax checking to use eval() for improved accuracy
|
7
|
+
- added save-file command
|
8
|
+
- added gist command (removed gist-method, new gist command is more general)
|
9
|
+
|
10
|
+
|
11
|
+
complete CHANGELOG:
|
12
|
+
* CommandError's no longer cause the current input to be disgarded
|
13
|
+
* Better syntax highlighting for rbx code code
|
14
|
+
* added cat --in to show pry input history
|
15
|
+
* prefixed temporary file names with 'pry'
|
16
|
+
* show-doc now supports -l and -b options (line numbers)
|
17
|
+
* play now supports -i and -d options
|
18
|
+
* moved UserCommandAPI command-set to pry-developer_tools plugin
|
19
|
+
* added :when_started event for hooks, called in Pry.start
|
20
|
+
* added a man page
|
21
|
+
* added rename method to Pry::CommandSet (commands can be renamed)
|
22
|
+
* added CommandSet#{before_command,after_command} for enhancing builtin commands
|
23
|
+
* added checking for namespace collisions with pry commands, set Pry.config.collision_warning
|
24
|
+
* work around namespace collisions by ensuring lines starting with a space are executed as
|
25
|
+
* ruby.work around namespace collisions by prensuring lines starting with a space are executed as ruby
|
26
|
+
* added handlers for Ctrl+C (SIGINT) on jruby, these are now caught as in other ruby versions
|
27
|
+
* removed dependency on ruby_parser
|
28
|
+
* prevented colours leaking across the pry prompt
|
29
|
+
* fixed edge cases in Pry::Method, for methods with crazy names and methods that have been 'undef'd
|
30
|
+
* refactored history handling code for clarity and correctness
|
31
|
+
* added Pry::WrappedModule as a counterpart to Pry::Method
|
32
|
+
* made a trailing , cause pry to wait for further input
|
33
|
+
* removed gist-method command, added gist command
|
34
|
+
* added pry-backtrace command to show history of current session
|
35
|
+
* fixed whereami within 'super' methods
|
36
|
+
* replaced inline version guards by Pry::Helpers::BaseHelpers.{rbx?,jruby?,windows?} etc.
|
37
|
+
* removed the CommandProcessor, its functionality is part of the new Command class
|
38
|
+
* changed cd .. at the top level so it doesn't quit pry.
|
39
|
+
* changed edit-command to no-longer need a command set argument
|
40
|
+
* fixed empty lines so that they don't replace _ by nil
|
41
|
+
* fixed SyntaxErrors at the REPL level so they don't replace _ex_.
|
42
|
+
<TODO: everything that happened after f3262e32700709a6998579a9f71cdc6b8f4a695e>
|
43
|
+
|
1
44
|
5/11/2011 version 0.9.7.4 hotfix
|
2
45
|
* ls -M now works in modules (bugfix)
|
3
46
|
* added exception msg for bad cd object/path
|
data/README.markdown
CHANGED
data/Rakefile
CHANGED
@@ -1,32 +1,41 @@
|
|
1
1
|
require 'rake/clean'
|
2
|
-
require '
|
2
|
+
require 'rubygems/package_task'
|
3
3
|
|
4
4
|
$:.unshift 'lib'
|
5
5
|
require 'pry/version'
|
6
6
|
|
7
|
-
CLOBBER.include(
|
8
|
-
CLEAN.include(
|
9
|
-
"**/*.rbc", "**/.#*.*")
|
7
|
+
CLOBBER.include('**/*~', '**/*#*', '**/*.log')
|
8
|
+
CLEAN.include('**/*#*', '**/*#*.*', '**/*_flymake*.*', '**/*_flymake', '**/*.rbc', '**/.#*.*')
|
10
9
|
|
11
10
|
def apply_spec_defaults(s)
|
12
|
-
s.name =
|
11
|
+
s.name = 'pry'
|
13
12
|
s.summary = "An IRB alternative and runtime developer console"
|
14
13
|
s.version = Pry::VERSION
|
15
14
|
s.date = Time.now.strftime '%Y-%m-%d'
|
16
15
|
s.author = "John Mair (banisterfiend)"
|
17
16
|
s.email = 'jrmair@gmail.com'
|
18
17
|
s.description = s.summary
|
19
|
-
s.homepage =
|
20
|
-
s.executables = [
|
18
|
+
s.homepage = 'http://pry.github.com'
|
19
|
+
s.executables = ['pry']
|
21
20
|
s.files = `git ls-files`.split("\n")
|
22
21
|
s.test_files = `git ls-files -- test/*`.split("\n")
|
23
|
-
s.add_dependency(
|
24
|
-
s.add_dependency(
|
25
|
-
s.add_dependency(
|
26
|
-
s.
|
27
|
-
s.add_development_dependency(
|
28
|
-
s.add_development_dependency(
|
29
|
-
|
22
|
+
s.add_dependency('coderay', '~> 1.0.5')
|
23
|
+
s.add_dependency('slop', ['>= 2.4.3', '< 3'])
|
24
|
+
s.add_dependency('method_source','~> 0.7')
|
25
|
+
s.add_development_dependency('bacon', '~> 1.1')
|
26
|
+
s.add_development_dependency('open4', '~> 1.3')
|
27
|
+
s.add_development_dependency('rake', '~> 0.9')
|
28
|
+
end
|
29
|
+
|
30
|
+
def check_dependencies
|
31
|
+
require 'bundler'
|
32
|
+
Bundler.definition.missing_specs
|
33
|
+
|
34
|
+
eval('nil', TOPLEVEL_BINDING, '<main>') # workaround for issue #395
|
35
|
+
rescue LoadError
|
36
|
+
# if Bundler isn't installed, we'll just assume your setup is ok.
|
37
|
+
rescue Bundler::GemNotFound
|
38
|
+
raise RuntimeError, "You're missing one or more required gems. Run `bundle install` first."
|
30
39
|
end
|
31
40
|
|
32
41
|
desc "Set up and run tests"
|
@@ -34,38 +43,42 @@ task :default => [:test]
|
|
34
43
|
|
35
44
|
desc "Run tests"
|
36
45
|
task :test do
|
46
|
+
check_dependencies unless ENV['SKIP_DEP_CHECK']
|
37
47
|
sh "bacon -Itest -rubygems -a -q"
|
38
48
|
end
|
39
49
|
|
40
|
-
desc "
|
41
|
-
task :profile do
|
42
|
-
require 'profile'
|
43
|
-
require 'pry'
|
44
|
-
Pry.start(TOPLEVEL_BINDING, :input => StringIO.new('exit'))
|
45
|
-
end
|
46
|
-
|
47
|
-
desc "run pry"
|
50
|
+
desc "Run pry"
|
48
51
|
task :pry do
|
52
|
+
check_dependencies unless ENV['SKIP_DEP_CHECK']
|
49
53
|
load 'bin/pry'
|
50
54
|
end
|
51
55
|
|
52
|
-
desc "
|
56
|
+
desc "Show pry version"
|
53
57
|
task :version do
|
54
58
|
puts "Pry version: #{Pry::VERSION}"
|
55
59
|
end
|
56
60
|
|
61
|
+
desc "Profile pry's startup time"
|
62
|
+
task :profile do
|
63
|
+
require 'profile'
|
64
|
+
require 'pry'
|
65
|
+
Pry.start(TOPLEVEL_BINDING, :input => StringIO.new('exit'))
|
66
|
+
end
|
67
|
+
|
68
|
+
desc "Build the gemspec file"
|
69
|
+
task :gemspec => "ruby:gemspec"
|
70
|
+
|
57
71
|
namespace :ruby do
|
58
72
|
spec = Gem::Specification.new do |s|
|
59
73
|
apply_spec_defaults(s)
|
60
74
|
s.platform = Gem::Platform::RUBY
|
61
75
|
end
|
62
76
|
|
63
|
-
|
77
|
+
Gem::PackageTask.new(spec) do |pkg|
|
64
78
|
pkg.need_zip = false
|
65
79
|
pkg.need_tar = false
|
66
80
|
end
|
67
81
|
|
68
|
-
desc "Generate gemspec file"
|
69
82
|
task :gemspec do
|
70
83
|
File.open("#{spec.name}.gemspec", "w") do |f|
|
71
84
|
f << spec.to_ruby
|
@@ -76,11 +89,11 @@ end
|
|
76
89
|
namespace :jruby do
|
77
90
|
spec = Gem::Specification.new do |s|
|
78
91
|
apply_spec_defaults(s)
|
79
|
-
s.add_dependency(
|
80
|
-
s.platform =
|
92
|
+
s.add_dependency('spoon', '~> 0.0')
|
93
|
+
s.platform = 'java'
|
81
94
|
end
|
82
95
|
|
83
|
-
|
96
|
+
Gem::PackageTask.new(spec) do |pkg|
|
84
97
|
pkg.need_zip = false
|
85
98
|
pkg.need_tar = false
|
86
99
|
end
|
@@ -91,11 +104,11 @@ end
|
|
91
104
|
namespace v do
|
92
105
|
spec = Gem::Specification.new do |s|
|
93
106
|
apply_spec_defaults(s)
|
94
|
-
s.add_dependency(
|
107
|
+
s.add_dependency('win32console', '~> 1.3')
|
95
108
|
s.platform = "i386-#{v}"
|
96
109
|
end
|
97
110
|
|
98
|
-
|
111
|
+
Gem::PackageTask.new(spec) do |pkg|
|
99
112
|
pkg.need_zip = false
|
100
113
|
pkg.need_tar = false
|
101
114
|
end
|
@@ -103,10 +116,16 @@ end
|
|
103
116
|
end
|
104
117
|
|
105
118
|
desc "build all platform gems at once"
|
106
|
-
task :gems => [:clean, :rmgems,
|
119
|
+
task :gems => [:clean, :rmgems, 'ruby:gem', 'mswin32:gem', 'mingw32:gem', 'jruby:gem']
|
107
120
|
|
108
121
|
desc "remove all platform gems"
|
109
|
-
task :rmgems => [
|
122
|
+
task :rmgems => ['ruby:clobber_package']
|
123
|
+
|
124
|
+
desc "reinstall gem"
|
125
|
+
task :reinstall => :gems do
|
126
|
+
sh "gem uninstall pry" rescue nil
|
127
|
+
sh "gem install #{File.dirname(__FILE__)}/pkg/pry-#{Pry::VERSION}.gem"
|
128
|
+
end
|
110
129
|
|
111
130
|
desc "build and push latest gems"
|
112
131
|
task :pushgems => :gems do
|
data/bin/pry
CHANGED
@@ -12,83 +12,5 @@ rescue LoadError
|
|
12
12
|
require 'pry'
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
Start a Pry session.
|
18
|
-
See: `https://github.com/pry` for more information.
|
19
|
-
Copyright (c) 2011 John Mair (banisterfiend)
|
20
|
-
--
|
21
|
-
}
|
22
|
-
|
23
|
-
on :e, :exec, "A line of code to execute in context before the session starts", true
|
24
|
-
|
25
|
-
on "no-pager", "Disable pager for long output" do
|
26
|
-
Pry.config.pager = false
|
27
|
-
end
|
28
|
-
|
29
|
-
on "no-history", "Disable history loading" do
|
30
|
-
Pry.config.history.should_load = false
|
31
|
-
end
|
32
|
-
|
33
|
-
on "no-color", "Disable syntax highlighting for session" do
|
34
|
-
Pry.color = false
|
35
|
-
end
|
36
|
-
|
37
|
-
on :f, "Suppress loading of ~/.pryrc" do
|
38
|
-
# load ~/.pryrc, if not suppressed with -f option
|
39
|
-
Pry.config.should_load_rc = false
|
40
|
-
end
|
41
|
-
|
42
|
-
on "no-plugins", "Suppress loading of plugins." do
|
43
|
-
# suppress plugins if given --no-plugins optino
|
44
|
-
Pry.config.plugins.enabled = false
|
45
|
-
end
|
46
|
-
|
47
|
-
on "installed-plugins", "List installed plugins." do
|
48
|
-
puts "Installed Plugins:"
|
49
|
-
puts "--"
|
50
|
-
Pry.locate_plugins.each do |plugin|
|
51
|
-
puts "#{plugin.name}".ljust(18) + plugin.spec.summary
|
52
|
-
end
|
53
|
-
exit
|
54
|
-
end
|
55
|
-
|
56
|
-
on "simple-prompt", "Enable simple prompt mode" do
|
57
|
-
Pry.prompt = Pry::SIMPLE_PROMPT
|
58
|
-
end
|
59
|
-
|
60
|
-
on :r, :require, "`require` a Ruby script at startup", true do |file|
|
61
|
-
Pry.config.requires << file
|
62
|
-
end
|
63
|
-
|
64
|
-
on :I, "Add a path to the $LOAD_PATH", true do |path|
|
65
|
-
$LOAD_PATH << path
|
66
|
-
end
|
67
|
-
|
68
|
-
on :v, :version, "Display the Pry version" do
|
69
|
-
puts "Pry version #{Pry::VERSION} on Ruby #{RUBY_VERSION}"
|
70
|
-
exit
|
71
|
-
end
|
72
|
-
|
73
|
-
on(:c, :context,
|
74
|
-
"Start the session in the specified context. Equivalent to `context.pry` in a session.",
|
75
|
-
true,
|
76
|
-
:default => "TOPLEVEL_BINDING"
|
77
|
-
)
|
78
|
-
end
|
79
|
-
|
80
|
-
# invoked via cli
|
81
|
-
Pry.cli = true
|
82
|
-
|
83
|
-
# create the actual context
|
84
|
-
context = Pry.binding_for(eval(opts[:context]))
|
85
|
-
|
86
|
-
if opts[:exec]
|
87
|
-
exec_string = opts[:exec] + "\n"
|
88
|
-
else
|
89
|
-
exec_string = ""
|
90
|
-
end
|
91
|
-
|
92
|
-
# Start the session (running any code passed with -e, if there is any)
|
93
|
-
Pry.start(context, :input => StringIO.new(exec_string))
|
94
|
-
|
15
|
+
# Process command line options and run Pry
|
16
|
+
Pry::CLI.parse_options
|
data/lib/pry.rb
CHANGED
@@ -4,19 +4,19 @@
|
|
4
4
|
|
5
5
|
require 'pp'
|
6
6
|
require 'pry/helpers/base_helpers'
|
7
|
+
require 'pry/hooks'
|
8
|
+
|
7
9
|
class Pry
|
8
10
|
# The default hooks - display messages when beginning and ending Pry sessions.
|
9
|
-
DEFAULT_HOOKS =
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
_pry_.process_line("whereami 5", "", target)
|
17
|
-
end
|
11
|
+
DEFAULT_HOOKS = Pry::Hooks.new.add_hook(:before_session, :default) do |out, target, _pry_|
|
12
|
+
# ensure we're actually in a method
|
13
|
+
file = target.eval('__FILE__')
|
14
|
+
|
15
|
+
# /unknown/ for rbx
|
16
|
+
if file !~ /(\(.*\))|<.*>/ && file !~ /__unknown__/ && file != "" && file != "-e" || file == Pry.eval_path
|
17
|
+
_pry_.run_command("whereami 5", "", target)
|
18
18
|
end
|
19
|
-
|
19
|
+
end
|
20
20
|
|
21
21
|
# The default print
|
22
22
|
DEFAULT_PRINT = proc do |output, value|
|
@@ -36,6 +36,9 @@ class Pry
|
|
36
36
|
|
37
37
|
colorized = Helpers::BaseHelpers.colorize_code(stringified.gsub(/#</, "%<#{nonce}"))
|
38
38
|
|
39
|
+
# avoid colour-leak from CodeRay and any of the users' previous output
|
40
|
+
colorized = colorized.sub(/(\n*)$/, "\e[0m\\1") if Pry.color
|
41
|
+
|
39
42
|
Helpers::BaseHelpers.stagger_output("=> #{colorized.gsub(/%<(.*?)#{nonce}/, '#<\1')}", output)
|
40
43
|
end
|
41
44
|
|
@@ -66,19 +69,11 @@ class Pry
|
|
66
69
|
# The default prompt; includes the target and nesting level
|
67
70
|
DEFAULT_PROMPT = [
|
68
71
|
proc { |target_self, nest_level, pry|
|
69
|
-
|
70
|
-
"[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)})> "
|
71
|
-
else
|
72
|
-
"[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)}):#{nest_level}> "
|
73
|
-
end
|
72
|
+
"[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}> "
|
74
73
|
},
|
75
74
|
|
76
75
|
proc { |target_self, nest_level, pry|
|
77
|
-
|
78
|
-
"[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)})* "
|
79
|
-
else
|
80
|
-
"[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)}):#{nest_level}* "
|
81
|
-
end
|
76
|
+
"[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}* "
|
82
77
|
}
|
83
78
|
]
|
84
79
|
|
@@ -151,7 +146,15 @@ class Pry
|
|
151
146
|
|
152
147
|
# CommandErrors are caught by the REPL loop and displayed to the user. They
|
153
148
|
# indicate an exceptional condition that's fatal to the current command.
|
154
|
-
class CommandError < StandardError
|
149
|
+
class CommandError < StandardError; end
|
150
|
+
class NonMethodContextError < CommandError; end
|
151
|
+
|
152
|
+
# indicates obsolete API
|
153
|
+
class ObsoleteError < StandardError; end
|
154
|
+
|
155
|
+
# This is to keep from breaking under Rails 3.2 for people who are doing that
|
156
|
+
# IRB = Pry thing.
|
157
|
+
module ExtendCommandBundle
|
155
158
|
end
|
156
159
|
end
|
157
160
|
|
@@ -162,20 +165,21 @@ require "stringio"
|
|
162
165
|
require "coderay"
|
163
166
|
require "optparse"
|
164
167
|
require "slop"
|
168
|
+
require "rbconfig"
|
165
169
|
|
166
|
-
if
|
170
|
+
if Pry::Helpers::BaseHelpers.jruby?
|
167
171
|
begin
|
168
172
|
require 'ffi'
|
169
173
|
rescue LoadError
|
170
|
-
|
174
|
+
warn "Need to `gem install ffi`"
|
171
175
|
end
|
172
176
|
end
|
173
177
|
|
174
|
-
if
|
178
|
+
if Pry::Helpers::BaseHelpers.windows?
|
175
179
|
begin
|
176
180
|
require 'win32console'
|
177
181
|
rescue LoadError
|
178
|
-
|
182
|
+
warn "Need to `gem install win32console`"
|
179
183
|
exit 1
|
180
184
|
end
|
181
185
|
end
|
@@ -183,16 +187,19 @@ end
|
|
183
187
|
require "pry/version"
|
184
188
|
require "pry/rbx_method"
|
185
189
|
require "pry/rbx_path"
|
190
|
+
require "pry/code"
|
186
191
|
require "pry/method"
|
192
|
+
require "pry/wrapped_module"
|
187
193
|
require "pry/history_array"
|
188
194
|
require "pry/helpers"
|
189
195
|
require "pry/history"
|
196
|
+
require "pry/command"
|
190
197
|
require "pry/command_set"
|
191
198
|
require "pry/commands"
|
192
|
-
require "pry/command_context"
|
193
199
|
require "pry/custom_completions"
|
194
200
|
require "pry/completion"
|
195
201
|
require "pry/plugins"
|
196
202
|
require "pry/core_extensions"
|
197
203
|
require "pry/pry_class"
|
198
204
|
require "pry/pry_instance"
|
205
|
+
require "pry/cli"
|
data/lib/pry/cli.rb
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
|
2
|
+
class Pry
|
3
|
+
|
4
|
+
# Manage the processing of command line options
|
5
|
+
class CLI
|
6
|
+
|
7
|
+
NoOptionsError = Class.new(StandardError)
|
8
|
+
|
9
|
+
class << self
|
10
|
+
|
11
|
+
# @return [Proc] The Proc defining the valid command line options.
|
12
|
+
attr_accessor :options
|
13
|
+
|
14
|
+
# @return [Array] The Procs that process the parsed options.
|
15
|
+
attr_accessor :option_processors
|
16
|
+
|
17
|
+
# Add another set of CLI options (a Slop block)
|
18
|
+
def add_options(&block)
|
19
|
+
if options
|
20
|
+
old_options = options
|
21
|
+
self.options = proc do
|
22
|
+
instance_exec(&old_options)
|
23
|
+
instance_exec(&block)
|
24
|
+
end
|
25
|
+
else
|
26
|
+
self.options = block
|
27
|
+
end
|
28
|
+
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
# Bring in options defined in plugins
|
33
|
+
def add_plugin_options
|
34
|
+
Pry.plugins.values.each do |plugin|
|
35
|
+
plugin.load_cli_options
|
36
|
+
end
|
37
|
+
|
38
|
+
self
|
39
|
+
end
|
40
|
+
|
41
|
+
# Add a block responsible for processing parsed options.
|
42
|
+
def process_options(&block)
|
43
|
+
self.option_processors ||= []
|
44
|
+
option_processors << block
|
45
|
+
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
# Clear `options` and `option_processors`
|
50
|
+
def reset
|
51
|
+
self.options = nil
|
52
|
+
self.option_processors = nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def parse_options(args=ARGV)
|
56
|
+
raise NoOptionsError, "No command line options defined! Use Pry::CLI.add_options to add command line options." if !options
|
57
|
+
|
58
|
+
opts = Slop.parse(args, :help => true, :multiple_switches => false, &options)
|
59
|
+
option_processors.each { |processor| processor.call(opts) } if option_processors # option processors are optional
|
60
|
+
|
61
|
+
self
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
reset
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Bring in options defined by plugins
|
71
|
+
Pry::CLI.add_plugin_options
|
72
|
+
|
73
|
+
# The default Pry command line options (before plugin options are included)
|
74
|
+
Pry::CLI.add_options do
|
75
|
+
banner %{Usage: pry [OPTIONS]
|
76
|
+
Start a Pry session.
|
77
|
+
See: `https://github.com/pry` for more information.
|
78
|
+
Copyright (c) 2011 John Mair (banisterfiend)
|
79
|
+
--
|
80
|
+
}
|
81
|
+
on :e, :exec, "A line of code to execute in context before the session starts", true
|
82
|
+
|
83
|
+
on "no-pager", "Disable pager for long output" do
|
84
|
+
Pry.config.pager = false
|
85
|
+
end
|
86
|
+
|
87
|
+
on "no-history", "Disable history loading" do
|
88
|
+
Pry.config.history.should_load = false
|
89
|
+
end
|
90
|
+
|
91
|
+
on "no-color", "Disable syntax highlighting for session" do
|
92
|
+
Pry.color = false
|
93
|
+
end
|
94
|
+
|
95
|
+
on :f, "Suppress loading of ~/.pryrc" do
|
96
|
+
# load ~/.pryrc, if not suppressed with -f option
|
97
|
+
Pry.config.should_load_rc = false
|
98
|
+
end
|
99
|
+
|
100
|
+
on "no-plugins", "Suppress loading of plugins." do
|
101
|
+
# suppress plugins if given --no-plugins optino
|
102
|
+
Pry.config.plugins.enabled = false
|
103
|
+
end
|
104
|
+
|
105
|
+
on "installed-plugins", "List installed plugins." do
|
106
|
+
puts "Installed Plugins:"
|
107
|
+
puts "--"
|
108
|
+
Pry.locate_plugins.each do |plugin|
|
109
|
+
puts "#{plugin.name}".ljust(18) + plugin.spec.summary
|
110
|
+
end
|
111
|
+
exit
|
112
|
+
end
|
113
|
+
|
114
|
+
on "simple-prompt", "Enable simple prompt mode" do
|
115
|
+
Pry.config.prompt = Pry::SIMPLE_PROMPT
|
116
|
+
end
|
117
|
+
|
118
|
+
on :r, :require, "`require` a Ruby script at startup", true do |file|
|
119
|
+
Pry.config.requires << file
|
120
|
+
end
|
121
|
+
|
122
|
+
on :I, "Add a path to the $LOAD_PATH", true do |path|
|
123
|
+
$LOAD_PATH << path
|
124
|
+
end
|
125
|
+
|
126
|
+
on :v, :version, "Display the Pry version" do
|
127
|
+
puts "Pry version #{Pry::VERSION} on Ruby #{RUBY_VERSION}"
|
128
|
+
exit
|
129
|
+
end
|
130
|
+
|
131
|
+
on(:c, :context,
|
132
|
+
"Start the session in the specified context. Equivalent to `context.pry` in a session.",
|
133
|
+
true,
|
134
|
+
:default => "TOPLEVEL_BINDING"
|
135
|
+
)
|
136
|
+
end.process_options do |opts|
|
137
|
+
# invoked via cli
|
138
|
+
Pry.cli = true
|
139
|
+
|
140
|
+
# create the actual context
|
141
|
+
context = Pry.binding_for(eval(opts[:context]))
|
142
|
+
|
143
|
+
if opts[:exec]
|
144
|
+
exec_string = opts[:exec] + "\n"
|
145
|
+
else
|
146
|
+
exec_string = ""
|
147
|
+
end
|
148
|
+
|
149
|
+
# Start the session (running any code passed with -e, if there is any)
|
150
|
+
Pry.start(context, :input => StringIO.new(exec_string))
|
151
|
+
end
|
152
|
+
|