pry 0.9.7.4-i386-mswin32 → 0.9.8-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/.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
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'helper'
|
2
|
+
describe Pry do
|
3
|
+
|
4
|
+
[
|
5
|
+
["p = '", "'"],
|
6
|
+
["def", "a", "(); end"],
|
7
|
+
["p = <<FOO", "lots", "and", "lots of", "foo", "FOO"],
|
8
|
+
["[", ":lets,", "'list',", "[/nested/", "], things ]"],
|
9
|
+
["abc =~ /hello", "/"],
|
10
|
+
["issue = %W/", "343/"],
|
11
|
+
["pouts(<<HI, 'foo", "bar", "HI", "baz')"],
|
12
|
+
].each do |foo|
|
13
|
+
it "should not raise an error on broken lines: #{foo.join("\\n")}" do
|
14
|
+
output = StringIO.new
|
15
|
+
redirect_pry_io(InputTester.new(*foo), output) do
|
16
|
+
Pry.start
|
17
|
+
end
|
18
|
+
|
19
|
+
output.string.should.not =~ /SyntaxError/
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
[
|
24
|
+
["end"],
|
25
|
+
["puts )("],
|
26
|
+
["1 1"],
|
27
|
+
["puts :"],
|
28
|
+
# in this case the syntax error is "expecting ')'".
|
29
|
+
(Pry::Helpers::BaseHelpers.rbx? ? nil : ["def", "method(1"])
|
30
|
+
].compact.each do |foo|
|
31
|
+
it "should raise an error on invalid syntax like #{foo.inspect}" do
|
32
|
+
output = StringIO.new
|
33
|
+
redirect_pry_io(InputTester.new(*foo), output) do
|
34
|
+
Pry.start
|
35
|
+
end
|
36
|
+
output.string.should =~ /SyntaxError/
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should not intefere with syntax errors explicitly raised" do
|
41
|
+
output = StringIO.new
|
42
|
+
redirect_pry_io(InputTester.new(%q{raise SyntaxError, "unexpected $end"}), output) do
|
43
|
+
Pry.start
|
44
|
+
end
|
45
|
+
output.string.should =~ /SyntaxError/
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should allow trailing , to continue the line" do
|
49
|
+
pry = Pry.new
|
50
|
+
|
51
|
+
pry.complete_expression?("puts 1, 2,").should == false
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should complete an expression that contains a line ending with a ," do
|
55
|
+
pry = Pry.new
|
56
|
+
pry.complete_expression?("puts 1, 2,\n3").should == true
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should not clobber _ex_ on a SyntaxError in the repl" do
|
60
|
+
|
61
|
+
mock_pry("raise RuntimeError, 'foo';", "puts foo)", "_ex_.is_a?(RuntimeError)").should =~ /^RuntimeError.*\nSyntaxError.*\n=> true/m
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Pry::WrappedModule do
|
4
|
+
|
5
|
+
describe "#initialize" do
|
6
|
+
it "should raise an exception when a non-module is passed" do
|
7
|
+
lambda{ Pry::WrappedModule.new(nil) }.should.raise ArgumentError
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe ".method_prefix" do
|
12
|
+
before do
|
13
|
+
Foo = Class.new
|
14
|
+
@foo = Foo.new
|
15
|
+
end
|
16
|
+
|
17
|
+
after do
|
18
|
+
Object.remove_const(:Foo)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return Foo# for normal classes" do
|
22
|
+
Pry::WrappedModule.new(Foo).method_prefix.should == "Foo#"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return Bar# for modules" do
|
26
|
+
Pry::WrappedModule.new(Kernel).method_prefix.should == "Kernel#"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return Foo. for singleton classes of classes" do
|
30
|
+
Pry::WrappedModule.new(class << Foo; self; end).method_prefix.should == "Foo."
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "of singleton classes of objects" do
|
34
|
+
Pry::WrappedModule.new(class << @foo; self; end).method_prefix.should == "self."
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "of anonymous classes should not be empty" do
|
38
|
+
Pry::WrappedModule.new(Class.new).method_prefix.should =~ /#<Class:.*>#/
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "of singleton classes of anonymous classes should not be empty" do
|
42
|
+
Pry::WrappedModule.new(class << Class.new; self; end).method_prefix.should =~ /#<Class:.*>./
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe ".singleton_class?" do
|
47
|
+
it "should be true for singleton classes" do
|
48
|
+
Pry::WrappedModule.new(class << ""; self; end).singleton_class?.should == true
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should be false for normal classes" do
|
52
|
+
Pry::WrappedModule.new(Class.new).singleton_class?.should == false
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should be false for modules" do
|
56
|
+
Pry::WrappedModule.new(Module.new).singleton_class?.should == false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe ".singleton_instance" do
|
61
|
+
it "should raise an exception when called on a non-singleton-class" do
|
62
|
+
lambda{ Pry::WrappedModule.new(Class).singleton_instance }.should.raise ArgumentError
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return the attached object" do
|
66
|
+
Pry::WrappedModule.new(class << "hi"; self; end).singleton_instance.should == "hi"
|
67
|
+
Pry::WrappedModule.new(class << Object; self; end).singleton_instance.should.equal?(Object)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.8
|
5
5
|
prerelease:
|
6
6
|
platform: i386-mswin32
|
7
7
|
authors:
|
@@ -9,77 +9,69 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-01-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: ruby_parser
|
16
|
-
requirement: &70358292170640 !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: 2.3.1
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: *70358292170640
|
25
14
|
- !ruby/object:Gem::Dependency
|
26
15
|
name: coderay
|
27
|
-
requirement: &
|
16
|
+
requirement: &70335748746720 !ruby/object:Gem::Requirement
|
28
17
|
none: false
|
29
18
|
requirements:
|
30
19
|
- - ~>
|
31
20
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.
|
21
|
+
version: 1.0.5
|
33
22
|
type: :runtime
|
34
23
|
prerelease: false
|
35
|
-
version_requirements: *
|
24
|
+
version_requirements: *70335748746720
|
36
25
|
- !ruby/object:Gem::Dependency
|
37
26
|
name: slop
|
38
|
-
requirement: &
|
27
|
+
requirement: &70335748746220 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
29
|
requirements:
|
41
|
-
- -
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.4.3
|
33
|
+
- - <
|
42
34
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
35
|
+
version: '3'
|
44
36
|
type: :runtime
|
45
37
|
prerelease: false
|
46
|
-
version_requirements: *
|
38
|
+
version_requirements: *70335748746220
|
47
39
|
- !ruby/object:Gem::Dependency
|
48
40
|
name: method_source
|
49
|
-
requirement: &
|
41
|
+
requirement: &70335748789540 !ruby/object:Gem::Requirement
|
50
42
|
none: false
|
51
43
|
requirements:
|
52
44
|
- - ~>
|
53
45
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
46
|
+
version: '0.7'
|
55
47
|
type: :runtime
|
56
48
|
prerelease: false
|
57
|
-
version_requirements: *
|
49
|
+
version_requirements: *70335748789540
|
58
50
|
- !ruby/object:Gem::Dependency
|
59
51
|
name: bacon
|
60
|
-
requirement: &
|
52
|
+
requirement: &70335748789060 !ruby/object:Gem::Requirement
|
61
53
|
none: false
|
62
54
|
requirements:
|
63
55
|
- - ~>
|
64
56
|
- !ruby/object:Gem::Version
|
65
|
-
version: 1.1
|
57
|
+
version: '1.1'
|
66
58
|
type: :development
|
67
59
|
prerelease: false
|
68
|
-
version_requirements: *
|
60
|
+
version_requirements: *70335748789060
|
69
61
|
- !ruby/object:Gem::Dependency
|
70
62
|
name: open4
|
71
|
-
requirement: &
|
63
|
+
requirement: &70335748788520 !ruby/object:Gem::Requirement
|
72
64
|
none: false
|
73
65
|
requirements:
|
74
66
|
- - ~>
|
75
67
|
- !ruby/object:Gem::Version
|
76
|
-
version: 1.
|
68
|
+
version: '1.3'
|
77
69
|
type: :development
|
78
70
|
prerelease: false
|
79
|
-
version_requirements: *
|
71
|
+
version_requirements: *70335748788520
|
80
72
|
- !ruby/object:Gem::Dependency
|
81
73
|
name: rake
|
82
|
-
requirement: &
|
74
|
+
requirement: &70335748788060 !ruby/object:Gem::Requirement
|
83
75
|
none: false
|
84
76
|
requirements:
|
85
77
|
- - ~>
|
@@ -87,18 +79,18 @@ dependencies:
|
|
87
79
|
version: '0.9'
|
88
80
|
type: :development
|
89
81
|
prerelease: false
|
90
|
-
version_requirements: *
|
82
|
+
version_requirements: *70335748788060
|
91
83
|
- !ruby/object:Gem::Dependency
|
92
84
|
name: win32console
|
93
|
-
requirement: &
|
85
|
+
requirement: &70335748787600 !ruby/object:Gem::Requirement
|
94
86
|
none: false
|
95
87
|
requirements:
|
96
88
|
- - ~>
|
97
89
|
- !ruby/object:Gem::Version
|
98
|
-
version: 1.3
|
90
|
+
version: '1.3'
|
99
91
|
type: :runtime
|
100
92
|
prerelease: false
|
101
|
-
version_requirements: *
|
93
|
+
version_requirements: *70335748787600
|
102
94
|
description: An IRB alternative and runtime developer console
|
103
95
|
email: jrmair@gmail.com
|
104
96
|
executables:
|
@@ -131,8 +123,9 @@ files:
|
|
131
123
|
- examples/example_prompt.rb
|
132
124
|
- examples/helper.rb
|
133
125
|
- lib/pry.rb
|
134
|
-
- lib/pry/
|
135
|
-
- lib/pry/
|
126
|
+
- lib/pry/cli.rb
|
127
|
+
- lib/pry/code.rb
|
128
|
+
- lib/pry/command.rb
|
136
129
|
- lib/pry/command_set.rb
|
137
130
|
- lib/pry/commands.rb
|
138
131
|
- lib/pry/completion.rb
|
@@ -149,7 +142,6 @@ files:
|
|
149
142
|
- lib/pry/default_commands/ls.rb
|
150
143
|
- lib/pry/default_commands/shell.rb
|
151
144
|
- lib/pry/extended_commands/experimental.rb
|
152
|
-
- lib/pry/extended_commands/user_command_api.rb
|
153
145
|
- lib/pry/helpers.rb
|
154
146
|
- lib/pry/helpers/base_helpers.rb
|
155
147
|
- lib/pry/helpers/command_helpers.rb
|
@@ -157,6 +149,7 @@ files:
|
|
157
149
|
- lib/pry/helpers/text.rb
|
158
150
|
- lib/pry/history.rb
|
159
151
|
- lib/pry/history_array.rb
|
152
|
+
- lib/pry/hooks.rb
|
160
153
|
- lib/pry/indent.rb
|
161
154
|
- lib/pry/method.rb
|
162
155
|
- lib/pry/plugins.rb
|
@@ -165,10 +158,17 @@ files:
|
|
165
158
|
- lib/pry/rbx_method.rb
|
166
159
|
- lib/pry/rbx_path.rb
|
167
160
|
- lib/pry/version.rb
|
161
|
+
- lib/pry/wrapped_module.rb
|
162
|
+
- man/pry.1
|
163
|
+
- man/pry.1.html
|
164
|
+
- man/pry.1.ronn
|
168
165
|
- pry.gemspec
|
169
166
|
- test/helper.rb
|
167
|
+
- test/test_cli.rb
|
168
|
+
- test/test_code.rb
|
169
|
+
- test/test_command.rb
|
170
170
|
- test/test_command_helpers.rb
|
171
|
-
- test/
|
171
|
+
- test/test_command_integration.rb
|
172
172
|
- test/test_command_set.rb
|
173
173
|
- test/test_completion.rb
|
174
174
|
- test/test_default_commands.rb
|
@@ -181,13 +181,17 @@ files:
|
|
181
181
|
- test/test_default_commands/test_shell.rb
|
182
182
|
- test/test_exception_whitelist.rb
|
183
183
|
- test/test_history_array.rb
|
184
|
+
- test/test_hooks.rb
|
184
185
|
- test/test_indent.rb
|
185
186
|
- test/test_input_stack.rb
|
186
187
|
- test/test_method.rb
|
187
188
|
- test/test_pry.rb
|
189
|
+
- test/test_pry_defaults.rb
|
188
190
|
- test/test_pry_history.rb
|
189
191
|
- test/test_pry_output.rb
|
190
192
|
- test/test_special_locals.rb
|
193
|
+
- test/test_syntax_checking.rb
|
194
|
+
- test/test_wrapped_module.rb
|
191
195
|
- test/testrc
|
192
196
|
- test/testrcbad
|
193
197
|
- wiki/Customizing-pry.md
|
@@ -218,8 +222,11 @@ specification_version: 3
|
|
218
222
|
summary: An IRB alternative and runtime developer console
|
219
223
|
test_files:
|
220
224
|
- test/helper.rb
|
225
|
+
- test/test_cli.rb
|
226
|
+
- test/test_code.rb
|
227
|
+
- test/test_command.rb
|
221
228
|
- test/test_command_helpers.rb
|
222
|
-
- test/
|
229
|
+
- test/test_command_integration.rb
|
223
230
|
- test/test_command_set.rb
|
224
231
|
- test/test_completion.rb
|
225
232
|
- test/test_default_commands.rb
|
@@ -232,12 +239,16 @@ test_files:
|
|
232
239
|
- test/test_default_commands/test_shell.rb
|
233
240
|
- test/test_exception_whitelist.rb
|
234
241
|
- test/test_history_array.rb
|
242
|
+
- test/test_hooks.rb
|
235
243
|
- test/test_indent.rb
|
236
244
|
- test/test_input_stack.rb
|
237
245
|
- test/test_method.rb
|
238
246
|
- test/test_pry.rb
|
247
|
+
- test/test_pry_defaults.rb
|
239
248
|
- test/test_pry_history.rb
|
240
249
|
- test/test_pry_output.rb
|
241
250
|
- test/test_special_locals.rb
|
251
|
+
- test/test_syntax_checking.rb
|
252
|
+
- test/test_wrapped_module.rb
|
242
253
|
- test/testrc
|
243
254
|
- test/testrcbad
|
data/lib/pry/command_context.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
class Pry
|
2
|
-
# Command contexts are the objects runing each command.
|
3
|
-
# Helper modules can be mixed into this class.
|
4
|
-
class CommandContext
|
5
|
-
|
6
|
-
# represents a void return value for a command
|
7
|
-
VOID_VALUE = Object.new
|
8
|
-
|
9
|
-
# give it a nice inspect
|
10
|
-
def VOID_VALUE.inspect() "void" end
|
11
|
-
|
12
|
-
attr_accessor :command_name
|
13
|
-
attr_accessor :output
|
14
|
-
attr_accessor :target
|
15
|
-
attr_accessor :target_self
|
16
|
-
attr_accessor :captures
|
17
|
-
attr_accessor :eval_string
|
18
|
-
attr_accessor :arg_string
|
19
|
-
attr_accessor :opts
|
20
|
-
attr_accessor :command_set
|
21
|
-
attr_accessor :command_processor
|
22
|
-
attr_accessor :_pry_
|
23
|
-
|
24
|
-
# Run a command from another command.
|
25
|
-
# @param [String] command_string The string that invokes the command
|
26
|
-
# @param [Array] args Further arguments to pass to the command
|
27
|
-
# @example
|
28
|
-
# run "show-input"
|
29
|
-
# @example
|
30
|
-
# run ".ls"
|
31
|
-
# @example
|
32
|
-
# run "amend-line", "5", 'puts "hello world"'
|
33
|
-
def run(command_string, *args)
|
34
|
-
complete_string = "#{command_string} #{args.join(" ")}"
|
35
|
-
command_processor.process_commands(complete_string, eval_string, target)
|
36
|
-
end
|
37
|
-
|
38
|
-
def commands
|
39
|
-
command_set.commands
|
40
|
-
end
|
41
|
-
|
42
|
-
def text
|
43
|
-
Pry::Helpers::Text
|
44
|
-
end
|
45
|
-
|
46
|
-
def void
|
47
|
-
VOID_VALUE
|
48
|
-
end
|
49
|
-
|
50
|
-
include Pry::Helpers::BaseHelpers
|
51
|
-
include Pry::Helpers::CommandHelpers
|
52
|
-
end
|
53
|
-
end
|
@@ -1,181 +0,0 @@
|
|
1
|
-
require 'forwardable'
|
2
|
-
|
3
|
-
class Pry
|
4
|
-
class CommandProcessor
|
5
|
-
|
6
|
-
# Wraps the return result of process_commands, indicates if the
|
7
|
-
# result IS a command and what kind of command (e.g void)
|
8
|
-
class Result
|
9
|
-
attr_reader :retval
|
10
|
-
|
11
|
-
def initialize(is_command, keep_retval = false, retval = nil)
|
12
|
-
@is_command, @keep_retval, @retval = is_command, keep_retval, retval
|
13
|
-
end
|
14
|
-
|
15
|
-
# Is the result a command?
|
16
|
-
# @return [Boolean]
|
17
|
-
def command?
|
18
|
-
@is_command
|
19
|
-
end
|
20
|
-
|
21
|
-
# Is the result a command and if it is, is it a void command?
|
22
|
-
# (one that does not return a value)
|
23
|
-
# @return [Boolean]
|
24
|
-
def void_command?
|
25
|
-
(command? && !keep_retval?) || retval == CommandContext::VOID_VALUE
|
26
|
-
end
|
27
|
-
|
28
|
-
# Is the return value kept for this command? (i.e :keep_retval => true)
|
29
|
-
# @return [Boolean]
|
30
|
-
def keep_retval?
|
31
|
-
@keep_retval
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
extend Forwardable
|
36
|
-
|
37
|
-
attr_accessor :pry_instance
|
38
|
-
|
39
|
-
def initialize(pry_instance)
|
40
|
-
@pry_instance = pry_instance
|
41
|
-
end
|
42
|
-
|
43
|
-
def_delegators :@pry_instance, :commands, :output
|
44
|
-
|
45
|
-
# Is the string a valid command?
|
46
|
-
# @param [String] val The string passed in from the Pry prompt.
|
47
|
-
# @param [Binding] target The context where the string should be
|
48
|
-
# interpolated in.
|
49
|
-
# @return [Boolean] Whether the string is a valid command.
|
50
|
-
def valid_command?(val, target=binding)
|
51
|
-
!!(command_matched(val, target)[0])
|
52
|
-
end
|
53
|
-
|
54
|
-
# Convert the object to a form that can be interpolated into a
|
55
|
-
# Regexp cleanly.
|
56
|
-
# @return [String] The string to interpolate into a Regexp
|
57
|
-
def convert_to_regex(obj)
|
58
|
-
case obj
|
59
|
-
when String
|
60
|
-
Regexp.escape(obj)
|
61
|
-
else
|
62
|
-
obj
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# Revaluate the string (str) and perform interpolation.
|
67
|
-
# @param [String] str The string to reevaluate with interpolation.
|
68
|
-
# @param [Binding] target The context where the string should be
|
69
|
-
# interpolated in.
|
70
|
-
# @return [String] The reevaluated string with interpolations
|
71
|
-
# applied (if any).
|
72
|
-
def interpolate_string(str, target)
|
73
|
-
dumped_str = str.dump
|
74
|
-
dumped_str.gsub!(/\\\#\{/, '#{')
|
75
|
-
target.eval(dumped_str)
|
76
|
-
end
|
77
|
-
|
78
|
-
# Determine whether a Pry command was matched and return command data
|
79
|
-
# and argument string.
|
80
|
-
# This method should not need to be invoked directly.
|
81
|
-
# @param [String] val The line of input.
|
82
|
-
# @param [Binding] target The binding to perform string
|
83
|
-
# interpolation against.
|
84
|
-
# @return [Array] The command data and arg string pair
|
85
|
-
def command_matched(val, target)
|
86
|
-
_, cmd_data = commands.commands.find do |name, data|
|
87
|
-
prefix = convert_to_regex(Pry.config.command_prefix)
|
88
|
-
prefix = "(?:#{prefix})?" unless data.options[:use_prefix]
|
89
|
-
|
90
|
-
command_regex = /^#{prefix}#{convert_to_regex(name)}(?!\S)/
|
91
|
-
|
92
|
-
if command_regex =~ val
|
93
|
-
if data.options[:interpolate]
|
94
|
-
val.replace(interpolate_string(val, target))
|
95
|
-
command_regex =~ val # re-match with the interpolated string
|
96
|
-
end
|
97
|
-
true
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
[cmd_data, (Regexp.last_match ? Regexp.last_match.captures : nil), (Regexp.last_match ? Regexp.last_match.end(0) : nil)]
|
102
|
-
end
|
103
|
-
|
104
|
-
# Process Pry commands. Pry commands are not Ruby methods and are evaluated
|
105
|
-
# prior to Ruby expressions.
|
106
|
-
# Commands can be modified/configured by the user: see `Pry::Commands`
|
107
|
-
# This method should not need to be invoked directly - it is called
|
108
|
-
# by `Pry#r`.
|
109
|
-
# @param [String] val The current line of input.
|
110
|
-
# @param [String] eval_string The cumulative lines of input for
|
111
|
-
# multi-line input.
|
112
|
-
# @param [Binding] target The receiver of the commands.
|
113
|
-
# @return [Pry::CommandProcessor::Result] A wrapper object
|
114
|
-
# containing info about the result of the command processing
|
115
|
-
# (indicating whether it is a command and if it is what kind of
|
116
|
-
# command it is.
|
117
|
-
def process_commands(val, eval_string, target)
|
118
|
-
|
119
|
-
command, captures, pos = command_matched(val, target)
|
120
|
-
|
121
|
-
# no command was matched, so return to caller
|
122
|
-
return Result.new(false) if !command
|
123
|
-
|
124
|
-
arg_string = val[pos..-1]
|
125
|
-
|
126
|
-
# remove the one leading space if it exists
|
127
|
-
arg_string.slice!(0) if arg_string.start_with?(" ")
|
128
|
-
|
129
|
-
if arg_string
|
130
|
-
args = command.options[:shellwords] ? Shellwords.shellwords(arg_string) : arg_string.split(" ")
|
131
|
-
else
|
132
|
-
args = []
|
133
|
-
end
|
134
|
-
|
135
|
-
options = {
|
136
|
-
:val => val,
|
137
|
-
:arg_string => arg_string,
|
138
|
-
:eval_string => eval_string,
|
139
|
-
:commands => commands.commands,
|
140
|
-
:captures => captures
|
141
|
-
}
|
142
|
-
|
143
|
-
ret = execute_command(target, command.name, options, *(captures + args))
|
144
|
-
|
145
|
-
Result.new(true, command.options[:keep_retval], ret)
|
146
|
-
end
|
147
|
-
|
148
|
-
# Execute a Pry command.
|
149
|
-
# This method should not need to be invoked directly.
|
150
|
-
# @param [Binding] target The target of the Pry session.
|
151
|
-
# @param [String] command The name of the command to be run.
|
152
|
-
# @param [Hash] options The options to set on the Commands object.
|
153
|
-
# @param [Array] args The command arguments.
|
154
|
-
# @return [Object] The value returned by the command
|
155
|
-
def execute_command(target, command, options, *args)
|
156
|
-
context = CommandContext.new
|
157
|
-
|
158
|
-
# set some useful methods to be used by the action blocks
|
159
|
-
context.opts = options
|
160
|
-
context.target = target
|
161
|
-
context.target_self = target.eval('self')
|
162
|
-
context.output = output
|
163
|
-
context.captures = options[:captures]
|
164
|
-
context.eval_string = options[:eval_string]
|
165
|
-
context.arg_string = options[:arg_string]
|
166
|
-
context.command_set = commands
|
167
|
-
context._pry_ = @pry_instance
|
168
|
-
|
169
|
-
context.command_processor = self
|
170
|
-
|
171
|
-
ret = nil
|
172
|
-
catch(:command_done) do
|
173
|
-
ret = commands.run_command(context, command, *args)
|
174
|
-
end
|
175
|
-
|
176
|
-
options[:val].replace("")
|
177
|
-
|
178
|
-
ret
|
179
|
-
end
|
180
|
-
end
|
181
|
-
end
|