pry 0.9.7.4-i386-mingw32 → 0.9.8-i386-mingw32
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/man/pry.1.ronn
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
PRY(1) -- A Reference to the PRY repl.
|
2
|
+
======================================
|
3
|
+
|
4
|
+
##Synopsis
|
5
|
+
|
6
|
+
|
7
|
+
`pry` [`--version`] [`--exec`] [`--no-pager`] [`--no-history`] [`--no-color`] [`-f`] [`--no-plugins`] [`--installed-plugins`] [`--simple-prompt`] [`--require` _file_] [`-I`] [`--context`] [`--help`]
|
8
|
+
|
9
|
+
## DESCRIPTION
|
10
|
+
|
11
|
+
|
12
|
+
Pry is a powerful alternative to the standard IRB shell for Ruby. It is written from scratch to provide a number of advanced features.
|
13
|
+
|
14
|
+
## HOMEPAGE
|
15
|
+
|
16
|
+
|
17
|
+
http://pry.github.com/
|
18
|
+
|
19
|
+
##OPTIONS
|
20
|
+
|
21
|
+
|
22
|
+
* `-v --version`:
|
23
|
+
Prints the version of Pry.
|
24
|
+
|
25
|
+
* `-e --exec`:
|
26
|
+
Executes argument in context before the session starts.
|
27
|
+
|
28
|
+
* `--no-pager`:
|
29
|
+
Disable pager for long output.
|
30
|
+
|
31
|
+
* `--no-history`:
|
32
|
+
Disable history loading.
|
33
|
+
|
34
|
+
* `--no-color`:
|
35
|
+
Disable syntax highlighting for session.
|
36
|
+
|
37
|
+
* `-f`:
|
38
|
+
Prevent loading of ~/.pryrc for session.
|
39
|
+
|
40
|
+
* `--no-plugins`:
|
41
|
+
Supress loading of plugins.
|
42
|
+
|
43
|
+
* `--installed-plugins`:
|
44
|
+
List installed plugins.
|
45
|
+
|
46
|
+
* `--simple-prompt`:
|
47
|
+
Enable simple prompt mode (eg, >>).
|
48
|
+
|
49
|
+
* `-r --require`:
|
50
|
+
Require a ruby script at startup.
|
51
|
+
|
52
|
+
* `-I`:
|
53
|
+
Add a path to the $LOAD_PATH
|
54
|
+
|
55
|
+
* `-c --context`:
|
56
|
+
Start the session in the specified context. Equivalent to `context.pry` in a session.
|
57
|
+
|
58
|
+
##FILES
|
59
|
+
|
60
|
+
|
61
|
+
~/.pryrc Personal pry initialization
|
62
|
+
|
63
|
+
##EXAMPLES
|
64
|
+
|
65
|
+
###Basic Usage
|
66
|
+
|
67
|
+
|
68
|
+
$ pry
|
69
|
+
[1] pry(main)>4 + 5
|
70
|
+
=> 9
|
71
|
+
[2] pry(main)> def hello_world
|
72
|
+
[2] pry(main)* puts "Hello, World!"
|
73
|
+
[2] pry(main)* end
|
74
|
+
=> nil
|
75
|
+
[3] pry(main)> hello_world
|
76
|
+
Hello, World!
|
77
|
+
=> nil
|
78
|
+
|
79
|
+
###Command Line Interaction
|
80
|
+
|
81
|
+
|
82
|
+
Prefix any command you want your shell to execute with a period and pry will return the results from your shell.
|
83
|
+
|
84
|
+
[1] pry(main)> .date
|
85
|
+
Fri Nov 11 09:52:07 EST 2011
|
86
|
+
|
87
|
+
On the command line enter `shell-mode` to incorporate the current working directory into the Pry prompt.
|
88
|
+
|
89
|
+
pry(main)> shell-mode
|
90
|
+
pry main:/Users/john/ruby/projects/pry $ .cd ..
|
91
|
+
pry main:/Users/john/ruby/projects $ .cd ~
|
92
|
+
pry main:/Users/john $ .pwd
|
93
|
+
/Users/john
|
94
|
+
pry main:/Users/john $ shell-mode
|
95
|
+
pry(main)>
|
96
|
+
|
97
|
+
###State Navigation
|
98
|
+
|
99
|
+
|
100
|
+
The cd command is used to move into a new object (or scope) inside a Pry session. When inside the new scope it becomes the self for the session and all commands and methods will operate on this new self.
|
101
|
+
|
102
|
+
pry(main)> self
|
103
|
+
=> main
|
104
|
+
pry(main)> cd Pry
|
105
|
+
pry(Pry):1> self
|
106
|
+
=> Pry
|
107
|
+
pry(Pry):1> cd ..
|
108
|
+
pry(main)>
|
109
|
+
|
110
|
+
The ls command is essentially a unified wrapper to a number of Ruby's introspection mechanisms, including (but not limited to) the following methods: methods, instance\_variables, constants, local\_variables, instance\_methods, class_variables and all the various permutations thereof.
|
111
|
+
|
112
|
+
By default typing ls will return a list of just the local and instance variables available in the current context.
|
113
|
+
|
114
|
+
* The -M option selects public instance methods (if available).
|
115
|
+
* The -m option selects public methods.
|
116
|
+
* The -c option selects constants.
|
117
|
+
* The -i option select just instance variables.
|
118
|
+
* The -l option selects just local variables.
|
119
|
+
* The -s option modifies the -c and -m and -M options to go up the superclass chain (excluding Object).
|
120
|
+
* The --grep REGEX prunes the list to items that match the regex.
|
121
|
+
|
122
|
+
###Source Browsing
|
123
|
+
|
124
|
+
|
125
|
+
Simply typing show-method method_name will pull the source for the method and display it with syntax highlighting. You can also look up the source for multiple methods at the same time, by typing show-method method1 method2. As a convenience, Pry looks up both instance methods and class methods using this syntax, with priority given to instance methods.
|
126
|
+
|
127
|
+
pry(Pry):1> show-method rep
|
128
|
+
|
129
|
+
From: /Users/john/ruby/projects/pry/lib/pry/pry_instance.rb @ line 191:
|
130
|
+
Number of lines: 6
|
131
|
+
|
132
|
+
def rep(target=TOPLEVEL_BINDING)
|
133
|
+
target = Pry.binding_for(target)
|
134
|
+
result = re(target)
|
135
|
+
|
136
|
+
show_result(result) if should_print?
|
137
|
+
end
|
138
|
+
|
139
|
+
##AUTHORS
|
140
|
+
|
141
|
+
Pry is primarily the work of John Mair (banisterfiend)
|
data/pry.gemspec
CHANGED
@@ -1,49 +1,46 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
|
-
s.name =
|
5
|
-
s.version = "0.9.
|
4
|
+
s.name = %q{pry}
|
5
|
+
s.version = "0.9.8pre7"
|
6
6
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
8
|
-
s.authors = [
|
9
|
-
s.date =
|
10
|
-
s.description =
|
11
|
-
s.email =
|
12
|
-
s.executables = [
|
13
|
-
s.files = [
|
14
|
-
s.homepage =
|
15
|
-
s.require_paths = [
|
16
|
-
s.rubygems_version =
|
17
|
-
s.summary =
|
18
|
-
s.test_files = [
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = [%q{John Mair (banisterfiend)}]
|
9
|
+
s.date = %q{2012-01-20}
|
10
|
+
s.description = %q{An IRB alternative and runtime developer console}
|
11
|
+
s.email = %q{jrmair@gmail.com}
|
12
|
+
s.executables = [%q{pry}]
|
13
|
+
s.files = [%q{.document}, %q{.gemtest}, %q{.gitignore}, %q{.travis.yml}, %q{.yardopts}, %q{CHANGELOG}, %q{CONTRIBUTORS}, %q{Gemfile}, %q{LICENSE}, %q{README.markdown}, %q{Rakefile}, %q{TODO}, %q{bin/pry}, %q{examples/example_basic.rb}, %q{examples/example_command_override.rb}, %q{examples/example_commands.rb}, %q{examples/example_hooks.rb}, %q{examples/example_image_edit.rb}, %q{examples/example_input.rb}, %q{examples/example_input2.rb}, %q{examples/example_output.rb}, %q{examples/example_print.rb}, %q{examples/example_prompt.rb}, %q{examples/helper.rb}, %q{lib/pry.rb}, %q{lib/pry/cli.rb}, %q{lib/pry/code.rb}, %q{lib/pry/command.rb}, %q{lib/pry/command_set.rb}, %q{lib/pry/commands.rb}, %q{lib/pry/completion.rb}, %q{lib/pry/config.rb}, %q{lib/pry/core_extensions.rb}, %q{lib/pry/custom_completions.rb}, %q{lib/pry/default_commands/basic.rb}, %q{lib/pry/default_commands/context.rb}, %q{lib/pry/default_commands/documentation.rb}, %q{lib/pry/default_commands/easter_eggs.rb}, %q{lib/pry/default_commands/gems.rb}, %q{lib/pry/default_commands/input.rb}, %q{lib/pry/default_commands/introspection.rb}, %q{lib/pry/default_commands/ls.rb}, %q{lib/pry/default_commands/shell.rb}, %q{lib/pry/extended_commands/experimental.rb}, %q{lib/pry/helpers.rb}, %q{lib/pry/helpers/base_helpers.rb}, %q{lib/pry/helpers/command_helpers.rb}, %q{lib/pry/helpers/options_helpers.rb}, %q{lib/pry/helpers/text.rb}, %q{lib/pry/history.rb}, %q{lib/pry/history_array.rb}, %q{lib/pry/hooks.rb}, %q{lib/pry/indent.rb}, %q{lib/pry/method.rb}, %q{lib/pry/plugins.rb}, %q{lib/pry/pry_class.rb}, %q{lib/pry/pry_instance.rb}, %q{lib/pry/rbx_method.rb}, %q{lib/pry/rbx_path.rb}, %q{lib/pry/version.rb}, %q{lib/pry/wrapped_module.rb}, %q{man/pry.1}, %q{man/pry.1.html}, %q{man/pry.1.ronn}, %q{pry.gemspec}, %q{test/helper.rb}, %q{test/test_cli.rb}, %q{test/test_code.rb}, %q{test/test_command.rb}, %q{test/test_command_helpers.rb}, %q{test/test_command_integration.rb}, %q{test/test_command_set.rb}, %q{test/test_completion.rb}, %q{test/test_default_commands.rb}, %q{test/test_default_commands/test_context.rb}, %q{test/test_default_commands/test_documentation.rb}, %q{test/test_default_commands/test_gems.rb}, %q{test/test_default_commands/test_input.rb}, %q{test/test_default_commands/test_introspection.rb}, %q{test/test_default_commands/test_ls.rb}, %q{test/test_default_commands/test_shell.rb}, %q{test/test_exception_whitelist.rb}, %q{test/test_history_array.rb}, %q{test/test_hooks.rb}, %q{test/test_indent.rb}, %q{test/test_input_stack.rb}, %q{test/test_method.rb}, %q{test/test_pry.rb}, %q{test/test_pry_defaults.rb}, %q{test/test_pry_history.rb}, %q{test/test_pry_output.rb}, %q{test/test_special_locals.rb}, %q{test/test_syntax_checking.rb}, %q{test/test_wrapped_module.rb}, %q{test/testrc}, %q{test/testrcbad}, %q{wiki/Customizing-pry.md}, %q{wiki/Home.md}]
|
14
|
+
s.homepage = %q{http://pry.github.com}
|
15
|
+
s.require_paths = [%q{lib}]
|
16
|
+
s.rubygems_version = %q{1.8.6}
|
17
|
+
s.summary = %q{An IRB alternative and runtime developer console}
|
18
|
+
s.test_files = [%q{test/helper.rb}, %q{test/test_cli.rb}, %q{test/test_code.rb}, %q{test/test_command.rb}, %q{test/test_command_helpers.rb}, %q{test/test_command_integration.rb}, %q{test/test_command_set.rb}, %q{test/test_completion.rb}, %q{test/test_default_commands.rb}, %q{test/test_default_commands/test_context.rb}, %q{test/test_default_commands/test_documentation.rb}, %q{test/test_default_commands/test_gems.rb}, %q{test/test_default_commands/test_input.rb}, %q{test/test_default_commands/test_introspection.rb}, %q{test/test_default_commands/test_ls.rb}, %q{test/test_default_commands/test_shell.rb}, %q{test/test_exception_whitelist.rb}, %q{test/test_history_array.rb}, %q{test/test_hooks.rb}, %q{test/test_indent.rb}, %q{test/test_input_stack.rb}, %q{test/test_method.rb}, %q{test/test_pry.rb}, %q{test/test_pry_defaults.rb}, %q{test/test_pry_history.rb}, %q{test/test_pry_output.rb}, %q{test/test_special_locals.rb}, %q{test/test_syntax_checking.rb}, %q{test/test_wrapped_module.rb}, %q{test/testrc}, %q{test/testrcbad}]
|
19
19
|
|
20
20
|
if s.respond_to? :specification_version then
|
21
21
|
s.specification_version = 3
|
22
22
|
|
23
23
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
24
|
-
s.add_runtime_dependency(%q<
|
25
|
-
s.add_runtime_dependency(%q<
|
26
|
-
s.add_runtime_dependency(%q<
|
27
|
-
s.
|
28
|
-
s.add_development_dependency(%q<
|
29
|
-
s.add_development_dependency(%q<open4>, ["~> 1.0.1"])
|
24
|
+
s.add_runtime_dependency(%q<coderay>, ["~> 1.0.5"])
|
25
|
+
s.add_runtime_dependency(%q<slop>, ["< 3", ">= 2.4.3"])
|
26
|
+
s.add_runtime_dependency(%q<method_source>, ["~> 0.7"])
|
27
|
+
s.add_development_dependency(%q<bacon>, ["~> 1.1"])
|
28
|
+
s.add_development_dependency(%q<open4>, ["~> 1.3"])
|
30
29
|
s.add_development_dependency(%q<rake>, ["~> 0.9"])
|
31
30
|
else
|
32
|
-
s.add_dependency(%q<
|
33
|
-
s.add_dependency(%q<
|
34
|
-
s.add_dependency(%q<
|
35
|
-
s.add_dependency(%q<
|
36
|
-
s.add_dependency(%q<
|
37
|
-
s.add_dependency(%q<open4>, ["~> 1.0.1"])
|
31
|
+
s.add_dependency(%q<coderay>, ["~> 1.0.5"])
|
32
|
+
s.add_dependency(%q<slop>, ["< 3", ">= 2.4.3"])
|
33
|
+
s.add_dependency(%q<method_source>, ["~> 0.7"])
|
34
|
+
s.add_dependency(%q<bacon>, ["~> 1.1"])
|
35
|
+
s.add_dependency(%q<open4>, ["~> 1.3"])
|
38
36
|
s.add_dependency(%q<rake>, ["~> 0.9"])
|
39
37
|
end
|
40
38
|
else
|
41
|
-
s.add_dependency(%q<
|
42
|
-
s.add_dependency(%q<
|
43
|
-
s.add_dependency(%q<
|
44
|
-
s.add_dependency(%q<
|
45
|
-
s.add_dependency(%q<
|
46
|
-
s.add_dependency(%q<open4>, ["~> 1.0.1"])
|
39
|
+
s.add_dependency(%q<coderay>, ["~> 1.0.5"])
|
40
|
+
s.add_dependency(%q<slop>, ["< 3", ">= 2.4.3"])
|
41
|
+
s.add_dependency(%q<method_source>, ["~> 0.7"])
|
42
|
+
s.add_dependency(%q<bacon>, ["~> 1.1"])
|
43
|
+
s.add_dependency(%q<open4>, ["~> 1.3"])
|
47
44
|
s.add_dependency(%q<rake>, ["~> 0.9"])
|
48
45
|
end
|
49
46
|
end
|
data/test/helper.rb
CHANGED
@@ -3,11 +3,16 @@ unless Object.const_defined? 'Pry'
|
|
3
3
|
require 'pry'
|
4
4
|
end
|
5
5
|
|
6
|
-
puts "Ruby v#{RUBY_VERSION} (#{defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"}), Pry v#{Pry::VERSION}, method_source v#{MethodSource::VERSION}, CodeRay v#{CodeRay::VERSION}"
|
6
|
+
puts "Ruby v#{RUBY_VERSION} (#{defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"}), Pry v#{Pry::VERSION}, method_source v#{MethodSource::VERSION}, CodeRay v#{CodeRay::VERSION}, Slop v#{Slop::VERSION}"
|
7
7
|
|
8
8
|
require 'bacon'
|
9
9
|
require 'open4'
|
10
10
|
|
11
|
+
|
12
|
+
# turn warnings off (esp for Pry::Hooks which will generate warnings
|
13
|
+
# in tests)
|
14
|
+
$VERBOSE = nil
|
15
|
+
|
11
16
|
# Ensure we do not execute any rc files
|
12
17
|
Pry::RC_FILES.clear
|
13
18
|
|
@@ -21,41 +26,21 @@ class << Pry
|
|
21
26
|
Pry.color = false
|
22
27
|
Pry.pager = false
|
23
28
|
Pry.config.should_load_rc = false
|
24
|
-
Pry.config.
|
29
|
+
Pry.config.should_load_plugins = false
|
25
30
|
Pry.config.history.should_load = false
|
26
31
|
Pry.config.history.should_save = false
|
27
32
|
Pry.config.auto_indent = false
|
28
|
-
Pry.config.hooks
|
33
|
+
Pry.config.hooks = Pry::Hooks.new
|
34
|
+
Pry.config.collision_warning = false
|
29
35
|
end
|
30
36
|
end
|
31
37
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
def initialize(*backtrace)
|
37
|
-
@backtrace = backtrace
|
38
|
-
@bt_index = 0
|
39
|
-
end
|
40
|
-
|
41
|
-
def message
|
42
|
-
"mock exception"
|
38
|
+
def mock_exception(*mock_backtrace)
|
39
|
+
e = StandardError.new("mock exception")
|
40
|
+
(class << e; self; end).class_eval do
|
41
|
+
define_method(:backtrace) { mock_backtrace }
|
43
42
|
end
|
44
|
-
|
45
|
-
def bt_source_location_for(index)
|
46
|
-
backtrace[index] =~ /(.*):(\d+)/
|
47
|
-
[$1, $2.to_i]
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
# are we on Jruby platform?
|
52
|
-
def jruby?
|
53
|
-
defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /jruby/
|
54
|
-
end
|
55
|
-
|
56
|
-
# are we on rbx platform?
|
57
|
-
def rbx?
|
58
|
-
defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /rbx/
|
43
|
+
e
|
59
44
|
end
|
60
45
|
|
61
46
|
Pry.reset_defaults
|
@@ -107,6 +92,12 @@ def mock_pry(*args)
|
|
107
92
|
output.string
|
108
93
|
end
|
109
94
|
|
95
|
+
def mock_command(cmd, args=[], opts={})
|
96
|
+
output = StringIO.new
|
97
|
+
ret = cmd.new(opts.merge(:output => output)).call_safely(*args)
|
98
|
+
Struct.new(:output, :return).new(output.string, ret)
|
99
|
+
end
|
100
|
+
|
110
101
|
def redirect_global_pry_input(new_io)
|
111
102
|
old_io = Pry.input
|
112
103
|
Pry.input = new_io
|
@@ -135,15 +126,12 @@ end
|
|
135
126
|
|
136
127
|
class InputTester
|
137
128
|
def initialize(*actions)
|
138
|
-
if actions.last.is_a?(Hash) && actions.last.keys == [:history]
|
139
|
-
@hist = actions.pop[:history]
|
140
|
-
end
|
141
129
|
@orig_actions = actions.dup
|
142
130
|
@actions = actions
|
143
131
|
end
|
144
132
|
|
145
133
|
def readline(*)
|
146
|
-
@actions.shift
|
134
|
+
@actions.shift
|
147
135
|
end
|
148
136
|
|
149
137
|
def rewind
|
@@ -162,11 +150,11 @@ end
|
|
162
150
|
|
163
151
|
# Open a temp file and yield it to the block, closing it after
|
164
152
|
# @return [String] The path of the temp file
|
165
|
-
def temp_file
|
166
|
-
file = Tempfile.new(
|
153
|
+
def temp_file(ext='.rb')
|
154
|
+
file = Tempfile.new(['pry', ext])
|
167
155
|
yield file
|
168
156
|
ensure
|
169
|
-
file.close
|
157
|
+
file.close(true) if file
|
170
158
|
end
|
171
159
|
|
172
160
|
|
@@ -179,3 +167,11 @@ CommandTester = Pry::CommandSet.new do
|
|
179
167
|
output.puts arg
|
180
168
|
end
|
181
169
|
end
|
170
|
+
|
171
|
+
# to help with tracking down bugs that cause an infinite loop in the test suite
|
172
|
+
if ENV["SET_TRACE_FUNC"]
|
173
|
+
require 'set_trace' if Pry::Helpers::BaseHelpers.rbx?
|
174
|
+
set_trace_func proc { |event, file, line, id, binding, classname|
|
175
|
+
STDERR.printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
|
176
|
+
}
|
177
|
+
end
|
data/test/test_cli.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Pry::Hooks do
|
4
|
+
before do
|
5
|
+
Pry::CLI.reset
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "parsing options" do
|
9
|
+
it 'should raise if no options defined' do
|
10
|
+
lambda { Pry::CLI.parse_options(["--nothing"]) }.should.raise Pry::CLI::NoOptionsError
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "adding options" do
|
15
|
+
it "should be able to add an option" do
|
16
|
+
run = false
|
17
|
+
|
18
|
+
Pry::CLI.add_options do
|
19
|
+
on :optiontest, "A test option" do
|
20
|
+
run = true
|
21
|
+
end
|
22
|
+
end.parse_options(["--optiontest"])
|
23
|
+
|
24
|
+
run.should == true
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should be able to add multiple options" do
|
28
|
+
run = false
|
29
|
+
run2 = false
|
30
|
+
|
31
|
+
Pry::CLI.add_options do
|
32
|
+
on :optiontest, "A test option" do
|
33
|
+
run = true
|
34
|
+
end
|
35
|
+
end.add_options do
|
36
|
+
on :optiontest2, "Another test option" do
|
37
|
+
run2 = true
|
38
|
+
end
|
39
|
+
end.parse_options(["--optiontest", "--optiontest2"])
|
40
|
+
|
41
|
+
run.should == true
|
42
|
+
run2.should == true
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "processing options" do
|
48
|
+
it "should be able to process an option" do
|
49
|
+
run = false
|
50
|
+
|
51
|
+
Pry::CLI.add_options do
|
52
|
+
on :optiontest, "A test option"
|
53
|
+
end.process_options do |opts|
|
54
|
+
run = true if opts.present?(:optiontest)
|
55
|
+
end.parse_options(["--optiontest"])
|
56
|
+
|
57
|
+
run.should == true
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should be able to process multiple options" do
|
61
|
+
run = false
|
62
|
+
run2 = false
|
63
|
+
|
64
|
+
Pry::CLI.add_options do
|
65
|
+
on :optiontest, "A test option"
|
66
|
+
on :optiontest2, "Another test option"
|
67
|
+
end.process_options do |opts|
|
68
|
+
run = true if opts.present?(:optiontest)
|
69
|
+
end.process_options do |opts|
|
70
|
+
run2 = true if opts.present?(:optiontest2)
|
71
|
+
end.parse_options(["--optiontest", "--optiontest2"])
|
72
|
+
|
73
|
+
run.should == true
|
74
|
+
run2.should == true
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
data/test/test_code.rb
ADDED
@@ -0,0 +1,201 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Pry::Code do
|
4
|
+
describe '.from_file' do
|
5
|
+
should 'read lines from a file on disk' do
|
6
|
+
Pry::Code.from_file('lib/pry.rb').length.should > 0
|
7
|
+
end
|
8
|
+
|
9
|
+
should 'read lines from Pry\'s line buffer' do
|
10
|
+
mock_pry(':hay_guys')
|
11
|
+
Pry::Code.from_file('(pry)').grep(/:hay_guys/).length.should == 1
|
12
|
+
end
|
13
|
+
|
14
|
+
should 'default to Ruby' do
|
15
|
+
temp_file('') do |f|
|
16
|
+
Pry::Code.from_file(f.path).code_type.should == :ruby
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
should 'check the extension' do
|
21
|
+
temp_file('.c') do |f|
|
22
|
+
Pry::Code.from_file(f.path).code_type.should == :c
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
should 'raise an error if the file doesn\'t exist' do
|
27
|
+
proc do
|
28
|
+
Pry::Code.from_file('/knalkjsdnalsd/alkjdlkq')
|
29
|
+
end.should.raise(Pry::CommandError)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '.from_method' do
|
34
|
+
should 'read lines from a method\'s definition' do
|
35
|
+
m = Pry::Method.from_obj(Pry, :load_history)
|
36
|
+
Pry::Code.from_method(m).length.should > 0
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#initialize' do
|
41
|
+
before do
|
42
|
+
@str = Pry::Helpers::CommandHelpers.unindent <<-CODE
|
43
|
+
def hay
|
44
|
+
:guys
|
45
|
+
end
|
46
|
+
CODE
|
47
|
+
|
48
|
+
@array = ['def hay', ' :guys', 'end']
|
49
|
+
end
|
50
|
+
|
51
|
+
should 'break a string into lines' do
|
52
|
+
Pry::Code.new(@str).length.should == 3
|
53
|
+
end
|
54
|
+
|
55
|
+
should 'accept an array' do
|
56
|
+
Pry::Code.new(@array).length.should == 3
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'an array or string should produce an equivalent object' do
|
60
|
+
Pry::Code.new(@str).should == Pry::Code.new(@array)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'filters and formatters' do
|
65
|
+
before do
|
66
|
+
@code = Pry::Code(Pry::Helpers::CommandHelpers.unindent <<-STR)
|
67
|
+
class MyProgram
|
68
|
+
def self.main
|
69
|
+
puts 'Hello, world!'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
STR
|
73
|
+
end
|
74
|
+
|
75
|
+
describe 'filters' do
|
76
|
+
describe '#between' do
|
77
|
+
should 'work with an inclusive range' do
|
78
|
+
@code = @code.between(1..3)
|
79
|
+
@code.length.should == 3
|
80
|
+
@code.should =~ /\Aclass MyProgram/
|
81
|
+
@code.should =~ /world!'\Z/
|
82
|
+
end
|
83
|
+
|
84
|
+
should 'default to an inclusive range' do
|
85
|
+
@code = @code.between(3, 5)
|
86
|
+
@code.length.should == 3
|
87
|
+
end
|
88
|
+
|
89
|
+
should 'work with an exclusive range' do
|
90
|
+
@code = @code.between(2...4)
|
91
|
+
@code.length.should == 2
|
92
|
+
@code.should =~ /\A def self/
|
93
|
+
@code.should =~ /world!'\Z/
|
94
|
+
end
|
95
|
+
|
96
|
+
should 'use real line numbers for positive indices' do
|
97
|
+
@code = @code.after(3, 3)
|
98
|
+
@code = @code.between(4, 4)
|
99
|
+
@code.length.should == 1
|
100
|
+
@code.should =~ /\A end\Z/
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe '#before' do
|
105
|
+
should 'work' do
|
106
|
+
@code = @code.before(3, 1)
|
107
|
+
@code.should =~ /\A def self\.main\Z/
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '#around' do
|
112
|
+
should 'work' do
|
113
|
+
@code = @code.around(3, 1)
|
114
|
+
@code.length.should == 3
|
115
|
+
@code.should =~ /\A def self/
|
116
|
+
@code.should =~ / end\Z/
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe '#after' do
|
121
|
+
should 'work' do
|
122
|
+
@code = @code.after(3, 1)
|
123
|
+
@code.should =~ /\A end\Z/
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe '#grep' do
|
128
|
+
should 'work' do
|
129
|
+
@code = @code.grep(/end/)
|
130
|
+
@code.length.should == 2
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
describe 'formatters' do
|
136
|
+
describe '#with_line_numbers' do
|
137
|
+
should 'show line numbers' do
|
138
|
+
@code = @code.with_line_numbers
|
139
|
+
@code.should =~ /1:/
|
140
|
+
end
|
141
|
+
|
142
|
+
should 'disable line numbers when falsy' do
|
143
|
+
@code = @code.with_line_numbers
|
144
|
+
@code = @code.with_line_numbers(false)
|
145
|
+
@code.should.not =~ /1:/
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe '#with_marker' do
|
150
|
+
should 'show a marker in the right place' do
|
151
|
+
@code = @code.with_marker(2)
|
152
|
+
@code.should =~ /^ => def self/
|
153
|
+
end
|
154
|
+
|
155
|
+
should 'disable the marker when falsy' do
|
156
|
+
@code = @code.with_marker(2)
|
157
|
+
@code = @code.with_marker(false)
|
158
|
+
@code.should =~ /^ def self/
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe '#with_indentation' do
|
163
|
+
should 'indent the text' do
|
164
|
+
@code = @code.with_indentation(2)
|
165
|
+
@code.should =~ /^ def self/
|
166
|
+
end
|
167
|
+
|
168
|
+
should 'disable the indentation when falsy' do
|
169
|
+
@code = @code.with_indentation(2)
|
170
|
+
@code = @code.with_indentation(false)
|
171
|
+
@code.should =~ /^ def self/
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
describe 'composition' do
|
177
|
+
describe 'grep and with_line_numbers' do
|
178
|
+
should 'work' do
|
179
|
+
@code = @code.grep(/end/).with_line_numbers
|
180
|
+
@code.should =~ /\A4: end/
|
181
|
+
@code.should =~ /5: end\Z/
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
describe 'grep and before and with_line_numbers' do
|
186
|
+
should 'work' do
|
187
|
+
@code = @code.grep(/e/).before(5, 5).with_line_numbers
|
188
|
+
@code.should =~ /\A2: def self.main\n3:/
|
189
|
+
@code.should =~ /4: end\Z/
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
describe 'before and after' do
|
194
|
+
should 'work' do
|
195
|
+
@code = @code.before(4, 2).after(2)
|
196
|
+
@code.should == " puts 'Hello, world!'"
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|