pry 0.10.pre.1-i386-mingw32 → 0.10.0.pre3-i386-mingw32
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/editor.rb
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
class Pry
|
2
|
+
class Editor
|
3
|
+
include Pry::Helpers::BaseHelpers
|
4
|
+
include Pry::Helpers::CommandHelpers
|
5
|
+
|
6
|
+
attr_reader :_pry_
|
7
|
+
|
8
|
+
def initialize(_pry_)
|
9
|
+
@_pry_ = _pry_
|
10
|
+
end
|
11
|
+
|
12
|
+
def edit_tempfile_with_content(initial_content, line=1)
|
13
|
+
temp_file do |f|
|
14
|
+
f.puts(initial_content)
|
15
|
+
f.flush
|
16
|
+
f.close(false)
|
17
|
+
invoke_editor(f.path, line, true)
|
18
|
+
File.read(f.path)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def invoke_editor(file, line, blocking=true)
|
23
|
+
raise CommandError, "Please set Pry.config.editor or export $VISUAL or $EDITOR" unless _pry_.config.editor
|
24
|
+
|
25
|
+
editor_invocation = build_editor_invocation_string(file, line, blocking)
|
26
|
+
return nil unless editor_invocation
|
27
|
+
|
28
|
+
if jruby?
|
29
|
+
open_editor_on_jruby(editor_invocation)
|
30
|
+
else
|
31
|
+
open_editor(editor_invocation)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
# Generate the string that's used to start the editor. This includes
|
38
|
+
# all the flags we want as well as the file and line number we
|
39
|
+
# want to open at.
|
40
|
+
def build_editor_invocation_string(file, line, blocking)
|
41
|
+
|
42
|
+
if _pry_.config.editor.respond_to?(:call)
|
43
|
+
args = [file, line, blocking][0...(_pry_.config.editor.arity)]
|
44
|
+
_pry_.config.editor.call(*args)
|
45
|
+
else
|
46
|
+
sanitized_file = if windows?
|
47
|
+
file.gsub(/\//, '\\')
|
48
|
+
else
|
49
|
+
Shellwords.escape(file)
|
50
|
+
end
|
51
|
+
|
52
|
+
"#{_pry_.config.editor} #{blocking_flag_for_editor(blocking)} #{start_line_syntax_for_editor(sanitized_file, line)}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Start the editor running, using the calculated invocation string
|
57
|
+
def open_editor(editor_invocation)
|
58
|
+
# Note we dont want to use Pry.config.system here as that
|
59
|
+
# may be invoked non-interactively (i.e via Open4), whereas we want to
|
60
|
+
# ensure the editor is always interactive
|
61
|
+
system(*Shellwords.split(editor_invocation)) or raise CommandError, "`#{editor_invocation}` gave exit status: #{$?.exitstatus}"
|
62
|
+
end
|
63
|
+
|
64
|
+
# We need JRuby specific code here cos just shelling out using
|
65
|
+
# system() appears to be pretty broken :/
|
66
|
+
def open_editor_on_jruby(editor_invocation)
|
67
|
+
begin
|
68
|
+
require 'spoon'
|
69
|
+
pid = Spoon.spawnp(*Shellwords.split(editor_invocation))
|
70
|
+
Process.waitpid(pid)
|
71
|
+
rescue FFI::NotFoundError
|
72
|
+
system(editor_invocation)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Some editors that run outside the terminal allow you to control whether or
|
77
|
+
# not to block the process from which they were launched (in this case, Pry).
|
78
|
+
# For those editors, return the flag that produces the desired behavior.
|
79
|
+
def blocking_flag_for_editor(blocking)
|
80
|
+
case editor_name
|
81
|
+
when /^emacsclient/
|
82
|
+
'--no-wait' unless blocking
|
83
|
+
when /^[gm]vim/
|
84
|
+
'--nofork' if blocking
|
85
|
+
when /^jedit/
|
86
|
+
'-wait' if blocking
|
87
|
+
when /^mate/, /^subl/
|
88
|
+
'-w' if blocking
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Return the syntax for a given editor for starting the editor
|
93
|
+
# and moving to a particular line within that file
|
94
|
+
def start_line_syntax_for_editor(file_name, line_number)
|
95
|
+
# special case for 1st line
|
96
|
+
return file_name if line_number <= 1
|
97
|
+
|
98
|
+
case editor_name
|
99
|
+
when /^[gm]?vi/, /^emacs/, /^nano/, /^pico/, /^gedit/, /^kate/
|
100
|
+
"+#{line_number} #{file_name}"
|
101
|
+
when /^mate/, /^geany/
|
102
|
+
"-l #{line_number} #{file_name}"
|
103
|
+
when /^subl/
|
104
|
+
"#{file_name}:#{line_number}"
|
105
|
+
when /^uedit32/
|
106
|
+
"#{file_name}/#{line_number}"
|
107
|
+
when /^jedit/
|
108
|
+
"#{file_name} +line:#{line_number}"
|
109
|
+
else
|
110
|
+
if windows?
|
111
|
+
"#{file_name}"
|
112
|
+
else
|
113
|
+
"+#{line_number} #{file_name}"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# Get the name of the binary that Pry.config.editor points to.
|
119
|
+
#
|
120
|
+
# This is useful for deciding which flags we pass to the editor as
|
121
|
+
# we can just use the program's name and ignore any absolute paths.
|
122
|
+
#
|
123
|
+
# @example
|
124
|
+
# Pry.config.editor="/home/conrad/bin/textmate -w"
|
125
|
+
# editor_name
|
126
|
+
# # => textmate
|
127
|
+
#
|
128
|
+
def editor_name
|
129
|
+
File.basename(_pry_.config.editor).split(" ").first
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
class Pry
|
2
|
+
|
3
|
+
# As a REPL, we often want to catch any unexpected exceptions that may have
|
4
|
+
# been raised; however we don't want to go overboard and prevent the user
|
5
|
+
# from exiting Pry when they want to.
|
6
|
+
module RescuableException
|
7
|
+
def self.===(exception)
|
8
|
+
case exception
|
9
|
+
# Catch when the user hits ^C (Interrupt < SignalException), and assume
|
10
|
+
# that they just wanted to stop the in-progress command (just like bash
|
11
|
+
# etc.)
|
12
|
+
when Interrupt
|
13
|
+
true
|
14
|
+
# Don't catch signals (particularly not SIGTERM) as these are unlikely
|
15
|
+
# to be intended for pry itself. We should also make sure that
|
16
|
+
# Kernel#exit works.
|
17
|
+
when *Pry.config.exception_whitelist
|
18
|
+
false
|
19
|
+
# All other exceptions will be caught.
|
20
|
+
else
|
21
|
+
true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Catches SecurityErrors if $SAFE is set
|
27
|
+
module Pry::TooSafeException
|
28
|
+
def self.===(exception)
|
29
|
+
$SAFE > 0 && SecurityError === exception
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# An Exception Tag (cf. Exceptional Ruby) that instructs Pry to show the error
|
34
|
+
# in a more user-friendly manner. This should be used when the exception
|
35
|
+
# happens within Pry itself as a direct consequence of the user typing
|
36
|
+
# something wrong.
|
37
|
+
#
|
38
|
+
# This allows us to distinguish between the user typing:
|
39
|
+
#
|
40
|
+
# pry(main)> def )
|
41
|
+
# SyntaxError: unexpected )
|
42
|
+
#
|
43
|
+
# pry(main)> method_that_evals("def )")
|
44
|
+
# SyntaxError: (eval):1: syntax error, unexpected ')'
|
45
|
+
# from ./a.rb:2 in `eval'
|
46
|
+
module UserError; end
|
47
|
+
|
48
|
+
# When we try to get a binding for an object, we try to define a method on
|
49
|
+
# that Object's singleton class. This doesn't work for "frozen" Object's, and
|
50
|
+
# the exception is just a vanilla RuntimeError.
|
51
|
+
module FrozenObjectException
|
52
|
+
def self.===(exception)
|
53
|
+
["can't modify frozen class/module",
|
54
|
+
"can't modify frozen Class",
|
55
|
+
].include?(exception.message)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Don't catch these exceptions
|
60
|
+
DEFAULT_EXCEPTION_WHITELIST = [SystemExit,
|
61
|
+
SignalException,
|
62
|
+
Pry::TooSafeException]
|
63
|
+
|
64
|
+
# CommandErrors are caught by the REPL loop and displayed to the user. They
|
65
|
+
# indicate an exceptional condition that's fatal to the current command.
|
66
|
+
class CommandError < StandardError; end
|
67
|
+
class MethodNotFound < CommandError; end
|
68
|
+
|
69
|
+
# indicates obsolete API
|
70
|
+
class ObsoleteError < StandardError; end
|
71
|
+
|
72
|
+
# This is to keep from breaking under Rails 3.2 for people who are doing that
|
73
|
+
# IRB = Pry thing.
|
74
|
+
module ExtendCommandBundle
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
data/lib/pry/helpers.rb
CHANGED
@@ -15,16 +15,20 @@ class Pry
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
18
|
+
# Acts like send but ignores any methods defined below Object or Class in the
|
19
|
+
# inheritance hierarchy.
|
20
|
+
# This is required to introspect methods on objects like Net::HTTP::Get that
|
21
|
+
# have overridden the `method` method.
|
22
|
+
def safe_send(obj, method, *args, &block)
|
23
|
+
(Module === obj ? Module : Object).instance_method(method).bind(obj).call(*args, &block)
|
24
|
+
end
|
25
|
+
public :safe_send
|
26
|
+
|
27
|
+
def find_command(name, set = Pry::Commands)
|
28
|
+
command_match = set.find do |_, command|
|
29
|
+
(listing = command.options[:listing]) == name && listing != nil
|
30
|
+
end
|
31
|
+
command_match.last if command_match
|
28
32
|
end
|
29
33
|
|
30
34
|
def not_a_real_file?(file)
|
@@ -34,51 +38,16 @@ class Pry
|
|
34
38
|
def command_dependencies_met?(options)
|
35
39
|
return true if !options[:requires_gem]
|
36
40
|
Array(options[:requires_gem]).all? do |g|
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def set_file_and_dir_locals(file_name)
|
42
|
-
return if !target or !file_name
|
43
|
-
_pry_.last_file = File.expand_path(file_name)
|
44
|
-
_pry_.inject_local("_file_", _pry_.last_file, target)
|
45
|
-
|
46
|
-
_pry_.last_dir = File.dirname(_pry_.last_file)
|
47
|
-
_pry_.inject_local("_dir_", _pry_.last_dir, target)
|
48
|
-
end
|
49
|
-
|
50
|
-
def stub_proc(name, options)
|
51
|
-
gems_needed = Array(options[:requires_gem])
|
52
|
-
gems_not_installed = gems_needed.select { |g| !gem_installed?(g) }
|
53
|
-
proc do
|
54
|
-
output.puts "\nThe command '#{name}' requires the following gems to be installed: #{(gems_needed.join(", "))}"
|
55
|
-
output.puts "-"
|
56
|
-
output.puts "Command not available due to dependency on gems: `#{gems_not_installed.join(", ")}` not being met."
|
57
|
-
output.puts "-"
|
58
|
-
output.puts "Type `install #{name}` to install the required gems and activate this command."
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def create_command_stub(names, description, options, block)
|
63
|
-
Array(names).each do |name|
|
64
|
-
commands[name] = {
|
65
|
-
:description => "Not available. Execute #{(name)} command for more information.",
|
66
|
-
:action => stub_proc(name, options),
|
67
|
-
:stub_info => options
|
68
|
-
}
|
41
|
+
Rubygem.installed?(g)
|
69
42
|
end
|
70
43
|
end
|
71
44
|
|
72
45
|
def use_ansi_codes?
|
73
|
-
|
46
|
+
windows_ansi? || ENV['TERM'] && ENV['TERM'] != "dumb"
|
74
47
|
end
|
75
48
|
|
76
49
|
def colorize_code(code)
|
77
|
-
|
78
|
-
CodeRay.scan(code, :ruby).term
|
79
|
-
else
|
80
|
-
code
|
81
|
-
end
|
50
|
+
CodeRay.scan(code, :ruby).term
|
82
51
|
end
|
83
52
|
|
84
53
|
def highlight(string, regexp, highlight_color=:bright_yellow)
|
@@ -88,11 +57,7 @@ class Pry
|
|
88
57
|
# formatting
|
89
58
|
def heading(text)
|
90
59
|
text = "#{text}\n--"
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
def page_size
|
95
|
-
27
|
60
|
+
"\e[1m#{text}\e[0m"
|
96
61
|
end
|
97
62
|
|
98
63
|
# have fun on the Windows platform.
|
@@ -102,126 +67,47 @@ class Pry
|
|
102
67
|
|
103
68
|
# are we able to use ansi on windows?
|
104
69
|
def windows_ansi?
|
105
|
-
defined?(Win32::Console) || ENV['ANSICON']
|
70
|
+
defined?(Win32::Console) || ENV['ANSICON'] || (windows? && mri_2?)
|
106
71
|
end
|
107
72
|
|
108
|
-
# are we on Jruby platform?
|
109
73
|
def jruby?
|
110
74
|
RbConfig::CONFIG['ruby_install_name'] == 'jruby'
|
111
75
|
end
|
112
76
|
|
113
|
-
|
77
|
+
def jruby_19?
|
78
|
+
jruby? && RbConfig::CONFIG['ruby_version'] == '1.9'
|
79
|
+
end
|
80
|
+
|
114
81
|
def rbx?
|
115
82
|
RbConfig::CONFIG['ruby_install_name'] == 'rbx'
|
116
83
|
end
|
117
84
|
|
118
|
-
def
|
119
|
-
|
85
|
+
def mri?
|
86
|
+
RbConfig::CONFIG['ruby_install_name'] == 'ruby'
|
120
87
|
end
|
121
88
|
|
122
89
|
def mri_19?
|
123
|
-
RUBY_VERSION =~
|
124
|
-
end
|
125
|
-
|
126
|
-
# a simple pager for systems without `less`. A la windows.
|
127
|
-
def simple_pager(text, output=output())
|
128
|
-
text_array = text.lines.to_a
|
129
|
-
text_array.each_slice(page_size) do |chunk|
|
130
|
-
output.puts chunk.join
|
131
|
-
break if chunk.size < page_size
|
132
|
-
if text_array.size > page_size
|
133
|
-
output.puts "\n<page break> --- Press enter to continue ( q<enter> to break ) --- <page break>"
|
134
|
-
break if $stdin.gets.chomp == "q"
|
135
|
-
end
|
136
|
-
end
|
90
|
+
mri? && RUBY_VERSION =~ /^1\.9/
|
137
91
|
end
|
138
92
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
def stagger_output(text, out = nil)
|
143
|
-
out ||= case
|
144
|
-
when respond_to?(:output)
|
145
|
-
# Mixin.
|
146
|
-
output
|
147
|
-
when Pry.respond_to?(:output)
|
148
|
-
# Parent.
|
149
|
-
Pry.output
|
150
|
-
else
|
151
|
-
# Sys.
|
152
|
-
$stdout
|
153
|
-
end
|
154
|
-
|
155
|
-
if text.lines.count < page_size || !Pry.pager
|
156
|
-
out.puts text
|
157
|
-
return
|
158
|
-
end
|
159
|
-
|
160
|
-
# FIXME! Another JRuby hack
|
161
|
-
if jruby?
|
162
|
-
simple_pager(text, out)
|
163
|
-
else
|
164
|
-
lesspipe { |less| less.puts text }
|
165
|
-
end
|
166
|
-
rescue Errno::ENOENT
|
167
|
-
simple_pager(text, out)
|
168
|
-
rescue Errno::EPIPE
|
169
|
-
end
|
170
|
-
|
171
|
-
#
|
172
|
-
# Create scrollable output via less!
|
173
|
-
#
|
174
|
-
# This command runs `less` in a subprocess, and gives you the IO to its STDIN pipe
|
175
|
-
# so that you can communicate with it.
|
176
|
-
#
|
177
|
-
# Example:
|
178
|
-
#
|
179
|
-
# lesspipe do |less|
|
180
|
-
# 50.times { less.puts "Hi mom!" }
|
181
|
-
# end
|
182
|
-
#
|
183
|
-
# The default less parameters are:
|
184
|
-
# * Allow colour
|
185
|
-
# * Don't wrap lines longer than the screen
|
186
|
-
# * Quit immediately (without paging) if there's less than one screen of text.
|
187
|
-
#
|
188
|
-
# You can change these options by passing a hash to `lesspipe`, like so:
|
189
|
-
#
|
190
|
-
# lesspipe(:wrap=>false) { |less| less.puts essay.to_s }
|
191
|
-
#
|
192
|
-
# It accepts the following boolean options:
|
193
|
-
# :color => Allow ANSI colour codes?
|
194
|
-
# :wrap => Wrap long lines?
|
195
|
-
# :always => Always page, even if there's less than one page of text?
|
196
|
-
#
|
197
|
-
def lesspipe(*args)
|
198
|
-
if args.any? and args.last.is_a?(Hash)
|
199
|
-
options = args.pop
|
200
|
-
else
|
201
|
-
options = {}
|
202
|
-
end
|
93
|
+
def mri_2?
|
94
|
+
mri? && RUBY_VERSION =~ /^2/
|
95
|
+
end
|
203
96
|
|
204
|
-
|
97
|
+
def mri_20?
|
98
|
+
mri? && RUBY_VERSION =~ /^2\.0/
|
99
|
+
end
|
205
100
|
|
206
|
-
|
207
|
-
|
208
|
-
params << "-S" unless options[:wrap] == true
|
209
|
-
params << "-F" unless options[:always] == true
|
210
|
-
if options[:tail] == true
|
211
|
-
params << "+\\>"
|
212
|
-
$stderr.puts "Seeking to end of stream..."
|
213
|
-
end
|
214
|
-
params << "-X"
|
215
|
-
|
216
|
-
IO.popen("less #{params * ' '}", "w") do |less|
|
217
|
-
if output
|
218
|
-
less.puts output
|
219
|
-
else
|
220
|
-
yield less
|
221
|
-
end
|
222
|
-
end
|
101
|
+
def mri_21?
|
102
|
+
mri? && RUBY_VERSION =~ /^2\.1/
|
223
103
|
end
|
224
104
|
|
105
|
+
# Send the given text through the best available pager (if Pry.config.pager is
|
106
|
+
# enabled). Infers where to send the output if used as a mixin.
|
107
|
+
# DEPRECATED.
|
108
|
+
def stagger_output(text, out = nil)
|
109
|
+
Pry.new.pager.page text
|
110
|
+
end
|
225
111
|
end
|
226
112
|
end
|
227
113
|
end
|