pry 0.8.4pre1-i386-mingw32 → 0.9.0-i386-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG +25 -6
  3. data/README.markdown +11 -4
  4. data/Rakefile +15 -19
  5. data/TODO +28 -2
  6. data/bin/pry +28 -11
  7. data/examples/example_basic.rb +2 -4
  8. data/examples/example_command_override.rb +2 -5
  9. data/examples/example_commands.rb +1 -4
  10. data/examples/example_hooks.rb +2 -5
  11. data/examples/example_image_edit.rb +4 -8
  12. data/examples/example_input.rb +1 -4
  13. data/examples/example_input2.rb +1 -4
  14. data/examples/example_output.rb +1 -4
  15. data/examples/example_print.rb +2 -5
  16. data/examples/example_prompt.rb +2 -5
  17. data/examples/helper.rb +6 -0
  18. data/lib/pry.rb +59 -3
  19. data/lib/pry/command_context.rb +10 -9
  20. data/lib/pry/command_processor.rb +51 -73
  21. data/lib/pry/command_set.rb +79 -28
  22. data/lib/pry/commands.rb +9 -123
  23. data/lib/pry/completion.rb +30 -29
  24. data/lib/pry/config.rb +100 -0
  25. data/lib/pry/default_commands/basic.rb +37 -0
  26. data/lib/pry/default_commands/context.rb +16 -15
  27. data/lib/pry/default_commands/documentation.rb +73 -54
  28. data/lib/pry/default_commands/easter_eggs.rb +1 -20
  29. data/lib/pry/default_commands/gems.rb +31 -40
  30. data/lib/pry/default_commands/input.rb +223 -15
  31. data/lib/pry/default_commands/introspection.rb +108 -73
  32. data/lib/pry/default_commands/ls.rb +25 -11
  33. data/lib/pry/default_commands/shell.rb +29 -39
  34. data/lib/pry/extended_commands/experimental.rb +17 -0
  35. data/lib/pry/extended_commands/user_command_api.rb +22 -0
  36. data/lib/pry/helpers.rb +1 -0
  37. data/lib/pry/helpers/base_helpers.rb +15 -104
  38. data/lib/pry/helpers/command_helpers.rb +96 -59
  39. data/lib/pry/helpers/text.rb +83 -0
  40. data/lib/pry/history_array.rb +105 -0
  41. data/lib/pry/plugins.rb +79 -0
  42. data/lib/pry/pry_class.rb +102 -114
  43. data/lib/pry/pry_instance.rb +123 -55
  44. data/lib/pry/version.rb +1 -1
  45. data/pry.gemspec +45 -0
  46. data/test/helper.rb +57 -7
  47. data/test/test_command_processor.rb +205 -0
  48. data/test/{test_commandset.rb → test_command_set.rb} +18 -12
  49. data/test/test_default_commands.rb +59 -0
  50. data/test/test_default_commands/test_context.rb +64 -0
  51. data/test/test_default_commands/test_documentation.rb +31 -0
  52. data/test/test_default_commands/test_gems.rb +14 -0
  53. data/test/test_default_commands/test_input.rb +327 -0
  54. data/test/test_default_commands/test_introspection.rb +155 -0
  55. data/test/test_history_array.rb +65 -0
  56. data/test/test_pry.rb +548 -313
  57. metadata +48 -15
  58. data/lib/pry/hooks.rb +0 -17
  59. data/lib/pry/print.rb +0 -16
  60. data/lib/pry/prompts.rb +0 -31
@@ -0,0 +1,65 @@
1
+ require 'helper'
2
+
3
+ describe Pry::HistoryArray do
4
+ before do
5
+ @array = Pry::HistoryArray.new 10
6
+ end
7
+
8
+ it 'should have a maximum size specifed at creation time' do
9
+ @array.max_size.should == 10
10
+ end
11
+
12
+ it 'should be able to be added objects to' do
13
+ @array << 1 << 2 << 3
14
+ @array.size.should == 3
15
+ @array.to_a.should == [1, 2, 3]
16
+ end
17
+
18
+ it 'should be able to access single elements' do
19
+ @array << 1 << 2 << 3
20
+ @array[2].should == 3
21
+ end
22
+
23
+ it 'should be able to access negative indices' do
24
+ @array << 1 << 2 << 3
25
+ @array[-1].should == 3
26
+ end
27
+
28
+ it 'should be able to access ranges' do
29
+ @array << 1 << 2 << 3 << 4
30
+ @array[1..2].should == [2, 3]
31
+ end
32
+
33
+ it 'should be able to access ranges starting from a negative index' do
34
+ @array << 1 << 2 << 3 << 4
35
+ @array[-2..3].should == [3, 4]
36
+ end
37
+
38
+ it 'should be able to access ranges ending at a negative index' do
39
+ @array << 1 << 2 << 3 << 4
40
+ @array[2..-1].should == [3, 4]
41
+ end
42
+
43
+ it 'should be able to access ranges using only negative indices' do
44
+ @array << 1 << 2 << 3 << 4
45
+ @array[-2..-1].should == [3, 4]
46
+ end
47
+
48
+ it 'should be able to use range where end is excluded' do
49
+ @array << 1 << 2 << 3 << 4
50
+ @array[-2...-1].should == [3]
51
+ end
52
+
53
+ it 'should be able to access slices using a size' do
54
+ @array << 1 << 2 << 3 << 4
55
+ @array[-3, 2].should == [2, 3]
56
+ end
57
+
58
+ it 'should remove older entries' do
59
+ 11.times { |n| @array << n }
60
+
61
+ @array[0].should == nil
62
+ @array[1].should == 1
63
+ @array[10].should == 10
64
+ end
65
+ end
@@ -6,6 +6,15 @@ puts "With method_source version #{MethodSource::VERSION}"
6
6
  puts "--"
7
7
 
8
8
  describe Pry do
9
+
10
+ describe 'warning emissions' do
11
+ it 'should emit no warnings' do
12
+ Open4.popen4 'ruby -I lib -rubygems -r"pry" -W -e "exit"' do |pid, stdin, stdout, stderr|
13
+ stderr.read.empty?.should == true
14
+ end
15
+ end
16
+ end
17
+
9
18
  describe "open a Pry session on an object" do
10
19
  describe "rep" do
11
20
  before do
@@ -31,6 +40,17 @@ describe Pry do
31
40
  @excep.is_a?(NameError).should == true
32
41
  end
33
42
 
43
+ if defined?(BasicObject)
44
+ it 'should be able to operate inside the BasicObject class' do
45
+ $obj = nil
46
+ redirect_pry_io(InputTester.new(":foo", "$obj = _", "exit-all"), StringIO.new) do
47
+ BasicObject.pry
48
+ end
49
+ $obj.should == :foo
50
+ $obj = nil
51
+ end
52
+ end
53
+
34
54
  it 'should set an ivar on an object' do
35
55
  input_string = "@x = 10"
36
56
  input = InputTester.new(input_string)
@@ -134,14 +154,80 @@ describe Pry do
134
154
  end
135
155
  end
136
156
 
157
+ describe "history arrays" do
158
+ it 'sets _ to the last result' do
159
+ res = []
160
+ input = InputTester.new *[":foo", "self << _", "42", "self << _"]
161
+ pry = Pry.new(:input => input, :output => Pry::NullOutput)
162
+ pry.repl(res)
163
+
164
+ res.should == [:foo, 42]
165
+ end
166
+
167
+ it 'sets out to an array with the result' do
168
+ res = {}
169
+ input = InputTester.new *[":foo", "42", "self[:res] = out"]
170
+ pry = Pry.new(:input => input, :output => Pry::NullOutput)
171
+ pry.repl(res)
172
+
173
+ res[:res].should.be.kind_of Pry::HistoryArray
174
+ res[:res][1..2].should == [:foo, 42]
175
+ end
176
+
177
+ it 'sets inp to an array with the entered lines' do
178
+ res = {}
179
+ input = InputTester.new *[":foo", "42", "self[:res] = inp"]
180
+ pry = Pry.new(:input => input, :output => Pry::NullOutput)
181
+ pry.repl(res)
182
+
183
+ res[:res].should.be.kind_of Pry::HistoryArray
184
+ res[:res][1..2].should == [":foo\n", "42\n"]
185
+ end
186
+
187
+ it 'uses 100 as the size of inp and out' do
188
+ res = []
189
+ input = InputTester.new *["self << out.max_size << inp.max_size"]
190
+ pry = Pry.new(:input => input, :output => Pry::NullOutput)
191
+ pry.repl(res)
192
+
193
+ res.should == [100, 100]
194
+ end
195
+
196
+ it 'can change the size of the history arrays' do
197
+ res = []
198
+ input = InputTester.new *["self << out.max_size << inp.max_size"]
199
+ pry = Pry.new(:input => input, :output => Pry::NullOutput,
200
+ :memory_size => 1000)
201
+ pry.repl(res)
202
+
203
+ res.should == [1000, 1000]
204
+ end
205
+
206
+ it 'store exceptions' do
207
+ res = []
208
+ input = InputTester.new *["foo!","self << inp[-1] << out[-1]"]
209
+ pry = Pry.new(:input => input, :output => Pry::NullOutput,
210
+ :memory_size => 1000)
211
+ pry.repl(res)
212
+
213
+ res.first.should == "foo!\n"
214
+ res.last.should.be.kind_of NoMethodError
215
+ end
216
+ end
217
+
137
218
  describe "test loading rc files" do
219
+
220
+ before do
221
+ Pry.instance_variable_set(:@initial_session, true)
222
+ end
223
+
138
224
  after do
139
225
  Pry::RC_FILES.clear
140
- Pry.should_load_rc = false
226
+ Pry.config.should_load_rc = false
141
227
  end
142
228
 
143
229
  it "should run the rc file only once" do
144
- Pry.should_load_rc = true
230
+ Pry.config.should_load_rc = true
145
231
  Pry::RC_FILES << File.expand_path("../testrc", __FILE__)
146
232
 
147
233
  Pry.start(self, :input => StringIO.new("exit\n"), :output => Pry::NullOutput)
@@ -153,17 +239,17 @@ describe Pry do
153
239
  Object.remove_const(:TEST_RC)
154
240
  end
155
241
 
156
- it "should not run the rc file at all if Pry.should_load_rc is false" do
157
- Pry.should_load_rc = false
242
+ it "should not run the rc file at all if Pry.config.should_load_rc is false" do
243
+ Pry.config.should_load_rc = false
158
244
  Pry.start(self, :input => StringIO.new("exit\n"), :output => Pry::NullOutput)
159
245
  Object.const_defined?(:TEST_RC).should == false
160
246
  end
161
247
 
162
248
  it "should not load the rc file if #repl method invoked" do
163
- Pry.should_load_rc = true
249
+ Pry.config.should_load_rc = true
164
250
  Pry.new(:input => StringIO.new("exit\n"), :output => Pry::NullOutput).repl(self)
165
251
  Object.const_defined?(:TEST_RC).should == false
166
- Pry.should_load_rc = false
252
+ Pry.config.should_load_rc = false
167
253
  end
168
254
  end
169
255
 
@@ -219,10 +305,8 @@ describe Pry do
219
305
  val.class.instance_methods(false).map(&:to_sym).include?(:hello).should == true
220
306
  end
221
307
  end
222
-
223
308
  end
224
309
 
225
-
226
310
  describe "commands" do
227
311
  it 'should run a command with no parameter' do
228
312
  pry_tester = Pry.new
@@ -386,70 +470,180 @@ describe Pry do
386
470
  str_output2.string.should =~ /7/
387
471
  end
388
472
 
389
- # describe "Pry.run_command" do
390
- # before do
391
- # class RCTest
392
- # def a() end
393
- # B = 20
394
- # @x = 10
395
- # end
396
- # end
397
-
398
- # after do
399
- # Object.remove_const(:RCTest)
400
- # end
401
-
402
- # it "should execute command in the appropriate object context" do
403
- # result = Pry.run_command "ls", :context => RCTest
404
- # result.map(&:to_sym).should == [:@x]
405
- # end
406
-
407
- # it "should execute command with parameters in the appropriate object context" do
408
- # result = Pry.run_command "ls -M", :context => RCTest
409
- # result.map(&:to_sym).should == [:a]
410
- # end
411
-
412
- # it "should execute command and show output with :show_output => true flag" do
413
- # str = StringIO.new
414
- # Pry.output = str
415
- # result = Pry.run_command "ls -afv", :context => RCTest, :show_output => true
416
- # str.string.should =~ /global variables/
417
- # Pry.output = $stdout
418
- # end
419
-
420
- # it "should execute command with multiple parameters" do
421
- # result = Pry.run_command "ls -c -M RCTest"
422
- # result.map(&:to_sym).should == [:a, :B]
423
- # end
424
- # end
425
-
426
473
  describe "commands" do
427
474
  it 'should interpolate ruby code into commands' do
428
- klass = Pry::CommandSet.new :test do
475
+ klass = Pry::CommandSet.new do
429
476
  command "hello", "", :keep_retval => true do |arg|
430
477
  arg
431
478
  end
432
479
  end
433
480
 
434
- @test_interpolation = "bing"
481
+ $test_interpolation = "bing"
435
482
  str_output = StringIO.new
436
- Pry.new(:input => StringIO.new("hello #{@test_interpolation}"), :output => str_output, :commands => klass).rep
483
+ Pry.new(:input => StringIO.new('hello #{$test_interpolation}'), :output => str_output, :commands => klass).rep
437
484
  str_output.string.should =~ /bing/
438
- @test_interpolation = nil
485
+ $test_interpolation = nil
486
+ end
487
+
488
+ it 'should NOT interpolate ruby code into commands if :interpolate => false' do
489
+ klass = Pry::CommandSet.new do
490
+ command "hello", "", :keep_retval => true, :interpolate => false do |arg|
491
+ arg
492
+ end
493
+ end
494
+
495
+ $test_interpolation = "bing"
496
+ str_output = StringIO.new
497
+ Pry.new(:input => StringIO.new('hello #{$test_interpolation}'), :output => str_output, :commands => klass).rep
498
+ str_output.string.should =~ /test_interpolation/
499
+ $test_interpolation = nil
500
+ end
501
+
502
+ it 'should NOT try to interpolate pure ruby code (no commands) ' do
503
+ str_output = StringIO.new
504
+ Pry.new(:input => StringIO.new('puts \'#{aggy}\''), :output => str_output).rep
505
+ str_output.string.should.not =~ /NameError/
506
+
507
+ Pry.new(:input => StringIO.new('puts #{aggy}'), :output => str_output).rep
508
+ str_output.string.should.not =~ /NameError/
509
+
510
+ $test_interpolation = "blah"
511
+ Pry.new(:input => StringIO.new('puts \'#{$test_interpolation}\''), :output => str_output).rep
512
+
513
+ str_output.string.should.not =~ /blah/
514
+ $test_interpolation = nil
515
+ end
516
+
517
+ it 'should create a command with a space in its name' do
518
+ set = Pry::CommandSet.new do
519
+ command "hello baby", "" do
520
+ output.puts "hello baby command"
521
+ end
522
+ end
523
+
524
+ str_output = StringIO.new
525
+ redirect_pry_io(InputTester.new("hello baby", "exit-all"), str_output) do
526
+ Pry.new(:commands => set).rep
527
+ end
528
+
529
+ str_output.string.should =~ /hello baby command/
530
+ end
531
+
532
+ it 'should create a command with a space in its name and pass an argument' do
533
+ set = Pry::CommandSet.new do
534
+ command "hello baby", "" do |arg|
535
+ output.puts "hello baby command #{arg}"
536
+ end
537
+ end
538
+
539
+ str_output = StringIO.new
540
+ redirect_pry_io(InputTester.new("hello baby john"), str_output) do
541
+ Pry.new(:commands => set).rep
542
+ end
543
+
544
+ str_output.string.should =~ /hello baby command john/
545
+ end
546
+
547
+ it 'should create a regex command and be able to invoke it' do
548
+ set = Pry::CommandSet.new do
549
+ command /hello(.)/, "" do
550
+ c = captures.first
551
+ output.puts "hello#{c}"
552
+ end
553
+ end
554
+
555
+ str_output = StringIO.new
556
+ redirect_pry_io(InputTester.new("hello1"), str_output) do
557
+ Pry.new(:commands => set).rep
558
+ end
559
+
560
+ str_output.string.should =~ /hello1/
561
+ end
562
+
563
+ it 'should create a regex command and pass captures into the args list before regular arguments' do
564
+ set = Pry::CommandSet.new do
565
+ command /hello(.)/, "" do |c1, a1|
566
+ output.puts "hello #{c1} #{a1}"
567
+ end
568
+ end
569
+
570
+ str_output = StringIO.new
571
+ redirect_pry_io(InputTester.new("hello1 baby"), str_output) do
572
+ Pry.new(:commands => set).rep
573
+ end
574
+
575
+ str_output.string.should =~ /hello 1 baby/
439
576
  end
440
577
 
441
- it 'should create a comand in a nested context and that command should be accessible from the parent' do
442
- str_input = StringIO.new("@x=nil\ncd 7\n_pry_.commands.instance_eval {\ncommand('bing') { |arg| run arg }\n}\ncd ..\nbing ls\nexit")
578
+ it 'should create a regex command and interpolate the captures' do
579
+ set = Pry::CommandSet.new do
580
+ command /hello (.*)/, "" do |c1|
581
+ output.puts "hello #{c1}"
582
+ end
583
+ end
584
+
585
+ str_output = StringIO.new
586
+ $obj = "bing"
587
+ redirect_pry_io(InputTester.new('hello #{$obj}'), str_output) do
588
+ Pry.new(:commands => set).rep
589
+ end
590
+
591
+ str_output.string.should =~ /hello bing/
592
+ $obj = nil
593
+ end
594
+
595
+ it 'should create a regex command and arg_string should be interpolated' do
596
+ set = Pry::CommandSet.new do
597
+ command /hello(\w+)/, "" do |c1, a1, a2, a3|
598
+ output.puts "hello #{c1} #{a1} #{a2} #{a3}"
599
+ end
600
+ end
601
+
602
+ str_output = StringIO.new
603
+ $a1 = "bing"
604
+ $a2 = "bong"
605
+ $a3 = "bang"
606
+ redirect_pry_io(InputTester.new('hellojohn #{$a1} #{$a2} #{$a3}'), str_output) do
607
+ Pry.new(:commands => set).rep
608
+ end
609
+
610
+ str_output.string.should =~ /hello john bing bong bang/
611
+
612
+ $a1 = nil
613
+ $a2 = nil
614
+ $a3 = nil
615
+ end
616
+
617
+
618
+ it 'if a regex capture is missing it should be nil' do
619
+ set = Pry::CommandSet.new do
620
+ command /hello(.)?/, "" do |c1, a1|
621
+ output.puts "hello #{c1.inspect} #{a1}"
622
+ end
623
+ end
624
+
443
625
  str_output = StringIO.new
444
- Pry.input = str_input
445
- obj = Object.new
446
- Pry.new(:output => str_output).repl(obj)
447
- Pry.input = Readline
448
- str_output.string.should =~ /@x/
626
+ redirect_pry_io(InputTester.new("hello baby"), str_output) do
627
+ Pry.new(:commands => set).rep
628
+ end
629
+
630
+ str_output.string.should =~ /hello nil baby/
631
+ end
632
+
633
+ it 'should create a command in a nested context and that command should be accessible from the parent' do
634
+ redirect_pry_io(StringIO.new, StringIO.new) do
635
+ str_input = StringIO.new("@x=nil\ncd 7\n_pry_.commands.instance_eval {\ncommand('bing') { |arg| run arg }\n}\ncd ..\nbing ls\nexit")
636
+ str_output = StringIO.new
637
+ Pry.input = str_input
638
+ obj = Object.new
639
+ Pry.new(:output => str_output).repl(obj)
640
+ Pry.input = Readline
641
+ str_output.string.should =~ /@x/
642
+ end
449
643
  end
450
644
 
451
645
  it 'should define a command that keeps its return value' do
452
- klass = Pry::CommandSet.new :test do
646
+ klass = Pry::CommandSet.new do
453
647
  command "hello", "", :keep_retval => true do
454
648
  :kept_hello
455
649
  end
@@ -461,7 +655,7 @@ describe Pry do
461
655
  end
462
656
 
463
657
  it 'should define a command that does NOT keep its return value' do
464
- klass = Pry::CommandSet.new :test do
658
+ klass = Pry::CommandSet.new do
465
659
  command "hello", "", :keep_retval => false do
466
660
  :kept_hello
467
661
  end
@@ -469,11 +663,11 @@ describe Pry do
469
663
  str_output = StringIO.new
470
664
  Pry.new(:input => StringIO.new("hello\n"), :output => str_output, :commands => klass).rep
471
665
  (str_output.string =~ /:kept_hello/).should == nil
472
- str_output.string !~ /=>/
666
+ str_output.string !~ /=>/
473
667
  end
474
668
 
475
669
  it 'should set the commands default, and the default should be overridable' do
476
- klass = Pry::CommandSet.new :test do
670
+ klass = Pry::CommandSet.new do
477
671
  command "hello" do
478
672
  output.puts "hello world"
479
673
  end
@@ -485,342 +679,383 @@ describe Pry do
485
679
  Pry.new(:input => InputTester.new("hello"), :output => str_output).rep
486
680
  str_output.string.should =~ /hello world/
487
681
 
488
- other_klass = Pry::CommandSet.new :test2 do
489
- command "goodbye", "" do
490
- output.puts "goodbye world"
682
+ other_klass = Pry::CommandSet.new do
683
+ command "goodbye", "" do
684
+ output.puts "goodbye world"
685
+ end
491
686
  end
492
- end
493
687
 
494
- str_output = StringIO.new
688
+ str_output = StringIO.new
495
689
 
496
- Pry.new(:input => InputTester.new("goodbye"), :output => str_output, :commands => other_klass).rep
497
- str_output.string.should =~ /goodbye world/
498
- end
690
+ Pry.new(:input => InputTester.new("goodbye"), :output => str_output, :commands => other_klass).rep
691
+ str_output.string.should =~ /goodbye world/
692
+ end
499
693
 
500
- it 'should inherit "help" command from Pry::CommandBase' do
501
- klass = Pry::CommandSet.new :test do
502
- command "h", "h command" do
694
+ it 'should inherit "help" command from Pry::CommandBase' do
695
+ klass = Pry::CommandSet.new do
696
+ command "h", "h command" do
697
+ end
503
698
  end
504
- end
505
699
 
506
- klass.commands.keys.size.should == 3
507
- klass.commands.keys.include?("help").should == true
508
- klass.commands.keys.include?("install").should == true
509
- klass.commands.keys.include?("h").should == true
510
- end
700
+ klass.commands.keys.size.should == 3
701
+ klass.commands.keys.include?("help").should == true
702
+ klass.commands.keys.include?("install").should == true
703
+ klass.commands.keys.include?("h").should == true
704
+ end
511
705
 
512
- it 'should inherit commands from Pry::Commands' do
513
- klass = Pry::CommandSet.new :test, Pry::Commands do
514
- command "v" do
706
+ it 'should inherit commands from Pry::Commands' do
707
+ klass = Pry::CommandSet.new Pry::Commands do
708
+ command "v" do
709
+ end
515
710
  end
711
+
712
+ klass.commands.include?("nesting").should == true
713
+ klass.commands.include?("jump-to").should == true
714
+ klass.commands.include?("cd").should == true
715
+ klass.commands.include?("v").should == true
516
716
  end
517
717
 
518
- klass.commands.include?("nesting").should == true
519
- klass.commands.include?("jump-to").should == true
520
- klass.commands.include?("cd").should == true
521
- klass.commands.include?("v").should == true
522
- end
718
+ it 'should alias a command with another command' do
719
+ klass = Pry::CommandSet.new do
720
+ alias_command "help2", "help"
721
+ end
722
+ klass.commands["help2"].block.should == klass.commands["help"].block
723
+ end
523
724
 
524
- it 'should alias a command with another command' do
525
- klass = Pry::CommandSet.new :test do
526
- alias_command "help2", "help"
725
+ it 'should change description of a command using desc' do
726
+ klass = Pry::CommandSet.new do; end
727
+ orig = klass.commands["help"].description
728
+ klass.instance_eval do
729
+ desc "help", "blah"
730
+ end
731
+ klass.commands["help"].description.should.not == orig
732
+ klass.commands["help"].description.should == "blah"
527
733
  end
528
734
 
735
+ it 'should run a command from within a command' do
736
+ klass = Pry::CommandSet.new do
737
+ command "v" do
738
+ output.puts "v command"
739
+ end
529
740
 
530
- klass.commands["help2"].block.should == klass.commands["help"].block
531
- end
741
+ command "run_v" do
742
+ run "v"
743
+ end
744
+ end
532
745
 
533
- it 'should change description of a command using desc' do
534
- klass = Pry::CommandSet.new :test do; end
535
- orig = klass.commands["help"].description
536
- klass.instance_eval do
537
- desc "help", "blah"
746
+ str_output = StringIO.new
747
+ Pry.new(:input => InputTester.new("run_v"), :output => str_output, :commands => klass).rep
748
+ str_output.string.should =~ /v command/
538
749
  end
539
- klass.commands["help"].description.should.not == orig
540
- klass.commands["help"].description.should == "blah"
541
- end
542
750
 
543
- it 'should run a command from within a command' do
544
- klass = Pry::CommandSet.new :test do
545
- command "v" do
546
- output.puts "v command"
751
+ it 'should run a regex command from within a command' do
752
+ klass = Pry::CommandSet.new do
753
+ command /v(.*)?/ do |arg|
754
+ output.puts "v #{arg}"
755
+ end
756
+
757
+ command "run_v" do
758
+ run "vbaby"
759
+ end
547
760
  end
548
761
 
549
- command "run_v" do
550
- run "v"
762
+ str_output = StringIO.new
763
+ redirect_pry_io(InputTester.new("run_v"), str_output) do
764
+ Pry.new(:commands => klass).rep
551
765
  end
766
+
767
+ str_output.string.should =~ /v baby/
552
768
  end
553
769
 
554
- str_output = StringIO.new
555
- Pry.new(:input => InputTester.new("run_v"), :output => str_output, :commands => klass).rep
556
- str_output.string.should =~ /v command/
557
- end
770
+ it 'should run a command from within a command with arguments' do
771
+ klass = Pry::CommandSet.new do
772
+ command /v(\w+)/ do |arg1, arg2|
773
+ output.puts "v #{arg1} #{arg2}"
774
+ end
558
775
 
559
- it 'should enable an inherited method to access opts and output and target, due to instance_exec' do
560
- klass = Pry::CommandSet.new :test do
561
- command "v" do
562
- output.puts "#{target.eval('self')}"
776
+ command "run_v_explicit_parameter" do
777
+ run "vbaby", "param"
778
+ end
779
+
780
+ command "run_v_embedded_parameter" do
781
+ run "vbaby param"
782
+ end
563
783
  end
564
- end
565
784
 
566
- child_klass = Pry::CommandSet.new :test2, klass do
785
+ ["run_v_explicit_parameter", "run_v_embedded_parameter"].each do |cmd|
786
+ str_output = StringIO.new
787
+ redirect_pry_io(InputTester.new(cmd), str_output) do
788
+ Pry.new(:commands => klass).rep
789
+ end
790
+ str_output.string.should =~ /v baby param/
791
+ end
567
792
  end
568
793
 
569
- str_output = StringIO.new
570
- Pry.new(:print => proc {}, :input => InputTester.new("v"),
571
- :output => str_output, :commands => child_klass).rep("john")
794
+ it 'should enable an inherited method to access opts and output and target, due to instance_exec' do
795
+ klass = Pry::CommandSet.new do
796
+ command "v" do
797
+ output.puts "#{target.eval('self')}"
798
+ end
799
+ end
572
800
 
573
- str_output.string.rstrip.should == "john"
574
- end
801
+ child_klass = Pry::CommandSet.new klass do
802
+ end
803
+
804
+ str_output = StringIO.new
805
+ Pry.new(:print => proc {}, :input => InputTester.new("v"),
806
+ :output => str_output, :commands => child_klass).rep("john")
575
807
 
576
- it 'should import commands from another command object' do
577
- klass = Pry::CommandSet.new :test do
578
- import_from Pry::Commands, "ls", "jump-to"
808
+ str_output.string.rstrip.should == "john"
579
809
  end
580
810
 
811
+ it 'should import commands from another command object' do
812
+ klass = Pry::CommandSet.new do
813
+ import_from Pry::Commands, "ls", "jump-to"
814
+ end
815
+
581
816
  klass.commands.include?("ls").should == true
582
817
  klass.commands.include?("jump-to").should == true
583
818
  end
584
819
 
585
- it 'should delete some inherited commands when using delete method' do
586
- klass = Pry::CommandSet.new :test, Pry::Commands do
587
- command "v" do
820
+ it 'should delete some inherited commands when using delete method' do
821
+ klass = Pry::CommandSet.new Pry::Commands do
822
+ command "v" do
823
+ end
824
+
825
+ delete "show-doc", "show-method"
826
+ delete "ls"
588
827
  end
589
828
 
590
- delete "show-doc", "show-method"
591
- delete "ls"
829
+ klass.commands.include?("nesting").should == true
830
+ klass.commands.include?("jump-to").should == true
831
+ klass.commands.include?("cd").should == true
832
+ klass.commands.include?("v").should == true
833
+ klass.commands.include?("show-doc").should == false
834
+ klass.commands.include?("show-method").should == false
835
+ klass.commands.include?("ls").should == false
592
836
  end
593
837
 
594
- klass.commands.include?("nesting").should == true
595
- klass.commands.include?("jump-to").should == true
596
- klass.commands.include?("cd").should == true
597
- klass.commands.include?("v").should == true
598
- klass.commands.include?("show-doc").should == false
599
- klass.commands.include?("show-method").should == false
600
- klass.commands.include?("ls").should == false
601
- end
602
-
603
- it 'should override some inherited commands' do
604
- klass = Pry::CommandSet.new :test, Pry::Commands do
605
- command "jump-to" do
606
- output.puts "jump-to the music"
607
- end
838
+ it 'should override some inherited commands' do
839
+ klass = Pry::CommandSet.new Pry::Commands do
840
+ command "jump-to" do
841
+ output.puts "jump-to the music"
842
+ end
608
843
 
609
- command "help" do
610
- output.puts "help to the music"
844
+ command "help" do
845
+ output.puts "help to the music"
846
+ end
611
847
  end
612
- end
613
848
 
614
- # suppress evaluation output
615
- Pry.print = proc {}
849
+ # suppress evaluation output
850
+ Pry.print = proc {}
616
851
 
617
- str_output = StringIO.new
618
- Pry.new(:input => InputTester.new("jump-to"), :output => str_output, :commands => klass).rep
619
- str_output.string.rstrip.should == "jump-to the music"
852
+ str_output = StringIO.new
853
+ Pry.new(:input => InputTester.new("jump-to"), :output => str_output, :commands => klass).rep
854
+ str_output.string.rstrip.should == "jump-to the music"
620
855
 
621
- str_output = StringIO.new
622
- Pry.new(:input => InputTester.new("help"), :output => str_output, :commands => klass).rep
623
- str_output.string.rstrip.should == "help to the music"
856
+ str_output = StringIO.new
857
+ Pry.new(:input => InputTester.new("help"), :output => str_output, :commands => klass).rep
858
+ str_output.string.rstrip.should == "help to the music"
624
859
 
625
860
 
626
- Pry.reset_defaults
627
- Pry.color = false
861
+ Pry.reset_defaults
862
+ Pry.color = false
863
+ end
628
864
  end
629
- end
630
-
631
- it "should set the print default, and the default should be overridable" do
632
- new_print = proc { |out, value| out.puts value }
633
- Pry.print = new_print
634
865
 
635
- Pry.new.print.should == Pry.print
636
- str_output = StringIO.new
637
- Pry.new(:input => InputTester.new("\"test\""), :output => str_output).rep
638
- str_output.string.should == "test\n"
866
+ it "should set the print default, and the default should be overridable" do
867
+ new_print = proc { |out, value| out.puts value }
868
+ Pry.print = new_print
639
869
 
640
- str_output = StringIO.new
641
- Pry.new(:input => InputTester.new("\"test\""), :output => str_output,
642
- :print => proc { |out, value| out.puts value.reverse }).rep
643
- str_output.string.should == "tset\n"
870
+ Pry.new.print.should == Pry.print
871
+ str_output = StringIO.new
872
+ Pry.new(:input => InputTester.new("\"test\""), :output => str_output).rep
873
+ str_output.string.should == "test\n"
644
874
 
645
- Pry.new.print.should == Pry.print
646
- str_output = StringIO.new
647
- Pry.new(:input => InputTester.new("\"test\""), :output => str_output).rep
648
- str_output.string.should == "test\n"
649
- end
875
+ str_output = StringIO.new
876
+ Pry.new(:input => InputTester.new("\"test\""), :output => str_output,
877
+ :print => proc { |out, value| out.puts value.reverse }).rep
878
+ str_output.string.should == "tset\n"
650
879
 
651
- describe "pry return values" do
652
- it 'should return the target object' do
653
- Pry.start(self, :input => StringIO.new("exit"), :output => Pry::NullOutput).should == self
880
+ Pry.new.print.should == Pry.print
881
+ str_output = StringIO.new
882
+ Pry.new(:input => InputTester.new("\"test\""), :output => str_output).rep
883
+ str_output.string.should == "test\n"
654
884
  end
655
885
 
656
- it 'should return the parameter given to exit' do
657
- Pry.start(self, :input => StringIO.new("exit 10"), :output => Pry::NullOutput).should == 10
658
- end
886
+ describe "pry return values" do
887
+ it 'should return the target object' do
888
+ Pry.start(self, :input => StringIO.new("exit"), :output => Pry::NullOutput).should == self
889
+ end
659
890
 
660
- it 'should return the parameter (multi word string) given to exit' do
661
- Pry.start(self, :input => StringIO.new("exit \"john mair\""), :output => Pry::NullOutput).should == "john mair"
662
- end
891
+ it 'should return the parameter given to exit' do
892
+ Pry.start(self, :input => StringIO.new("exit 10"), :output => Pry::NullOutput).should == 10
893
+ end
663
894
 
664
- it 'should return the parameter (function call) given to exit' do
665
- Pry.start(self, :input => StringIO.new("exit 'abc'.reverse"), :output => Pry::NullOutput).should == 'cba'
666
- end
895
+ it 'should return the parameter (multi word string) given to exit' do
896
+ Pry.start(self, :input => StringIO.new("exit \"john mair\""), :output => Pry::NullOutput).should == "john mair"
897
+ end
667
898
 
668
- it 'should return the parameter (self) given to exit' do
669
- Pry.start("carl", :input => StringIO.new("exit self"), :output => Pry::NullOutput).should == "carl"
899
+ it 'should return the parameter (function call) given to exit' do
900
+ Pry.start(self, :input => StringIO.new("exit 'abc'.reverse"), :output => Pry::NullOutput).should == 'cba'
901
+ end
902
+
903
+ it 'should return the parameter (self) given to exit' do
904
+ Pry.start("carl", :input => StringIO.new("exit self"), :output => Pry::NullOutput).should == "carl"
905
+ end
670
906
  end
671
- end
672
907
 
673
- describe "prompts" do
674
- it 'should set the prompt default, and the default should be overridable (single prompt)' do
675
- new_prompt = proc { "test prompt> " }
676
- Pry.prompt = new_prompt
908
+ describe "prompts" do
909
+ it 'should set the prompt default, and the default should be overridable (single prompt)' do
910
+ new_prompt = proc { "test prompt> " }
911
+ Pry.prompt = new_prompt
677
912
 
678
- Pry.new.prompt.should == Pry.prompt
679
- Pry.new.select_prompt(true, 0).should == "test prompt> "
680
- Pry.new.select_prompt(false, 0).should == "test prompt> "
913
+ Pry.new.prompt.should == Pry.prompt
914
+ Pry.new.select_prompt(true, 0).should == "test prompt> "
915
+ Pry.new.select_prompt(false, 0).should == "test prompt> "
681
916
 
682
- new_prompt = proc { "A" }
683
- pry_tester = Pry.new(:prompt => new_prompt)
684
- pry_tester.prompt.should == new_prompt
685
- pry_tester.select_prompt(true, 0).should == "A"
686
- pry_tester.select_prompt(false, 0).should == "A"
917
+ new_prompt = proc { "A" }
918
+ pry_tester = Pry.new(:prompt => new_prompt)
919
+ pry_tester.prompt.should == new_prompt
920
+ pry_tester.select_prompt(true, 0).should == "A"
921
+ pry_tester.select_prompt(false, 0).should == "A"
687
922
 
688
- Pry.new.prompt.should == Pry.prompt
689
- Pry.new.select_prompt(true, 0).should == "test prompt> "
690
- Pry.new.select_prompt(false, 0).should == "test prompt> "
691
- end
923
+ Pry.new.prompt.should == Pry.prompt
924
+ Pry.new.select_prompt(true, 0).should == "test prompt> "
925
+ Pry.new.select_prompt(false, 0).should == "test prompt> "
926
+ end
692
927
 
693
- it 'should set the prompt default, and the default should be overridable (multi prompt)' do
694
- new_prompt = [proc { "test prompt> " }, proc { "test prompt* " }]
695
- Pry.prompt = new_prompt
928
+ it 'should set the prompt default, and the default should be overridable (multi prompt)' do
929
+ new_prompt = [proc { "test prompt> " }, proc { "test prompt* " }]
930
+ Pry.prompt = new_prompt
696
931
 
697
- Pry.new.prompt.should == Pry.prompt
698
- Pry.new.select_prompt(true, 0).should == "test prompt> "
699
- Pry.new.select_prompt(false, 0).should == "test prompt* "
932
+ Pry.new.prompt.should == Pry.prompt
933
+ Pry.new.select_prompt(true, 0).should == "test prompt> "
934
+ Pry.new.select_prompt(false, 0).should == "test prompt* "
700
935
 
701
- new_prompt = [proc { "A" }, proc { "B" }]
702
- pry_tester = Pry.new(:prompt => new_prompt)
703
- pry_tester.prompt.should == new_prompt
704
- pry_tester.select_prompt(true, 0).should == "A"
705
- pry_tester.select_prompt(false, 0).should == "B"
936
+ new_prompt = [proc { "A" }, proc { "B" }]
937
+ pry_tester = Pry.new(:prompt => new_prompt)
938
+ pry_tester.prompt.should == new_prompt
939
+ pry_tester.select_prompt(true, 0).should == "A"
940
+ pry_tester.select_prompt(false, 0).should == "B"
706
941
 
707
- Pry.new.prompt.should == Pry.prompt
708
- Pry.new.select_prompt(true, 0).should == "test prompt> "
709
- Pry.new.select_prompt(false, 0).should == "test prompt* "
710
- end
942
+ Pry.new.prompt.should == Pry.prompt
943
+ Pry.new.select_prompt(true, 0).should == "test prompt> "
944
+ Pry.new.select_prompt(false, 0).should == "test prompt* "
945
+ end
711
946
 
712
- describe 'storing and restoring the prompt' do
713
- before do
714
- make = lambda do |name,i|
715
- prompt = [ proc { "#{i}>" } , proc { "#{i+1}>" } ]
716
- (class << prompt; self; end).send(:define_method, :inspect) { "<Prompt-#{name}>" }
717
- prompt
718
- end
719
- @a , @b , @c = make[:a,0] , make[:b,1] , make[:c,2]
720
- @pry = Pry.new :prompt => @a
721
- end
722
- it 'should have a prompt stack' do
723
- @pry.push_prompt @b
724
- @pry.push_prompt @c
725
- @pry.prompt.should == @c
726
- @pry.pop_prompt
727
- @pry.prompt.should == @b
728
- @pry.pop_prompt
729
- @pry.prompt.should == @a
730
- end
731
-
732
- it 'should restore overridden prompts when returning from file-mode' do
733
- pry = Pry.new :input => InputTester.new('shell-mode', 'shell-mode'),
734
- :prompt => [ proc { 'P>' } ] * 2
735
- pry.select_prompt(true, 0).should == "P>"
736
- pry.re
737
- pry.select_prompt(true, 0).should =~ /\Apry .* \$ \z/
738
- pry.re
739
- pry.select_prompt(true, 0).should == "P>"
740
- end
741
-
742
- it '#pop_prompt should return the popped prompt' do
743
- @pry.push_prompt @b
744
- @pry.push_prompt @c
745
- @pry.pop_prompt.should == @c
746
- @pry.pop_prompt.should == @b
747
- end
748
-
749
- it 'should not pop the last prompt' do
750
- @pry.push_prompt @b
751
- @pry.pop_prompt.should == @b
752
- @pry.pop_prompt.should == @a
753
- @pry.pop_prompt.should == @a
754
- @pry.prompt.should == @a
755
- end
756
-
757
- describe '#prompt= should replace the current prompt with the new prompt' do
758
- it 'when only one prompt on the stack' do
759
- @pry.prompt = @b
947
+ describe 'storing and restoring the prompt' do
948
+ before do
949
+ make = lambda do |name,i|
950
+ prompt = [ proc { "#{i}>" } , proc { "#{i+1}>" } ]
951
+ (class << prompt; self; end).send(:define_method, :inspect) { "<Prompt-#{name}>" }
952
+ prompt
953
+ end
954
+ @a , @b , @c = make[:a,0] , make[:b,1] , make[:c,2]
955
+ @pry = Pry.new :prompt => @a
956
+ end
957
+ it 'should have a prompt stack' do
958
+ @pry.push_prompt @b
959
+ @pry.push_prompt @c
960
+ @pry.prompt.should == @c
961
+ @pry.pop_prompt
760
962
  @pry.prompt.should == @b
761
- @pry.pop_prompt.should == @b
762
- @pry.pop_prompt.should == @b
963
+ @pry.pop_prompt
964
+ @pry.prompt.should == @a
763
965
  end
764
- it 'when several prompts on the stack' do
966
+
967
+ it 'should restore overridden prompts when returning from file-mode' do
968
+ pry = Pry.new :input => InputTester.new('shell-mode', 'shell-mode'),
969
+ :prompt => [ proc { 'P>' } ] * 2
970
+ pry.select_prompt(true, 0).should == "P>"
971
+ pry.re
972
+ pry.select_prompt(true, 0).should =~ /\Apry .* \$ \z/
973
+ pry.re
974
+ pry.select_prompt(true, 0).should == "P>"
975
+ end
976
+
977
+ it '#pop_prompt should return the popped prompt' do
765
978
  @pry.push_prompt @b
766
- @pry.prompt = @c
979
+ @pry.push_prompt @c
767
980
  @pry.pop_prompt.should == @c
981
+ @pry.pop_prompt.should == @b
982
+ end
983
+
984
+ it 'should not pop the last prompt' do
985
+ @pry.push_prompt @b
986
+ @pry.pop_prompt.should == @b
987
+ @pry.pop_prompt.should == @a
768
988
  @pry.pop_prompt.should == @a
989
+ @pry.prompt.should == @a
990
+ end
991
+
992
+ describe '#prompt= should replace the current prompt with the new prompt' do
993
+ it 'when only one prompt on the stack' do
994
+ @pry.prompt = @b
995
+ @pry.prompt.should == @b
996
+ @pry.pop_prompt.should == @b
997
+ @pry.pop_prompt.should == @b
998
+ end
999
+ it 'when several prompts on the stack' do
1000
+ @pry.push_prompt @b
1001
+ @pry.prompt = @c
1002
+ @pry.pop_prompt.should == @c
1003
+ @pry.pop_prompt.should == @a
1004
+ end
769
1005
  end
770
1006
  end
771
1007
  end
772
- end
773
1008
 
774
- it 'should set the hooks default, and the default should be overridable' do
775
- Pry.input = InputTester.new("exit")
776
- Pry.hooks = {
777
- :before_session => proc { |out,_| out.puts "HELLO" },
778
- :after_session => proc { |out,_| out.puts "BYE" }
779
- }
1009
+ it 'should set the hooks default, and the default should be overridable' do
1010
+ Pry.input = InputTester.new("exit")
1011
+ Pry.hooks = {
1012
+ :before_session => proc { |out,_| out.puts "HELLO" },
1013
+ :after_session => proc { |out,_| out.puts "BYE" }
1014
+ }
780
1015
 
781
- str_output = StringIO.new
782
- Pry.new(:output => str_output).repl
783
- str_output.string.should =~ /HELLO/
784
- str_output.string.should =~ /BYE/
1016
+ str_output = StringIO.new
1017
+ Pry.new(:output => str_output).repl
1018
+ str_output.string.should =~ /HELLO/
1019
+ str_output.string.should =~ /BYE/
785
1020
 
786
- Pry.input.rewind
1021
+ Pry.input.rewind
787
1022
 
788
- str_output = StringIO.new
789
- Pry.new(:output => str_output,
790
- :hooks => {
791
- :before_session => proc { |out,_| out.puts "MORNING" },
792
- :after_session => proc { |out,_| out.puts "EVENING" }
793
- }
794
- ).repl
795
-
796
- str_output.string.should =~ /MORNING/
797
- str_output.string.should =~ /EVENING/
798
-
799
- # try below with just defining one hook
800
- Pry.input.rewind
801
- str_output = StringIO.new
802
- Pry.new(:output => str_output,
803
- :hooks => {
804
- :before_session => proc { |out,_| out.puts "OPEN" }
805
- }
806
- ).repl
1023
+ str_output = StringIO.new
1024
+ Pry.new(:output => str_output,
1025
+ :hooks => {
1026
+ :before_session => proc { |out,_| out.puts "MORNING" },
1027
+ :after_session => proc { |out,_| out.puts "EVENING" }
1028
+ }
1029
+ ).repl
1030
+
1031
+ str_output.string.should =~ /MORNING/
1032
+ str_output.string.should =~ /EVENING/
1033
+
1034
+ # try below with just defining one hook
1035
+ Pry.input.rewind
1036
+ str_output = StringIO.new
1037
+ Pry.new(:output => str_output,
1038
+ :hooks => {
1039
+ :before_session => proc { |out,_| out.puts "OPEN" }
1040
+ }
1041
+ ).repl
807
1042
 
808
- str_output.string.should =~ /OPEN/
1043
+ str_output.string.should =~ /OPEN/
809
1044
 
810
- Pry.input.rewind
811
- str_output = StringIO.new
812
- Pry.new(:output => str_output,
813
- :hooks => {
814
- :after_session => proc { |out,_| out.puts "CLOSE" }
815
- }
816
- ).repl
1045
+ Pry.input.rewind
1046
+ str_output = StringIO.new
1047
+ Pry.new(:output => str_output,
1048
+ :hooks => {
1049
+ :after_session => proc { |out,_| out.puts "CLOSE" }
1050
+ }
1051
+ ).repl
817
1052
 
818
- str_output.string.should =~ /CLOSE/
1053
+ str_output.string.should =~ /CLOSE/
819
1054
 
820
- Pry.reset_defaults
821
- Pry.color = false
1055
+ Pry.reset_defaults
1056
+ Pry.color = false
1057
+ end
822
1058
  end
823
1059
  end
824
1060
  end
825
1061
  end
826
- end