pry 0.9.12.6 → 0.10.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +702 -0
  3. data/LICENSE +2 -2
  4. data/{README.markdown → README.md} +37 -31
  5. data/lib/pry.rb +38 -151
  6. data/lib/pry/cli.rb +35 -17
  7. data/lib/pry/code.rb +24 -63
  8. data/lib/pry/code/code_file.rb +103 -0
  9. data/lib/pry/code/code_range.rb +2 -1
  10. data/lib/pry/code/loc.rb +2 -2
  11. data/lib/pry/code_object.rb +40 -21
  12. data/lib/pry/color_printer.rb +55 -0
  13. data/lib/pry/command.rb +12 -9
  14. data/lib/pry/command_set.rb +81 -38
  15. data/lib/pry/commands.rb +1 -1
  16. data/lib/pry/commands/amend_line.rb +2 -2
  17. data/lib/pry/commands/bang.rb +1 -1
  18. data/lib/pry/commands/cat.rb +11 -2
  19. data/lib/pry/commands/cat/exception_formatter.rb +5 -6
  20. data/lib/pry/commands/cat/file_formatter.rb +15 -32
  21. data/lib/pry/commands/cd.rb +14 -3
  22. data/lib/pry/commands/change_inspector.rb +27 -0
  23. data/lib/pry/commands/change_prompt.rb +26 -0
  24. data/lib/pry/commands/code_collector.rb +4 -4
  25. data/lib/pry/commands/easter_eggs.rb +3 -3
  26. data/lib/pry/commands/edit.rb +10 -22
  27. data/lib/pry/commands/edit/exception_patcher.rb +2 -2
  28. data/lib/pry/commands/edit/file_and_line_locator.rb +0 -2
  29. data/lib/pry/commands/exit_program.rb +0 -1
  30. data/lib/pry/commands/find_method.rb +16 -22
  31. data/lib/pry/commands/gem_install.rb +5 -2
  32. data/lib/pry/commands/gem_open.rb +1 -1
  33. data/lib/pry/commands/gist.rb +10 -11
  34. data/lib/pry/commands/help.rb +14 -14
  35. data/lib/pry/commands/hist.rb +27 -8
  36. data/lib/pry/commands/install_command.rb +14 -12
  37. data/lib/pry/commands/list_inspectors.rb +35 -0
  38. data/lib/pry/commands/list_prompts.rb +35 -0
  39. data/lib/pry/commands/ls.rb +72 -296
  40. data/lib/pry/commands/ls/constants.rb +47 -0
  41. data/lib/pry/commands/ls/formatter.rb +49 -0
  42. data/lib/pry/commands/ls/globals.rb +48 -0
  43. data/lib/pry/commands/ls/grep.rb +21 -0
  44. data/lib/pry/commands/ls/instance_vars.rb +39 -0
  45. data/lib/pry/commands/ls/interrogatable.rb +18 -0
  46. data/lib/pry/commands/ls/jruby_hacks.rb +49 -0
  47. data/lib/pry/commands/ls/local_names.rb +35 -0
  48. data/lib/pry/commands/ls/local_vars.rb +39 -0
  49. data/lib/pry/commands/ls/ls_entity.rb +70 -0
  50. data/lib/pry/commands/ls/methods.rb +57 -0
  51. data/lib/pry/commands/ls/methods_helper.rb +46 -0
  52. data/lib/pry/commands/ls/self_methods.rb +32 -0
  53. data/lib/pry/commands/play.rb +44 -10
  54. data/lib/pry/commands/pry_backtrace.rb +1 -2
  55. data/lib/pry/commands/raise_up.rb +2 -2
  56. data/lib/pry/commands/reload_code.rb +16 -19
  57. data/lib/pry/commands/ri.rb +7 -3
  58. data/lib/pry/commands/shell_command.rb +18 -13
  59. data/lib/pry/commands/shell_mode.rb +2 -4
  60. data/lib/pry/commands/show_doc.rb +5 -0
  61. data/lib/pry/commands/show_info.rb +8 -13
  62. data/lib/pry/commands/show_source.rb +15 -3
  63. data/lib/pry/commands/simple_prompt.rb +1 -1
  64. data/lib/pry/commands/toggle_color.rb +8 -4
  65. data/lib/pry/commands/watch_expression.rb +105 -0
  66. data/lib/pry/commands/watch_expression/expression.rb +38 -0
  67. data/lib/pry/commands/whereami.rb +18 -10
  68. data/lib/pry/commands/wtf.rb +3 -3
  69. data/lib/pry/config.rb +20 -254
  70. data/lib/pry/config/behavior.rb +139 -0
  71. data/lib/pry/config/convenience.rb +26 -0
  72. data/lib/pry/config/default.rb +165 -0
  73. data/lib/pry/core_extensions.rb +31 -21
  74. data/lib/pry/editor.rb +107 -103
  75. data/lib/pry/exceptions.rb +77 -0
  76. data/lib/pry/helpers/base_helpers.rb +22 -109
  77. data/lib/pry/helpers/command_helpers.rb +10 -8
  78. data/lib/pry/helpers/documentation_helpers.rb +1 -2
  79. data/lib/pry/helpers/text.rb +4 -5
  80. data/lib/pry/history.rb +46 -45
  81. data/lib/pry/history_array.rb +6 -1
  82. data/lib/pry/hooks.rb +9 -29
  83. data/lib/pry/indent.rb +6 -6
  84. data/lib/pry/input_completer.rb +242 -0
  85. data/lib/pry/input_lock.rb +132 -0
  86. data/lib/pry/inspector.rb +27 -0
  87. data/lib/pry/last_exception.rb +61 -0
  88. data/lib/pry/method.rb +82 -87
  89. data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +41 -38
  90. data/lib/pry/module_candidate.rb +4 -14
  91. data/lib/pry/object_path.rb +82 -0
  92. data/lib/pry/output.rb +50 -0
  93. data/lib/pry/pager.rb +191 -47
  94. data/lib/pry/plugins.rb +1 -1
  95. data/lib/pry/prompt.rb +26 -0
  96. data/lib/pry/pry_class.rb +149 -230
  97. data/lib/pry/pry_instance.rb +302 -413
  98. data/lib/pry/rbx_path.rb +1 -1
  99. data/lib/pry/repl.rb +202 -0
  100. data/lib/pry/repl_file_loader.rb +20 -26
  101. data/lib/pry/rubygem.rb +13 -5
  102. data/lib/pry/terminal.rb +2 -1
  103. data/lib/pry/test/helper.rb +26 -41
  104. data/lib/pry/version.rb +1 -1
  105. data/lib/pry/wrapped_module.rb +45 -59
  106. metadata +61 -224
  107. data/.document +0 -2
  108. data/.gitignore +0 -16
  109. data/.travis.yml +0 -25
  110. data/.yardopts +0 -1
  111. data/CHANGELOG +0 -534
  112. data/CONTRIBUTORS +0 -55
  113. data/Gemfile +0 -12
  114. data/Rakefile +0 -140
  115. data/TODO +0 -117
  116. data/lib/pry/completion.rb +0 -321
  117. data/lib/pry/custom_completions.rb +0 -6
  118. data/lib/pry/rbx_method.rb +0 -13
  119. data/man/pry.1 +0 -195
  120. data/man/pry.1.html +0 -204
  121. data/man/pry.1.ronn +0 -141
  122. data/pry.gemspec +0 -29
  123. data/spec/Procfile +0 -3
  124. data/spec/cli_spec.rb +0 -78
  125. data/spec/code_object_spec.rb +0 -277
  126. data/spec/code_spec.rb +0 -219
  127. data/spec/command_helpers_spec.rb +0 -29
  128. data/spec/command_integration_spec.rb +0 -644
  129. data/spec/command_set_spec.rb +0 -627
  130. data/spec/command_spec.rb +0 -821
  131. data/spec/commands/amend_line_spec.rb +0 -247
  132. data/spec/commands/bang_spec.rb +0 -19
  133. data/spec/commands/cat_spec.rb +0 -164
  134. data/spec/commands/cd_spec.rb +0 -250
  135. data/spec/commands/disable_pry_spec.rb +0 -25
  136. data/spec/commands/edit_spec.rb +0 -727
  137. data/spec/commands/exit_all_spec.rb +0 -34
  138. data/spec/commands/exit_program_spec.rb +0 -19
  139. data/spec/commands/exit_spec.rb +0 -34
  140. data/spec/commands/find_method_spec.rb +0 -70
  141. data/spec/commands/gem_list_spec.rb +0 -26
  142. data/spec/commands/gist_spec.rb +0 -79
  143. data/spec/commands/help_spec.rb +0 -56
  144. data/spec/commands/hist_spec.rb +0 -181
  145. data/spec/commands/jump_to_spec.rb +0 -15
  146. data/spec/commands/ls_spec.rb +0 -181
  147. data/spec/commands/play_spec.rb +0 -140
  148. data/spec/commands/raise_up_spec.rb +0 -56
  149. data/spec/commands/save_file_spec.rb +0 -177
  150. data/spec/commands/show_doc_spec.rb +0 -510
  151. data/spec/commands/show_input_spec.rb +0 -17
  152. data/spec/commands/show_source_spec.rb +0 -782
  153. data/spec/commands/whereami_spec.rb +0 -203
  154. data/spec/completion_spec.rb +0 -241
  155. data/spec/control_d_handler_spec.rb +0 -58
  156. data/spec/documentation_helper_spec.rb +0 -73
  157. data/spec/editor_spec.rb +0 -79
  158. data/spec/exception_whitelist_spec.rb +0 -21
  159. data/spec/fixtures/candidate_helper1.rb +0 -11
  160. data/spec/fixtures/candidate_helper2.rb +0 -8
  161. data/spec/fixtures/example.erb +0 -5
  162. data/spec/fixtures/example_nesting.rb +0 -33
  163. data/spec/fixtures/show_source_doc_examples.rb +0 -15
  164. data/spec/fixtures/testrc +0 -2
  165. data/spec/fixtures/testrcbad +0 -2
  166. data/spec/fixtures/whereami_helper.rb +0 -6
  167. data/spec/helper.rb +0 -34
  168. data/spec/helpers/bacon.rb +0 -86
  169. data/spec/helpers/mock_pry.rb +0 -43
  170. data/spec/helpers/table_spec.rb +0 -105
  171. data/spec/history_array_spec.rb +0 -67
  172. data/spec/hooks_spec.rb +0 -522
  173. data/spec/indent_spec.rb +0 -301
  174. data/spec/input_stack_spec.rb +0 -90
  175. data/spec/method_spec.rb +0 -482
  176. data/spec/prompt_spec.rb +0 -60
  177. data/spec/pry_defaults_spec.rb +0 -419
  178. data/spec/pry_history_spec.rb +0 -99
  179. data/spec/pry_output_spec.rb +0 -95
  180. data/spec/pry_spec.rb +0 -515
  181. data/spec/run_command_spec.rb +0 -25
  182. data/spec/sticky_locals_spec.rb +0 -157
  183. data/spec/syntax_checking_spec.rb +0 -81
  184. data/spec/wrapped_module_spec.rb +0 -261
  185. data/wiki/Customizing-pry.md +0 -397
  186. data/wiki/Home.md +0 -4
@@ -1,29 +0,0 @@
1
- require 'helper'
2
-
3
- describe Pry::Helpers::CommandHelpers do
4
- before do
5
- @helper = Pry::Helpers::CommandHelpers
6
- end
7
-
8
- describe "unindent" do
9
- it "should remove the same prefix from all lines" do
10
- @helper.unindent(" one\n two\n").should == "one\ntwo\n"
11
- end
12
-
13
- it "should not be phased by empty lines" do
14
- @helper.unindent(" one\n\n two\n").should == "one\n\ntwo\n"
15
- end
16
-
17
- it "should only remove a common prefix" do
18
- @helper.unindent(" one\n two\n").should == " one\ntwo\n"
19
- end
20
-
21
- it "should also remove tabs if present" do
22
- @helper.unindent("\tone\n\ttwo\n").should == "one\ntwo\n"
23
- end
24
-
25
- it "should ignore lines starting with --" do
26
- @helper.unindent(" one\n--\n two\n").should == "one\n--\ntwo\n"
27
- end
28
- end
29
- end
@@ -1,644 +0,0 @@
1
- require 'helper'
2
-
3
-
4
- describe "commands" do
5
- before do
6
- @str_output = StringIO.new
7
- @o = Object.new
8
-
9
- # Shortcuts. They save a lot of typing.
10
- @bs1 = "Pad.bs1 = _pry_.binding_stack.dup"
11
- @bs2 = "Pad.bs2 = _pry_.binding_stack.dup"
12
- @bs3 = "Pad.bs3 = _pry_.binding_stack.dup"
13
-
14
- @self = "Pad.self = self"
15
-
16
- @command_tester = Pry::CommandSet.new do
17
- command "command1", "command 1 test" do
18
- output.puts "command1"
19
- end
20
-
21
- command "command2", "command 2 test" do |arg|
22
- output.puts arg
23
- end
24
- end
25
-
26
- Pad.bong = "bong"
27
- end
28
-
29
- after do
30
- Pad.clear
31
- end
32
-
33
- describe "alias_command" do
34
- it 'should make an aliasd command behave like its original' do
35
- set = Pry::CommandSet.new do
36
- command "test-command" do
37
- output.puts "testing 1, 2, 3"
38
- end
39
- alias_command "test-alias", "test-command"
40
- end
41
- redirect_pry_io(InputTester.new("test-alias"), out1 = StringIO.new) do
42
- Pry.start self, :commands => set
43
- end
44
-
45
- redirect_pry_io(InputTester.new("test-command"), out2 = StringIO.new) do
46
- Pry.start self, :commands => set
47
- end
48
-
49
- out1.string.should == out2.string
50
- end
51
-
52
- it 'should pass on arguments to original' do
53
- set = Pry::CommandSet.new do
54
- command "test-command" do |*args|
55
- output.puts "testing #{args.join(' ')}"
56
- end
57
- alias_command "test-alias", "test-command"
58
- end
59
-
60
- t = pry_tester(:commands => set)
61
-
62
- t.process_command "test-alias hello baby duck"
63
- t.last_output.should =~ /testing hello baby duck/
64
- end
65
-
66
- it 'should pass option arguments to original' do
67
- set = Pry::CommandSet.new do
68
- import Pry::Commands
69
- alias_command "test-alias", "ls"
70
- end
71
-
72
- obj = Class.new { @x = 10 }
73
- t = pry_tester(obj, :commands => set)
74
-
75
- t.process_command "test-alias -i"
76
- t.last_output.should =~ /@x/
77
- end
78
-
79
- it 'should pass option arguments to original with additional parameters' do
80
- set = Pry::CommandSet.new do
81
- import Pry::Commands
82
- alias_command "test-alias", "ls -M"
83
- end
84
-
85
- obj = Class.new { @x = Class.new { define_method(:plymouth) {} } }
86
- t = pry_tester(obj, :commands => set)
87
- t.process_command "test-alias @x"
88
- t.last_output.should =~ /plymouth/
89
- end
90
-
91
- it 'should be able to alias a regex command' do
92
- set = Pry::CommandSet.new do
93
- command /du.k/ do
94
- output.puts "ducky"
95
- end
96
- alias_command "test-alias", "duck"
97
- end
98
-
99
- t = pry_tester(:commands => set)
100
- t.process_command "test-alias"
101
- t.last_output.should =~ /ducky/
102
- end
103
-
104
- it 'should be able to make the alias a regex' do
105
- set = Pry::CommandSet.new do
106
- command /du.k/ do
107
- output.puts "ducky"
108
- end
109
- alias_command /test-ali.s/, "duck"
110
- end
111
-
112
- redirect_pry_io(InputTester.new("test-alias"), out1 = StringIO.new) do
113
- Pry.start self, :commands => set
114
- end
115
-
116
- out1.string.should =~ /ducky/
117
- end
118
- end
119
-
120
- describe "Pry::Command#run" do
121
- it 'should allow running of commands with following whitespace' do
122
- set = Pry::CommandSet.new do
123
- import Pry::Commands
124
- command "test-run" do
125
- run "cd / "
126
- end
127
- end
128
-
129
- redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6", @bs1, "test-run",
130
- @self, @bs2, "exit-all")) do
131
- Pry.start(@o, :commands => set)
132
- end
133
-
134
- Pad.bs1.size.should == 7
135
- Pad.self.should == @o
136
- Pad.bs2.size.should == 1
137
- end
138
-
139
- it 'should allow running of cd command when contained in a single string' do
140
- set = Pry::CommandSet.new do
141
- import Pry::Commands
142
- command "test-run" do
143
- run "cd /"
144
- end
145
- end
146
- redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6", @bs1, "test-run",
147
- @self, @bs2, "exit-all")) do
148
- Pry.start(@o, :commands => set)
149
- end
150
-
151
- Pad.bs1.size.should == 7
152
- Pad.self.should == @o
153
- Pad.bs2.size.should == 1
154
- end
155
-
156
- it 'should allow running of cd command when split into array' do
157
- set = Pry::CommandSet.new do
158
- import Pry::Commands
159
- command "test-run" do
160
- run "cd", "/"
161
- end
162
- end
163
- redirect_pry_io(InputTester.new("cd 1/2/3/4/5/6", @bs1, "test-run",
164
- @self, @bs2, "exit-all")) do
165
- Pry.start(@o, :commands => set)
166
- end
167
-
168
- Pad.bs1.size.should == 7
169
- Pad.self.should == @o
170
- Pad.bs2.size.should == 1
171
- end
172
-
173
- it 'should run a command from within a command' do
174
- klass = Pry::CommandSet.new do
175
- command "v" do
176
- output.puts "v command"
177
- end
178
-
179
- command "run_v" do
180
- run "v"
181
- end
182
- end
183
-
184
- Pry.new(:input => InputTester.new("run_v"), :output => @str_output, :commands => klass).rep
185
-
186
- @str_output.string.should =~ /v command/
187
- end
188
-
189
- it 'should run a regex command from within a command' do
190
- klass = Pry::CommandSet.new do
191
- command /v(.*)?/ do |arg|
192
- output.puts "v #{arg}"
193
- end
194
-
195
- command "run_v" do
196
- run "vbaby"
197
- end
198
- end
199
-
200
- redirect_pry_io(InputTester.new("run_v"), @str_output) do
201
- Pry.new(:commands => klass).rep
202
- end
203
-
204
- @str_output.string.should =~ /v baby/
205
- end
206
-
207
- it 'should run a command from within a command with arguments' do
208
- klass = Pry::CommandSet.new do
209
- command /v(\w+)/ do |arg1, arg2|
210
- output.puts "v #{arg1} #{arg2}"
211
- end
212
-
213
- command "run_v_explicit_parameter" do
214
- run "vbaby", "param"
215
- end
216
-
217
- command "run_v_embedded_parameter" do
218
- run "vbaby param"
219
- end
220
- end
221
-
222
- ["run_v_explicit_parameter", "run_v_embedded_parameter"].each do |cmd|
223
- redirect_pry_io(InputTester.new(cmd), @str_output) do
224
- Pry.new(:commands => klass).rep
225
- end
226
- @str_output.string.should =~ /v baby param/
227
- end
228
- end
229
- end
230
-
231
- describe "Pry#run_command" do
232
- it 'should run a command in a specified context' do
233
- b = Pry.binding_for('seven')
234
- p = Pry.new(:output => @str_output)
235
- p.run_command("ls -m", "", b)
236
- p.output.string.should =~ /downcase/
237
- end
238
-
239
- it 'should run a command that modifies the passed in eval_string' do
240
- b = Pry.binding_for(7)
241
- p = Pry.new(:output => @str_output)
242
- eval_string = "def hello\npeter pan\n"
243
- p.run_command("amend-line !", eval_string, b)
244
- eval_string.should =~ /def hello/
245
- eval_string.should.not =~ /peter pan/
246
- end
247
-
248
- it 'should run a command in the context of a session' do
249
- pry_tester.tap do |t|
250
- t.eval "@session_ivar = 10", "_pry_.run_command('ls')"
251
- t.last_output.should =~ /@session_ivar/
252
- end
253
- end
254
- end
255
-
256
- it 'should interpolate ruby code into commands' do
257
- set = Pry::CommandSet.new do
258
- command "hello", "", :keep_retval => true do |arg|
259
- arg
260
- end
261
- end
262
-
263
- str_input = StringIO.new('hello #{Pad.bong}')
264
- Pry.new(:input => str_input, :output => @str_output, :commands => set).rep
265
-
266
- @str_output.string.should =~ /bong/
267
- end
268
-
269
- # bug fix for https://github.com/pry/pry/issues/170
270
- it 'should not choke on complex string interpolation when checking if ruby code is a command' do
271
- redirect_pry_io(InputTester.new('/#{Regexp.escape(File.expand_path("."))}/'), @str_output) do
272
- pry
273
- end
274
-
275
- @str_output.string.should.not =~ /SyntaxError/
276
- end
277
-
278
- it 'should NOT interpolate ruby code into commands if :interpolate => false' do
279
- set = Pry::CommandSet.new do
280
- command "hello", "", :keep_retval => true, :interpolate => false do |arg|
281
- arg
282
- end
283
- end
284
-
285
- str_input = StringIO.new('hello #{Pad.bong}')
286
- Pry.new(:input => str_input, :output => @str_output, :commands => set).rep
287
-
288
- @str_output.string.should =~ /Pad\.bong/
289
- end
290
-
291
- it 'should NOT try to interpolate pure ruby code (no commands) ' do
292
- Pry.new(:input => StringIO.new('format \'#{aggy}\''), :output => @str_output).rep
293
- @str_output.string.should.not =~ /NameError/
294
-
295
- @str_output = StringIO.new
296
- Pry.new(:input => StringIO.new('format #{aggy}'), :output => @str_output).rep
297
- @str_output.string.should.not =~ /NameError/
298
-
299
- @str_output = StringIO.new
300
- Pad.interp = "bong"
301
- Pry.new(:input => StringIO.new('format \'#{Pad.interp}\''), :output => @str_output).rep
302
-
303
- @str_output.string.should.not =~ /bong/
304
- end
305
-
306
- it 'should create a command with a space in its name' do
307
- set = Pry::CommandSet.new do
308
- command "hello baby", "" do
309
- output.puts "hello baby command"
310
- end
311
- end
312
-
313
- redirect_pry_io(InputTester.new("hello baby", "exit-all"), @str_output) do
314
- Pry.new(:commands => set).rep
315
- end
316
-
317
- @str_output.string.should =~ /hello baby command/
318
- end
319
-
320
- it 'should create a command with a space in its name and pass an argument' do
321
- set = Pry::CommandSet.new do
322
- command "hello baby", "" do |arg|
323
- output.puts "hello baby command #{arg}"
324
- end
325
- end
326
-
327
- redirect_pry_io(InputTester.new("hello baby john"), @str_output) do
328
- Pry.new(:commands => set).rep
329
- end
330
-
331
- @str_output.string.should =~ /hello baby command john/
332
- end
333
-
334
- it 'should create a regex command and be able to invoke it' do
335
- set = Pry::CommandSet.new do
336
- command /hello(.)/, "" do
337
- c = captures.first
338
- output.puts "hello#{c}"
339
- end
340
- end
341
-
342
- redirect_pry_io(InputTester.new("hello1"), @str_output) do
343
- Pry.new(:commands => set).rep
344
- end
345
-
346
- @str_output.string.should =~ /hello1/
347
- end
348
-
349
- it 'should create a regex command and pass captures into the args list before regular arguments' do
350
- set = Pry::CommandSet.new do
351
- command /hello(.)/, "" do |c1, a1|
352
- output.puts "hello #{c1} #{a1}"
353
- end
354
- end
355
-
356
- redirect_pry_io(InputTester.new("hello1 baby"), @str_output) do
357
- Pry.new(:commands => set).rep
358
- end
359
-
360
- @str_output.string.should =~ /hello 1 baby/
361
- end
362
-
363
- it 'should create a regex command and interpolate the captures' do
364
- set = Pry::CommandSet.new do
365
- command /hello (.*)/, "" do |c1|
366
- output.puts "hello #{c1}"
367
- end
368
- end
369
-
370
- redirect_pry_io(InputTester.new('hello #{Pad.bong}'), @str_output) do
371
- Pry.new(:commands => set).rep
372
- end
373
-
374
- @str_output.string.should =~ /hello bong/
375
- end
376
-
377
- it 'should create a regex command and arg_string should be interpolated' do
378
- set = Pry::CommandSet.new do
379
- command /hello(\w+)/, "" do |c1, a1, a2, a3|
380
- output.puts "hello #{c1} #{a1} #{a2} #{a3}"
381
- end
382
- end
383
-
384
- Pad.bing = "bing"
385
- Pad.bang = "bang"
386
- redirect_pry_io(InputTester.new('hellojohn #{Pad.bing} #{Pad.bong} #{Pad.bang}'),
387
- @str_output) do
388
- Pry.new(:commands => set).rep
389
- end
390
-
391
- @str_output.string.should =~ /hello john bing bong bang/
392
- end
393
-
394
- it 'if a regex capture is missing it should be nil' do
395
- set = Pry::CommandSet.new do
396
- command /hello(.)?/, "" do |c1, a1|
397
- output.puts "hello #{c1.inspect} #{a1}"
398
- end
399
- end
400
-
401
- redirect_pry_io(InputTester.new("hello baby"), @str_output) do
402
- Pry.new(:commands => set).rep
403
- end
404
-
405
- @str_output.string.should =~ /hello nil baby/
406
- end
407
-
408
- it 'should create a command in a nested context and that command should be accessible from the parent' do
409
- x = "@x=nil\ncd 7\n_pry_.commands.instance_eval {\ncommand('bing') { |arg| run arg }\n}\ncd ..\nbing ls\nexit-all"
410
- redirect_pry_io(StringIO.new("@x=nil\ncd 7\n_pry_.commands.instance_eval {\ncommand('bing') { |arg| run arg }\n}\ncd ..\nbing ls\nexit-all"), @str_output) do
411
- Pry.new.repl('0')
412
- end
413
-
414
- @str_output.string.should =~ /@x/
415
- end
416
-
417
- it 'should define a command that keeps its return value' do
418
- klass = Pry::CommandSet.new do
419
- command "hello", "", :keep_retval => true do
420
- :kept_hello
421
- end
422
- end
423
-
424
- Pry.new(:input => StringIO.new("hello\n"), :output => @str_output, :commands => klass).rep
425
- @str_output.string.should =~ /:kept_hello/
426
- @str_output.string.should =~ /=>/
427
- end
428
-
429
- it 'should define a command that does NOT keep its return value' do
430
- klass = Pry::CommandSet.new do
431
- command "hello", "", :keep_retval => false do
432
- :kept_hello
433
- end
434
- end
435
-
436
- Pry.new(:input => StringIO.new("hello\n"), :output => @str_output, :commands => klass).rep
437
- (@str_output.string =~ /:kept_hello/).should == nil
438
- @str_output.string !~ /=>/
439
- end
440
-
441
- it 'should define a command that keeps its return value even when nil' do
442
- klass = Pry::CommandSet.new do
443
- command "hello", "", :keep_retval => true do
444
- nil
445
- end
446
- end
447
-
448
- Pry.new(:input => StringIO.new("hello\n"), :output => @str_output, :commands => klass).rep
449
-
450
- @str_output.string.should =~ /nil/
451
- @str_output.string.should =~ /=>/
452
- end
453
-
454
- it 'should define a command that keeps its return value but does not return when value is void' do
455
- klass = Pry::CommandSet.new do
456
- command "hello", "", :keep_retval => true do
457
- void
458
- end
459
- end
460
-
461
- Pry.new(:input => StringIO.new("hello\n"), :output => @str_output, :commands => klass).rep
462
- @str_output.string.empty?.should == true
463
- end
464
-
465
- it 'a command (with :keep_retval => false) that replaces eval_string with a valid expression should not have the expression value suppressed' do
466
- klass = Pry::CommandSet.new do
467
- command "hello", "" do
468
- eval_string.replace("6")
469
- end
470
- end
471
-
472
- Pry.new(:input => StringIO.new("def yo\nhello\n"), :output => @str_output, :commands => klass).rep
473
- @str_output.string.should =~ /6/
474
- end
475
-
476
- it 'a command (with :keep_retval => true) that replaces eval_string with a valid expression should overwrite the eval_string with the return value' do
477
- klass = Pry::CommandSet.new do
478
- command "hello", "", :keep_retval => true do
479
- eval_string.replace("6")
480
- 7
481
- end
482
- end
483
-
484
- Pry.new(:input => StringIO.new("def yo\nhello\n"), :output => @str_output, :commands => klass).rep
485
-
486
- @str_output.string.should =~ /7/
487
- @str_output.string.should.not =~ /6/
488
- end
489
-
490
- it 'a command that return a value in a multi-line expression should clear the expression and return the value' do
491
- klass = Pry::CommandSet.new do
492
- command "hello", "", :keep_retval => true do
493
- 5
494
- end
495
- end
496
-
497
- Pry.new(:input => StringIO.new("def yo\nhello\n"), :output => @str_output, :commands => klass).rep
498
-
499
- @str_output.string.should =~ /5/
500
- end
501
-
502
- it 'should set the commands default, and the default should be overridable' do
503
- klass = Pry::CommandSet.new do
504
- command "hello" do
505
- output.puts "hello world"
506
- end
507
- end
508
-
509
- Pry.commands = klass
510
-
511
- Pry.new(:input => InputTester.new("hello"), :output => @str_output).rep
512
- @str_output.string.should =~ /hello world/
513
-
514
- other_klass = Pry::CommandSet.new do
515
- command "goodbye", "" do
516
- output.puts "goodbye world"
517
- end
518
- end
519
-
520
- @str_output = StringIO.new
521
-
522
- Pry.new(:input => InputTester.new("goodbye"), :output => @str_output, :commands => other_klass).rep
523
- @str_output.string.should =~ /goodbye world/
524
- end
525
-
526
- it 'should inherit commands from Pry::Commands' do
527
- klass = Pry::CommandSet.new Pry::Commands do
528
- command "v" do
529
- end
530
- end
531
-
532
- klass.commands.include?("nesting").should == true
533
- klass.commands.include?("jump-to").should == true
534
- klass.commands.include?("cd").should == true
535
- klass.commands.include?("v").should == true
536
- end
537
-
538
- it 'should change description of a command using desc' do
539
- klass = Pry::CommandSet.new do
540
- import Pry::Commands
541
- end
542
- orig = klass.commands["help"].description
543
- klass.instance_eval do
544
- desc "help", "blah"
545
- end
546
- klass.commands["help"].description.should.not == orig
547
- klass.commands["help"].description.should == "blah"
548
- end
549
-
550
- it 'should enable an inherited method to access opts and output and target, due to instance_exec' do
551
- klass = Pry::CommandSet.new do
552
- command "v" do
553
- output.puts "#{target.eval('self')}"
554
- end
555
- end
556
-
557
- child_klass = Pry::CommandSet.new klass do
558
- end
559
-
560
- Pry.new(:print => proc {}, :input => InputTester.new("v"),
561
- :output => @str_output, :commands => child_klass).rep("john")
562
-
563
- @str_output.string.rstrip.should == "john"
564
- end
565
-
566
- it 'should import commands from another command object' do
567
- klass = Pry::CommandSet.new do
568
- import_from Pry::Commands, "ls", "jump-to"
569
- end
570
-
571
- klass.commands.include?("ls").should == true
572
- klass.commands.include?("jump-to").should == true
573
- end
574
-
575
- it 'should delete some inherited commands when using delete method' do
576
- klass = Pry::CommandSet.new Pry::Commands do
577
- command "v" do
578
- end
579
-
580
- delete "show-doc", "show-method"
581
- delete "ls"
582
- end
583
-
584
- klass.commands.include?("nesting").should == true
585
- klass.commands.include?("jump-to").should == true
586
- klass.commands.include?("cd").should == true
587
- klass.commands.include?("v").should == true
588
- klass.commands.include?("show-doc").should == false
589
- klass.commands.include?("show-method").should == false
590
- klass.commands.include?("ls").should == false
591
- end
592
-
593
- it 'should override some inherited commands' do
594
- klass = Pry::CommandSet.new Pry::Commands do
595
- command "jump-to" do
596
- output.puts "jump-to the music"
597
- end
598
-
599
- command "help" do
600
- output.puts "help to the music"
601
- end
602
- end
603
-
604
- # suppress evaluation output
605
- Pry.print = proc {}
606
-
607
- Pry.new(:input => InputTester.new("jump-to"), :output => @str_output, :commands => klass).rep
608
- @str_output.string.rstrip.should == "jump-to the music"
609
-
610
- @str_output = StringIO.new
611
- Pry.new(:input => InputTester.new("help"), :output => @str_output, :commands => klass).rep
612
- @str_output.string.should == "help to the music\n"
613
-
614
-
615
- Pry.reset_defaults
616
- Pry.color = false
617
- end
618
-
619
- it 'should run a command with no parameter' do
620
- pry_tester = Pry.new
621
- pry_tester.commands = @command_tester
622
- pry_tester.input = InputTester.new("command1", "exit-all")
623
- pry_tester.commands = @command_tester
624
-
625
- pry_tester.output = @str_output
626
-
627
- pry_tester.rep
628
-
629
- @str_output.string.should =~ /command1/
630
- end
631
-
632
- it 'should run a command with one parameter' do
633
- pry_tester = Pry.new
634
- pry_tester.commands = @command_tester
635
- pry_tester.input = InputTester.new("command2 horsey", "exit-all")
636
- pry_tester.commands = @command_tester
637
-
638
- pry_tester.output = @str_output
639
-
640
- pry_tester.rep
641
-
642
- @str_output.string.should =~ /horsey/
643
- end
644
- end