pry 0.9.10pre1-i386-mswin32 → 0.9.11-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.
- data/.travis.yml +3 -1
- data/CHANGELOG +63 -2
- data/CONTRIBUTORS +43 -25
- data/Gemfile +7 -0
- data/Guardfile +62 -0
- data/README.markdown +4 -4
- data/Rakefile +34 -35
- data/lib/pry.rb +107 -54
- data/lib/pry/cli.rb +34 -11
- data/lib/pry/code.rb +165 -182
- data/lib/pry/code/code_range.rb +70 -0
- data/lib/pry/code/loc.rb +92 -0
- data/lib/pry/code_object.rb +153 -0
- data/lib/pry/command.rb +160 -22
- data/lib/pry/command_set.rb +37 -26
- 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 +53 -0
- data/lib/pry/commands/cat/abstract_formatter.rb +27 -0
- data/lib/pry/commands/cat/exception_formatter.rb +78 -0
- data/lib/pry/commands/cat/file_formatter.rb +84 -0
- data/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
- data/lib/pry/commands/cd.rb +30 -0
- data/lib/pry/commands/code_collector.rb +165 -0
- data/lib/pry/commands/deprecated_commands.rb +2 -0
- data/lib/pry/commands/disable_pry.rb +27 -0
- data/lib/pry/commands/easter_eggs.rb +112 -0
- data/lib/pry/commands/edit.rb +206 -0
- data/lib/pry/commands/edit/exception_patcher.rb +25 -0
- data/lib/pry/commands/edit/file_and_line_locator.rb +38 -0
- data/lib/pry/commands/edit/method_patcher.rb +122 -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 +24 -0
- data/lib/pry/commands/find_method.rb +199 -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 +29 -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 +95 -0
- data/lib/pry/commands/help.rb +164 -0
- data/lib/pry/commands/hist.rb +161 -0
- data/lib/pry/commands/import_set.rb +22 -0
- data/lib/pry/commands/install_command.rb +51 -0
- data/lib/pry/commands/jump_to.rb +29 -0
- data/lib/pry/commands/ls.rb +339 -0
- data/lib/pry/commands/nesting.rb +25 -0
- data/lib/pry/commands/play.rb +69 -0
- data/lib/pry/commands/pry_backtrace.rb +26 -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 +39 -0
- data/lib/pry/commands/reset.rb +18 -0
- data/lib/pry/commands/ri.rb +56 -0
- data/lib/pry/commands/save_file.rb +61 -0
- data/lib/pry/commands/shell_command.rb +43 -0
- data/lib/pry/commands/shell_mode.rb +27 -0
- data/lib/pry/commands/show_doc.rb +78 -0
- data/lib/pry/commands/show_info.rb +139 -0
- data/lib/pry/commands/show_input.rb +17 -0
- data/lib/pry/commands/show_source.rb +37 -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 +20 -0
- data/lib/pry/commands/whereami.rb +114 -0
- data/lib/pry/commands/wtf.rb +57 -0
- data/lib/pry/completion.rb +120 -46
- data/lib/pry/config.rb +11 -0
- data/lib/pry/core_extensions.rb +30 -19
- data/lib/pry/editor.rb +129 -0
- data/lib/pry/helpers.rb +1 -0
- data/lib/pry/helpers/base_helpers.rb +89 -119
- data/lib/pry/helpers/command_helpers.rb +7 -122
- data/lib/pry/helpers/table.rb +100 -0
- data/lib/pry/helpers/text.rb +4 -4
- data/lib/pry/history_array.rb +5 -0
- data/lib/pry/hooks.rb +1 -3
- data/lib/pry/indent.rb +104 -30
- data/lib/pry/method.rb +66 -22
- data/lib/pry/module_candidate.rb +26 -15
- data/lib/pry/pager.rb +70 -0
- data/lib/pry/plugins.rb +1 -2
- data/lib/pry/pry_class.rb +63 -22
- data/lib/pry/pry_instance.rb +58 -37
- data/lib/pry/rubygem.rb +74 -0
- data/lib/pry/terminal_info.rb +43 -0
- data/lib/pry/test/helper.rb +185 -0
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +58 -24
- data/pry.gemspec +21 -37
- data/{test/test_cli.rb → spec/cli_spec.rb} +0 -0
- data/spec/code_object_spec.rb +277 -0
- data/{test/test_code.rb → spec/code_spec.rb} +19 -1
- data/{test/test_command_helpers.rb → spec/command_helpers_spec.rb} +0 -0
- data/{test/test_command_integration.rb → spec/command_integration_spec.rb} +38 -46
- data/{test/test_command_set.rb → spec/command_set_spec.rb} +18 -1
- data/{test/test_command.rb → spec/command_spec.rb} +250 -149
- data/spec/commands/amend_line_spec.rb +247 -0
- data/spec/commands/bang_spec.rb +19 -0
- data/spec/commands/cat_spec.rb +164 -0
- data/spec/commands/cd_spec.rb +250 -0
- data/spec/commands/disable_pry_spec.rb +25 -0
- data/spec/commands/edit_spec.rb +727 -0
- data/spec/commands/exit_all_spec.rb +34 -0
- data/spec/commands/exit_program_spec.rb +19 -0
- data/spec/commands/exit_spec.rb +34 -0
- data/{test/test_default_commands/test_find_method.rb → spec/commands/find_method_spec.rb} +27 -7
- data/spec/commands/gem_list_spec.rb +26 -0
- data/spec/commands/gist_spec.rb +75 -0
- data/{test/test_default_commands/test_help.rb → spec/commands/help_spec.rb} +8 -9
- data/spec/commands/hist_spec.rb +181 -0
- data/spec/commands/jump_to_spec.rb +15 -0
- data/spec/commands/ls_spec.rb +177 -0
- data/spec/commands/play_spec.rb +140 -0
- data/spec/commands/raise_up_spec.rb +56 -0
- data/spec/commands/save_file_spec.rb +177 -0
- data/spec/commands/show_doc_spec.rb +378 -0
- data/spec/commands/show_input_spec.rb +17 -0
- data/spec/commands/show_source_spec.rb +597 -0
- data/spec/commands/whereami_spec.rb +154 -0
- data/spec/completion_spec.rb +233 -0
- data/spec/control_d_handler_spec.rb +58 -0
- data/spec/editor_spec.rb +79 -0
- data/{test/test_exception_whitelist.rb → spec/exception_whitelist_spec.rb} +0 -0
- data/{test → spec/fixtures}/candidate_helper1.rb +0 -0
- data/{test → spec/fixtures}/candidate_helper2.rb +0 -0
- data/{test/test_default_commands → spec/fixtures}/example.erb +0 -0
- data/spec/fixtures/example_nesting.rb +33 -0
- data/spec/fixtures/show_source_doc_examples.rb +15 -0
- data/{test → spec/fixtures}/testrc +0 -0
- data/{test → spec/fixtures}/testrcbad +0 -0
- data/spec/helper.rb +34 -0
- data/spec/helpers/bacon.rb +86 -0
- data/spec/helpers/mock_pry.rb +43 -0
- data/spec/helpers/table_spec.rb +83 -0
- data/{test/test_history_array.rb → spec/history_array_spec.rb} +21 -19
- data/{test/test_hooks.rb → spec/hooks_spec.rb} +0 -0
- data/{test/test_indent.rb → spec/indent_spec.rb} +24 -0
- data/{test/test_input_stack.rb → spec/input_stack_spec.rb} +4 -0
- data/{test/test_method.rb → spec/method_spec.rb} +65 -1
- data/{test/test_prompt.rb → spec/prompt_spec.rb} +0 -0
- data/{test/test_pry_defaults.rb → spec/pry_defaults_spec.rb} +14 -14
- data/{test/test_pry_history.rb → spec/pry_history_spec.rb} +15 -0
- data/spec/pry_output_spec.rb +95 -0
- data/{test/test_pry.rb → spec/pry_spec.rb} +74 -32
- data/{test/test_sticky_locals.rb → spec/sticky_locals_spec.rb} +27 -25
- data/{test/test_syntax_checking.rb → spec/syntax_checking_spec.rb} +17 -1
- data/{test/test_wrapped_module.rb → spec/wrapped_module_spec.rb} +92 -5
- metadata +239 -115
- 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/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/test/helper.rb +0 -223
- data/test/test_completion.rb +0 -62
- data/test/test_control_d_handler.rb +0 -45
- data/test/test_default_commands/test_cd.rb +0 -321
- data/test/test_default_commands/test_context.rb +0 -288
- data/test/test_default_commands/test_documentation.rb +0 -315
- data/test/test_default_commands/test_gems.rb +0 -18
- 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_pry_output.rb +0 -41
data/lib/pry/rubygem.rb
ADDED
@@ -0,0 +1,74 @@
|
|
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
|
+
spec = specs.sort_by{ |spec| Gem::Version.new(spec.version) }.first
|
27
|
+
|
28
|
+
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
|
+
destination = File.writable?(Gem.dir) ? Gem.dir : Gem.user_dir
|
61
|
+
installer = Gem::DependencyInstaller.new(:install_dir => destination)
|
62
|
+
installer.install(name)
|
63
|
+
rescue Errno::EACCES
|
64
|
+
raise CommandError,
|
65
|
+
"Insufficient permissions to install `#{ text.green(name) }`."
|
66
|
+
rescue Gem::GemNotFoundException
|
67
|
+
raise CommandError, "Gem `#{ text.green(name) }` not found."
|
68
|
+
else
|
69
|
+
Gem.refresh
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Pry::TerminalInfo
|
2
|
+
# Return a pair of [rows, columns] which gives the size of the window.
|
3
|
+
#
|
4
|
+
# If the window size cannot be determined, return nil.
|
5
|
+
def self.screen_size
|
6
|
+
rows, cols = actual_screen_size
|
7
|
+
if rows && cols
|
8
|
+
[rows.to_i, cols.to_i]
|
9
|
+
else
|
10
|
+
nil
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.actual_screen_size
|
15
|
+
[
|
16
|
+
# Some readlines also provides get_screen_size.
|
17
|
+
# Readline comes before IO#winsize because jruby sometimes defaults winsize to [25, 80]
|
18
|
+
readline_screen_size,
|
19
|
+
|
20
|
+
# io/console adds a winsize method to IO streams.
|
21
|
+
# rescue nil for jruby 1.7.0 [jruby/jruby#354]
|
22
|
+
$stdout.tty? && $stdout.respond_to?(:winsize) && ($stdout.winsize rescue nil),
|
23
|
+
|
24
|
+
# Otherwise try to use the environment (this may be out of date due
|
25
|
+
# to window resizing, but it's better than nothing).
|
26
|
+
[ENV["LINES"] || ENV["ROWS"], ENV["COLUMNS"]],
|
27
|
+
|
28
|
+
# If the user is running within ansicon, then use the screen size
|
29
|
+
# that it reports (same caveats apply as with ROWS and COLUMNS)
|
30
|
+
ENV['ANSICON'] =~ /\((.*)x(.*)\)/ && [$2, $1],
|
31
|
+
].detect do |(_, cols)|
|
32
|
+
cols.to_i > 0
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.readline_screen_size
|
37
|
+
Readline.get_screen_size if Readline.respond_to?(:get_screen_size)
|
38
|
+
rescue Java::JavaLang::NullPointerException
|
39
|
+
# This rescue won't happen on jrubies later than:
|
40
|
+
# https://github.com/jruby/jruby/pull/436
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
require 'pry'
|
2
|
+
|
3
|
+
# in case the tests call reset_defaults, ensure we reset them to
|
4
|
+
# amended (test friendly) values
|
5
|
+
class << Pry
|
6
|
+
alias_method :orig_reset_defaults, :reset_defaults
|
7
|
+
def reset_defaults
|
8
|
+
orig_reset_defaults
|
9
|
+
|
10
|
+
Pry.color = false
|
11
|
+
Pry.pager = false
|
12
|
+
Pry.config.should_load_rc = false
|
13
|
+
Pry.config.should_load_local_rc= false
|
14
|
+
Pry.config.should_load_plugins = false
|
15
|
+
Pry.config.history.should_load = false
|
16
|
+
Pry.config.history.should_save = false
|
17
|
+
Pry.config.auto_indent = false
|
18
|
+
Pry.config.hooks = Pry::Hooks.new
|
19
|
+
Pry.config.collision_warning = false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
Pry.reset_defaults
|
23
|
+
|
24
|
+
# A global space for storing temporary state during tests.
|
25
|
+
|
26
|
+
module PryTestHelpers
|
27
|
+
|
28
|
+
module_function
|
29
|
+
|
30
|
+
# inject a variable into a binding
|
31
|
+
def inject_var(name, value, b)
|
32
|
+
Pry.current[:pry_local] = value
|
33
|
+
b.eval("#{name} = ::Pry.current[:pry_local]")
|
34
|
+
ensure
|
35
|
+
Pry.current[:pry_local] = nil
|
36
|
+
end
|
37
|
+
|
38
|
+
def constant_scope(*names)
|
39
|
+
names.each do |name|
|
40
|
+
Object.remove_const name if Object.const_defined?(name)
|
41
|
+
end
|
42
|
+
|
43
|
+
yield
|
44
|
+
ensure
|
45
|
+
names.each do |name|
|
46
|
+
Object.remove_const name if Object.const_defined?(name)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def mri18_and_no_real_source_location?
|
51
|
+
Pry::Helpers::BaseHelpers.mri_18? && !(Method.instance_method(:source_location).owner == Method)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Open a temp file and yield it to the block, closing it after
|
55
|
+
# @return [String] The path of the temp file
|
56
|
+
def temp_file(ext='.rb')
|
57
|
+
file = Tempfile.new(['pry', ext])
|
58
|
+
yield file
|
59
|
+
ensure
|
60
|
+
file.close(true) if file
|
61
|
+
File.unlink("#{file.path}c") if File.exists?("#{file.path}c") # rbx
|
62
|
+
end
|
63
|
+
|
64
|
+
def unindent(*args)
|
65
|
+
Pry::Helpers::CommandHelpers.unindent(*args)
|
66
|
+
end
|
67
|
+
|
68
|
+
def mock_command(cmd, args=[], opts={})
|
69
|
+
output = StringIO.new
|
70
|
+
ret = cmd.new(opts.merge(:output => output)).call_safely(*args)
|
71
|
+
Struct.new(:output, :return).new(output.string, ret)
|
72
|
+
end
|
73
|
+
|
74
|
+
def mock_exception(*mock_backtrace)
|
75
|
+
e = StandardError.new("mock exception")
|
76
|
+
(class << e; self; end).class_eval do
|
77
|
+
define_method(:backtrace) { mock_backtrace }
|
78
|
+
end
|
79
|
+
e
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def pry_tester(*args, &block)
|
84
|
+
if args.length == 0 || args[0].is_a?(Hash)
|
85
|
+
args.unshift(Pry.toplevel_binding)
|
86
|
+
end
|
87
|
+
|
88
|
+
PryTester.new(*args).tap do |t|
|
89
|
+
(class << t; self; end).class_eval(&block) if block
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def pry_eval(*eval_strs)
|
94
|
+
if eval_strs.first.is_a? String
|
95
|
+
binding = Pry.toplevel_binding
|
96
|
+
else
|
97
|
+
binding = Pry.binding_for(eval_strs.shift)
|
98
|
+
end
|
99
|
+
|
100
|
+
pry_tester(binding).eval(*eval_strs)
|
101
|
+
end
|
102
|
+
|
103
|
+
class PryTester
|
104
|
+
attr_reader :pry, :out
|
105
|
+
|
106
|
+
def initialize(context = TOPLEVEL_BINDING, options = {})
|
107
|
+
@pry = Pry.new(options)
|
108
|
+
|
109
|
+
if context
|
110
|
+
target = Pry.binding_for(context)
|
111
|
+
@pry.binding_stack << target
|
112
|
+
@pry.inject_sticky_locals(target)
|
113
|
+
end
|
114
|
+
|
115
|
+
@pry.input_array << nil # TODO: shouldn't need this
|
116
|
+
reset_output
|
117
|
+
end
|
118
|
+
|
119
|
+
def eval(*strs)
|
120
|
+
reset_output
|
121
|
+
result = nil
|
122
|
+
|
123
|
+
strs.flatten.each do |str|
|
124
|
+
str = "#{str.strip}\n"
|
125
|
+
if @pry.process_command(str)
|
126
|
+
result = last_command_result_or_output
|
127
|
+
else
|
128
|
+
result = @pry.evaluate_ruby(str)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
result
|
133
|
+
end
|
134
|
+
|
135
|
+
def context=(context)
|
136
|
+
@pry.binding_stack << Pry.binding_for(context)
|
137
|
+
end
|
138
|
+
|
139
|
+
# TODO: eliminate duplication with Pry#repl
|
140
|
+
def simulate_repl
|
141
|
+
didnt_exit = nil
|
142
|
+
break_data = nil
|
143
|
+
|
144
|
+
didnt_exit = catch(:didnt_exit) do
|
145
|
+
break_data = catch(:breakout) do
|
146
|
+
yield self
|
147
|
+
throw(:didnt_exit, true)
|
148
|
+
end
|
149
|
+
nil
|
150
|
+
end
|
151
|
+
|
152
|
+
raise "Failed to exit REPL" if didnt_exit
|
153
|
+
break_data
|
154
|
+
end
|
155
|
+
|
156
|
+
def last_output
|
157
|
+
@out.string if @out
|
158
|
+
end
|
159
|
+
|
160
|
+
def process_command(command_str, eval_str = '')
|
161
|
+
@pry.process_command(command_str, eval_str) or raise "Not a valid command"
|
162
|
+
last_command_result_or_output
|
163
|
+
end
|
164
|
+
|
165
|
+
protected
|
166
|
+
|
167
|
+
def last_command_result
|
168
|
+
result = Pry.current[:pry_cmd_result]
|
169
|
+
result.retval if result
|
170
|
+
end
|
171
|
+
|
172
|
+
def last_command_result_or_output
|
173
|
+
result = last_command_result
|
174
|
+
if result != Pry::Command::VOID_VALUE
|
175
|
+
result
|
176
|
+
else
|
177
|
+
last_output
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def reset_output
|
182
|
+
@out = StringIO.new
|
183
|
+
@pry.output = @out
|
184
|
+
end
|
185
|
+
end
|
data/lib/pry/version.rb
CHANGED
data/lib/pry/wrapped_module.rb
CHANGED
@@ -14,10 +14,10 @@ class Pry
|
|
14
14
|
end
|
15
15
|
|
16
16
|
class WrappedModule
|
17
|
-
include
|
17
|
+
include Helpers::BaseHelpers
|
18
|
+
include CodeObject::Helpers
|
18
19
|
|
19
20
|
attr_reader :wrapped
|
20
|
-
private :wrapped
|
21
21
|
|
22
22
|
# Convert a string to a module.
|
23
23
|
#
|
@@ -27,11 +27,7 @@ class Pry
|
|
27
27
|
# @example
|
28
28
|
# Pry::WrappedModule.from_str("Pry::Code")
|
29
29
|
def self.from_str(mod_name, target=TOPLEVEL_BINDING)
|
30
|
-
|
31
|
-
|
32
|
-
# if we dont limit it to constants then from_str could end up
|
33
|
-
# executing methods which is not good, i.e `show-source pry`
|
34
|
-
if (kind == "constant" && target.eval(mod_name).is_a?(Module))
|
30
|
+
if safe_to_evaluate?(mod_name, target)
|
35
31
|
Pry::WrappedModule.new(target.eval(mod_name))
|
36
32
|
else
|
37
33
|
nil
|
@@ -40,6 +36,23 @@ class Pry
|
|
40
36
|
nil
|
41
37
|
end
|
42
38
|
|
39
|
+
class << self
|
40
|
+
private
|
41
|
+
|
42
|
+
# We use this method to decide whether code is safe to eval. Method's are
|
43
|
+
# generally not, but everything else is.
|
44
|
+
# TODO: is just checking != "method" enough??
|
45
|
+
# TODO: see duplication of this method in Pry::CodeObject
|
46
|
+
# @param [String] str The string to lookup.
|
47
|
+
# @param [Binding] target Where the lookup takes place.
|
48
|
+
# @return [Boolean]
|
49
|
+
def safe_to_evaluate?(str, target)
|
50
|
+
return true if str.strip == "self"
|
51
|
+
kind = target.eval("defined?(#{str})")
|
52
|
+
kind =~ /variable|constant/
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
43
56
|
# @raise [ArgumentError] if the argument is not a `Module`
|
44
57
|
# @param [Module] mod
|
45
58
|
def initialize(mod)
|
@@ -204,6 +217,24 @@ class Pry
|
|
204
217
|
!!(defined?(YARD) && YARD::Registry.at(name))
|
205
218
|
end
|
206
219
|
|
220
|
+
# @param [Fixnum] times How far to travel up the ancestor chain.
|
221
|
+
# @return [Pry::WrappedModule, nil] The wrapped module that is the
|
222
|
+
# superclass.
|
223
|
+
# When `self` is a `Module` then return the
|
224
|
+
# nth ancestor, otherwise (in the case of classes) return the
|
225
|
+
# nth ancestor that is a class.
|
226
|
+
def super(times=1)
|
227
|
+
return self if times.zero?
|
228
|
+
|
229
|
+
if wrapped.is_a?(Class)
|
230
|
+
sup = ancestors.select { |v| v.is_a?(Class) }[times]
|
231
|
+
else
|
232
|
+
sup = ancestors[times]
|
233
|
+
end
|
234
|
+
|
235
|
+
Pry::WrappedModule(sup) if sup
|
236
|
+
end
|
237
|
+
|
207
238
|
private
|
208
239
|
|
209
240
|
# @return [Pry::WrappedModule::Candidate] The candidate of rank 0,
|
@@ -231,17 +262,23 @@ class Pry
|
|
231
262
|
def all_source_locations_by_popularity
|
232
263
|
return @all_source_locations_by_popularity if @all_source_locations_by_popularity
|
233
264
|
|
234
|
-
ims =
|
235
|
-
|
236
|
-
# reject __class_init__ because it's an odd rbx specific thing that causes tests to fail
|
237
|
-
ims = ims.select(&:source_location).reject{ |x| x.name == '__class_init__' }
|
238
|
-
|
265
|
+
ims = all_relevant_methods_for(wrapped)
|
239
266
|
@all_source_locations_by_popularity = ims.group_by { |v| Array(v.source_location).first }.
|
240
267
|
sort_by { |k, v| -v.size }
|
241
268
|
end
|
242
269
|
|
270
|
+
# We only want methods that have a non-nil `source_location`. We also
|
271
|
+
# skip some spooky internal methods.
|
272
|
+
# (i.e we skip `__class_init__` because it's an odd rbx specific thing that causes tests to fail.)
|
273
|
+
# @return [Array<Pry::Method>]
|
274
|
+
def all_relevant_methods_for(mod)
|
275
|
+
all_methods_for(mod).select(&:source_location).
|
276
|
+
reject{ |x| x.name == '__class_init__' || method_defined_by_forwardable_module?(x) }
|
277
|
+
end
|
278
|
+
|
243
279
|
# Return all methods (instance methods and class methods) for a
|
244
280
|
# given module.
|
281
|
+
# @return [Array<Pry::Method>]
|
245
282
|
def all_methods_for(mod)
|
246
283
|
all_from_common(mod, :instance_method) + all_from_common(mod, :method)
|
247
284
|
end
|
@@ -261,6 +298,15 @@ class Pry
|
|
261
298
|
end.flatten
|
262
299
|
end
|
263
300
|
|
301
|
+
# Detect methods that are defined with `def_delegator` from the Forwardable
|
302
|
+
# module. We want to reject these methods as they screw up module
|
303
|
+
# extraction since the `source_location` for such methods points at forwardable.rb
|
304
|
+
# TODO: make this more robust as valid user-defined files called
|
305
|
+
# forwardable.rb are also skipped.
|
306
|
+
def method_defined_by_forwardable_module?(method)
|
307
|
+
method.source_location.first =~ /forwardable\.rb/
|
308
|
+
end
|
309
|
+
|
264
310
|
# memoized lines for file
|
265
311
|
def lines_for_file(file)
|
266
312
|
@lines_for_file ||= {}
|
@@ -271,17 +317,5 @@ class Pry
|
|
271
317
|
@lines_for_file[file] ||= File.readlines(file)
|
272
318
|
end
|
273
319
|
end
|
274
|
-
|
275
|
-
# FIXME: this method is also found in Pry::Method
|
276
|
-
def safe_send(obj, method, *args, &block)
|
277
|
-
(Module === obj ? Module : Object).instance_method(method).bind(obj).call(*args, &block)
|
278
|
-
end
|
279
|
-
|
280
|
-
# @param [String] doc The raw docstring to process.
|
281
|
-
# @return [String] Process docstring markup and strip leading white space.
|
282
|
-
def process_doc(doc)
|
283
|
-
process_comment_markup(strip_leading_hash_and_whitespace_from_ruby_comments(doc))
|
284
|
-
end
|
285
|
-
|
286
320
|
end
|
287
321
|
end
|
data/pry.gemspec
CHANGED
@@ -1,46 +1,30 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/pry/version', __FILE__)
|
2
3
|
|
3
4
|
Gem::Specification.new do |s|
|
4
|
-
s.name
|
5
|
-
s.version =
|
5
|
+
s.name = "pry"
|
6
|
+
s.version = Pry::VERSION
|
6
7
|
|
7
|
-
s.
|
8
|
-
s.
|
9
|
-
s.
|
10
|
-
s.description =
|
11
|
-
s.email = ["jrmair@gmail.com", "conrad.irwin@gmail.com"]
|
12
|
-
s.executables = ["pry"]
|
13
|
-
s.files = [".document", ".gemtest", ".gitignore", ".travis.yml", ".yardopts", "CHANGELOG", "CONTRIBUTORS", "Gemfile", "LICENSE", "README.markdown", "Rakefile", "TODO", "bin/pry", "examples/example_basic.rb", "examples/example_command_override.rb", "examples/example_commands.rb", "examples/example_hooks.rb", "examples/example_image_edit.rb", "examples/example_input.rb", "examples/example_input2.rb", "examples/example_output.rb", "examples/example_print.rb", "examples/example_prompt.rb", "examples/helper.rb", "lib/pry.rb", "lib/pry/cli.rb", "lib/pry/code.rb", "lib/pry/command.rb", "lib/pry/command_set.rb", "lib/pry/commands.rb", "lib/pry/completion.rb", "lib/pry/config.rb", "lib/pry/core_extensions.rb", "lib/pry/custom_completions.rb", "lib/pry/default_commands/cd.rb", "lib/pry/default_commands/commands.rb", "lib/pry/default_commands/context.rb", "lib/pry/default_commands/easter_eggs.rb", "lib/pry/default_commands/editing.rb", "lib/pry/default_commands/find_method.rb", "lib/pry/default_commands/gems.rb", "lib/pry/default_commands/gist.rb", "lib/pry/default_commands/help.rb", "lib/pry/default_commands/hist.rb", "lib/pry/default_commands/input_and_output.rb", "lib/pry/default_commands/introspection.rb", "lib/pry/default_commands/ls.rb", "lib/pry/default_commands/misc.rb", "lib/pry/default_commands/navigating_pry.rb", "lib/pry/default_commands/whereami.rb", "lib/pry/extended_commands/experimental.rb", "lib/pry/helpers.rb", "lib/pry/helpers/base_helpers.rb", "lib/pry/helpers/command_helpers.rb", "lib/pry/helpers/documentation_helpers.rb", "lib/pry/helpers/options_helpers.rb", "lib/pry/helpers/text.rb", "lib/pry/history.rb", "lib/pry/history_array.rb", "lib/pry/hooks.rb", "lib/pry/indent.rb", "lib/pry/method.rb", "lib/pry/module_candidate.rb", "lib/pry/plugins.rb", "lib/pry/pry_class.rb", "lib/pry/pry_instance.rb", "lib/pry/rbx_method.rb", "lib/pry/rbx_path.rb", "lib/pry/repl_file_loader.rb", "lib/pry/version.rb", "lib/pry/wrapped_module.rb", "man/pry.1", "man/pry.1.html", "man/pry.1.ronn", "pry.gemspec", "test/candidate_helper1.rb", "test/candidate_helper2.rb", "test/helper.rb", "test/test_cli.rb", "test/test_code.rb", "test/test_command.rb", "test/test_command_helpers.rb", "test/test_command_integration.rb", "test/test_command_set.rb", "test/test_completion.rb", "test/test_control_d_handler.rb", "test/test_default_commands/example.erb", "test/test_default_commands/test_cd.rb", "test/test_default_commands/test_context.rb", "test/test_default_commands/test_documentation.rb", "test/test_default_commands/test_find_method.rb", "test/test_default_commands/test_gems.rb", "test/test_default_commands/test_help.rb", "test/test_default_commands/test_input.rb", "test/test_default_commands/test_introspection.rb", "test/test_default_commands/test_ls.rb", "test/test_default_commands/test_shell.rb", "test/test_default_commands/test_show_source.rb", "test/test_exception_whitelist.rb", "test/test_history_array.rb", "test/test_hooks.rb", "test/test_indent.rb", "test/test_input_stack.rb", "test/test_method.rb", "test/test_prompt.rb", "test/test_pry.rb", "test/test_pry_defaults.rb", "test/test_pry_history.rb", "test/test_pry_output.rb", "test/test_sticky_locals.rb", "test/test_syntax_checking.rb", "test/test_wrapped_module.rb", "test/testrc", "test/testrcbad", "wiki/Customizing-pry.md", "wiki/Home.md"]
|
8
|
+
s.authors = ["John Mair (banisterfiend)", "Conrad Irwin", "Ryan Fitzgerald"]
|
9
|
+
s.email = ["jrmair@gmail.com", "conrad.irwin@gmail.com", "rwfitzge@gmail.com"]
|
10
|
+
s.summary = "An IRB alternative and runtime developer console"
|
11
|
+
s.description = s.summary
|
14
12
|
s.homepage = "http://pry.github.com"
|
13
|
+
|
14
|
+
s.executables = ["pry"]
|
15
15
|
s.require_paths = ["lib"]
|
16
|
-
s.
|
17
|
-
s.
|
18
|
-
s.test_files = ["test/candidate_helper1.rb", "test/candidate_helper2.rb", "test/helper.rb", "test/test_cli.rb", "test/test_code.rb", "test/test_command.rb", "test/test_command_helpers.rb", "test/test_command_integration.rb", "test/test_command_set.rb", "test/test_completion.rb", "test/test_control_d_handler.rb", "test/test_default_commands/example.erb", "test/test_default_commands/test_cd.rb", "test/test_default_commands/test_context.rb", "test/test_default_commands/test_documentation.rb", "test/test_default_commands/test_find_method.rb", "test/test_default_commands/test_gems.rb", "test/test_default_commands/test_help.rb", "test/test_default_commands/test_input.rb", "test/test_default_commands/test_introspection.rb", "test/test_default_commands/test_ls.rb", "test/test_default_commands/test_shell.rb", "test/test_default_commands/test_show_source.rb", "test/test_exception_whitelist.rb", "test/test_history_array.rb", "test/test_hooks.rb", "test/test_indent.rb", "test/test_input_stack.rb", "test/test_method.rb", "test/test_prompt.rb", "test/test_pry.rb", "test/test_pry_defaults.rb", "test/test_pry_history.rb", "test/test_pry_output.rb", "test/test_sticky_locals.rb", "test/test_syntax_checking.rb", "test/test_wrapped_module.rb", "test/testrc", "test/testrcbad"]
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
19
18
|
|
20
|
-
|
21
|
-
|
19
|
+
s.add_dependency 'coderay', '~> 1.0.5'
|
20
|
+
s.add_dependency 'slop', '~> 3.4'
|
21
|
+
s.add_dependency 'method_source', '~> 0.8'
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
else
|
31
|
-
s.add_dependency(%q<coderay>, ["~> 1.0.5"])
|
32
|
-
s.add_dependency(%q<slop>, ["~> 3.3.1"])
|
33
|
-
s.add_dependency(%q<method_source>, ["~> 0.8"])
|
34
|
-
s.add_dependency(%q<bacon>, ["~> 1.1"])
|
35
|
-
s.add_dependency(%q<open4>, ["~> 1.3"])
|
36
|
-
s.add_dependency(%q<rake>, ["~> 0.9"])
|
37
|
-
end
|
38
|
-
else
|
39
|
-
s.add_dependency(%q<coderay>, ["~> 1.0.5"])
|
40
|
-
s.add_dependency(%q<slop>, ["~> 3.3.1"])
|
41
|
-
s.add_dependency(%q<method_source>, ["~> 0.8"])
|
42
|
-
s.add_dependency(%q<bacon>, ["~> 1.1"])
|
43
|
-
s.add_dependency(%q<open4>, ["~> 1.3"])
|
44
|
-
s.add_dependency(%q<rake>, ["~> 0.9"])
|
45
|
-
end
|
23
|
+
s.add_development_dependency 'bacon', '~> 1.2'
|
24
|
+
s.add_development_dependency 'open4', '~> 1.3'
|
25
|
+
s.add_development_dependency 'rake', '~> 0.9'
|
26
|
+
s.add_development_dependency 'guard', '~> 1.3.2'
|
27
|
+
s.add_development_dependency 'mocha', '~> 0.13.1'
|
28
|
+
# TODO: make this a plain dependency:
|
29
|
+
s.add_development_dependency 'bond', '~> 0.4.2'
|
46
30
|
end
|