pry 0.9.8pre7 → 0.9.8pre8

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.
@@ -1,6 +1,196 @@
1
1
  require 'helper'
2
2
 
3
3
  describe "Pry::DefaultCommands::Shell" do
4
+ describe "save-file" do
5
+ before do
6
+ @tf = Tempfile.new(["pry", ".py"])
7
+ @path = @tf.path
8
+ end
9
+
10
+ after do
11
+ @tf.close(true)
12
+ end
13
+
14
+ describe "-f" do
15
+ it 'should save a file to a file' do
16
+ f = Tempfile.new(["pry", ".py"])
17
+ path = f.path
18
+ f.write ":cute_horse"
19
+
20
+ redirect_pry_io(InputTester.new("save-file -f #{path} #{@path}",
21
+ "exit-all")) do
22
+ Pry.start(@o)
23
+ end
24
+ File.read(@path).should == File.read(path)
25
+
26
+ f.close(true)
27
+ end
28
+ end
29
+
30
+ describe "-i" do
31
+ it 'should save input expressions to a file (single expression)' do
32
+ redirect_pry_io(InputTester.new(":horse_nostrils",
33
+ "save-file -i 1 #{@path}",
34
+ "exit-all")) do
35
+ Pry.start(@o)
36
+ end
37
+ File.read(@path).should == ":horse_nostrils\n"
38
+ end
39
+
40
+ it 'should save input expressions to a file (range)' do
41
+ redirect_pry_io(InputTester.new(":horse_nostrils",
42
+ ":sucking_up_all_the_oxygen",
43
+ "save-file -i 1..2 #{@path}",
44
+ "exit-all")) do
45
+ Pry.start(@o)
46
+ end
47
+ File.read(@path).should == ":horse_nostrils\n:sucking_up_all_the_oxygen\n"
48
+ end
49
+ end
50
+
51
+ describe "-m" do
52
+ before do
53
+ @o = Object.new
54
+ def @o.baby
55
+ :baby
56
+ end
57
+ def @o.bang
58
+ :bang
59
+ end
60
+ end
61
+
62
+ describe "single method" do
63
+ it 'should save a method to a file' do
64
+ redirect_pry_io(InputTester.new("save-file #{@path} -m baby",
65
+ "exit-all")) do
66
+ Pry.start(@o)
67
+ end
68
+ File.read(@path).should == Pry::Method.from_obj(@o, :baby).source
69
+ end
70
+
71
+ it 'should save a method to a file truncated by --lines' do
72
+ redirect_pry_io(InputTester.new("save-file #{@path} -m baby --lines 2..4",
73
+ "exit-all")) do
74
+ Pry.start(@o)
75
+ end
76
+
77
+ # must add 1 as first line of method is 1
78
+ File.read(@path).should == Pry::Method.from_obj(@o, :baby).source.lines.to_a[1..5].join
79
+ end
80
+ end
81
+
82
+ describe "multiple method" do
83
+ it 'should save multiple methods to a file' do
84
+ redirect_pry_io(InputTester.new("save-file #{@path} -m baby -m bang",
85
+ "exit-all")) do
86
+ Pry.start(@o)
87
+ end
88
+ File.read(@path).should == Pry::Method.from_obj(@o, :baby).source +
89
+ Pry::Method.from_obj(@o, :bang).source
90
+ end
91
+
92
+ it 'should save multiple methods to a file trucated by --lines' do
93
+ redirect_pry_io(InputTester.new("save-file #{@path} -m baby -m bang --lines 2..-2",
94
+ "exit-all")) do
95
+ Pry.start(@o)
96
+ end
97
+
98
+ # must add 1 as first line of method is 1
99
+ File.read(@path).should == (Pry::Method.from_obj(@o, :baby).source +
100
+ Pry::Method.from_obj(@o, :bang).source).lines.to_a[1..-2].join
101
+ end
102
+
103
+ it 'should save multiple methods to a file trucated by --lines 1 (single parameter, not range)' do
104
+ redirect_pry_io(InputTester.new("save-file #{@path} -m baby -m bang --lines 1",
105
+ "exit-all")) do
106
+ Pry.start(@o)
107
+ end
108
+
109
+ # must add 1 as first line of method is 1
110
+ File.read(@path).should == (Pry::Method.from_obj(@o, :baby).source +
111
+ Pry::Method.from_obj(@o, :bang).source).lines.to_a[0]
112
+ end
113
+
114
+ end
115
+
116
+ end
117
+
118
+ describe "overwrite by default (no --append)" do
119
+ it 'should overwrite specified file with new input' do
120
+ redirect_pry_io(InputTester.new(":horse_nostrils",
121
+ "save-file -i 1 #{@path}",
122
+ "exit-all")) do
123
+ Pry.start(@o)
124
+ end
125
+
126
+ redirect_pry_io(InputTester.new(":sucking_up_all_the_oxygen",
127
+ "save-file -i 1 #{@path}",
128
+ "exit-all")) do
129
+ Pry.start(@o)
130
+ end
131
+
132
+ File.read(@path).should == ":sucking_up_all_the_oxygen\n"
133
+ end
134
+
135
+ end
136
+
137
+ describe "--append" do
138
+ it 'should append to end of specified file' do
139
+ redirect_pry_io(InputTester.new(":horse_nostrils",
140
+ "save-file -i 1 #{@path}",
141
+ "exit-all")) do
142
+ Pry.start(@o)
143
+ end
144
+
145
+ redirect_pry_io(InputTester.new(":sucking_up_all_the_oxygen",
146
+ "save-file -i 1 #{@path} -a",
147
+ "exit-all")) do
148
+ Pry.start(@o)
149
+ end
150
+
151
+ File.read(@path).should == ":horse_nostrils\n:sucking_up_all_the_oxygen\n"
152
+ end
153
+ end
154
+
155
+ describe "-c" do
156
+ it 'should save a command to a file' do
157
+ redirect_pry_io(InputTester.new("save-file #{@path} -c show-method",
158
+ "exit-all")) do
159
+ Pry.start(@o)
160
+ end
161
+ cmd = Pry::Method.new(Pry.commands.find_command("show-method").block)
162
+ File.read(@path).should == Pry::Code.from_method(cmd).to_s
163
+ end
164
+ end
165
+
166
+ describe "combined options" do
167
+ before do
168
+ @o = Object.new
169
+ def @o.baby
170
+ :baby
171
+ end
172
+ end
173
+
174
+ it 'should save input cache and a method to a file (in that order)' do
175
+ redirect_pry_io(InputTester.new(":horse_nostrils",
176
+ "save-file -i 1 -m baby #{@path}",
177
+ "exit-all")) do
178
+ Pry.start(@o)
179
+ end
180
+ File.read(@path).should == ":horse_nostrils\n" + Pry::Method.from_obj(@o, :baby).source
181
+ end
182
+
183
+ it 'should select a portion to save using --lines' do
184
+ redirect_pry_io(InputTester.new(":horse_nostrils",
185
+ "save-file -i 1 -m baby #{@path} --lines 2..-2",
186
+ "exit-all")) do
187
+ Pry.start(@o)
188
+ end
189
+ File.read(@path).should == (":horse_nostrils\n" + Pry::Method.from_obj(@o, :baby).source).lines.to_a[1..-2].join
190
+ end
191
+ end
192
+ end
193
+
4
194
  describe "cat" do
5
195
 
6
196
  describe "on receiving a file that does not exist" do
data/test/test_hooks.rb CHANGED
@@ -152,7 +152,7 @@ describe Pry::Hooks do
152
152
  hooks_dup.get_hook(:test_hook, :testing).should == @hooks.get_hook(:test_hook, :testing)
153
153
  end
154
154
 
155
- it 'adding a new event to dupped instance should not affect original' do
155
+ it 'adding a new event to dupped instance should not affect original' do
156
156
  @hooks.add_hook(:test_hook, :testing) { :none_such }
157
157
  hooks_dup = @hooks.dup
158
158
 
@@ -161,7 +161,7 @@ describe Pry::Hooks do
161
161
  hooks_dup.get_hook(:other_test_hook, :testing).should.not == @hooks.get_hook(:other_test_hook, :testing)
162
162
  end
163
163
 
164
- it 'adding a new hook to dupped instance should not affect original' do
164
+ it 'adding a new hook to dupped instance should not affect original' do
165
165
  @hooks.add_hook(:test_hook, :testing) { :none_such }
166
166
  hooks_dup = @hooks.dup
167
167
 
@@ -415,6 +415,76 @@ describe Pry::Hooks do
415
415
  end
416
416
  end
417
417
  end
418
+ end
418
419
 
420
+ describe "anonymous hooks" do
421
+ it 'should allow adding of hook without a name' do
422
+ @hooks.add_hook(:test_hook, nil) {}
423
+ @hooks.hook_count(:test_hook).should == 1
424
+ end
425
+
426
+ it 'should only allow one anonymous hook to exist' do
427
+ @hooks.add_hook(:test_hook, nil) { }
428
+ @hooks.add_hook(:test_hook, nil) { }
429
+ @hooks.hook_count(:test_hook).should == 1
430
+ end
431
+
432
+ it 'should execute most recently added anonymous hook' do
433
+ x = nil
434
+ y = nil
435
+ @hooks.add_hook(:test_hook, nil) { y = 1 }
436
+ @hooks.add_hook(:test_hook, nil) { x = 2 }
437
+ @hooks.exec_hook(:test_hook)
438
+ y.should == nil
439
+ x.should == 2
440
+ end
419
441
  end
442
+
443
+ describe "deprecated hash-based API" do
444
+ after do
445
+ Pry.config.hooks.clear_all if Pry.config.hooks
446
+ end
447
+
448
+ describe "Pry.config.hooks" do
449
+ it 'should allow a hash-assignment' do
450
+ Pry.config.hooks = { :before_session => proc { :hello } }
451
+ Pry.config.hooks.get_hook(:before_session, nil).call.should == :hello
452
+ end
453
+
454
+ describe "Pry.config.hooks[]" do
455
+ it 'should return the only anonymous hook' do
456
+ Pry.config.hooks = { :before_session => proc { :hello } }
457
+ Pry.config.hooks[:before_session].call.should == :hello
458
+ end
459
+
460
+ it 'should add an anonymous hook when using Pry.config.hooks[]=' do
461
+ Pry.config.hooks[:before_session] = proc { :bing }
462
+ Pry.config.hooks.hook_count(:before_session).should == 1
463
+ end
464
+
465
+ it 'should add overwrite previous anonymous hooks with new one when calling Pry.config.hooks[]= multiple times' do
466
+ x = nil
467
+ Pry.config.hooks[:before_session] = proc { x = 1 }
468
+ Pry.config.hooks[:before_session] = proc { x = 2 }
469
+
470
+ Pry.config.hooks.exec_hook(:before_session)
471
+ Pry.config.hooks.hook_count(:before_session).should == 1
472
+ x.should == 2
473
+ end
474
+ end
475
+ end
476
+
477
+ describe "Pry.start" do
478
+ it 'should accept a hash for :hooks parameter' do
479
+
480
+ redirect_pry_io(InputTester.new("exit-all"), out=StringIO.new) do
481
+ Pry.start binding, :hooks => { :before_session => proc { |output, _, _| output.puts 'hello friend' } }
482
+ end
483
+
484
+ out.string.should =~ /hello friend/
485
+ end
486
+
487
+ end
488
+ end
489
+
420
490
  end
metadata CHANGED
@@ -1,92 +1,95 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: pry
3
- version: !ruby/object:Gem::Version
4
- version: 0.9.8pre7
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease: 5
5
+ version: 0.9.8pre8
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - John Mair (banisterfiend)
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-20 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
12
+
13
+ date: 2012-01-25 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
15
16
  name: coderay
16
- requirement: &70177446226220 !ruby/object:Gem::Requirement
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
17
19
  none: false
18
- requirements:
20
+ requirements:
19
21
  - - ~>
20
- - !ruby/object:Gem::Version
22
+ - !ruby/object:Gem::Version
21
23
  version: 1.0.5
22
24
  type: :runtime
23
- prerelease: false
24
- version_requirements: *70177446226220
25
- - !ruby/object:Gem::Dependency
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
26
27
  name: slop
27
- requirement: &70177446227200 !ruby/object:Gem::Requirement
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
28
30
  none: false
29
- requirements:
30
- - - ! '>='
31
- - !ruby/object:Gem::Version
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
32
34
  version: 2.4.3
33
35
  - - <
34
- - !ruby/object:Gem::Version
35
- version: '3'
36
+ - !ruby/object:Gem::Version
37
+ version: "3"
36
38
  type: :runtime
37
- prerelease: false
38
- version_requirements: *70177446227200
39
- - !ruby/object:Gem::Dependency
39
+ version_requirements: *id002
40
+ - !ruby/object:Gem::Dependency
40
41
  name: method_source
41
- requirement: &70177446782420 !ruby/object:Gem::Requirement
42
+ prerelease: false
43
+ requirement: &id003 !ruby/object:Gem::Requirement
42
44
  none: false
43
- requirements:
45
+ requirements:
44
46
  - - ~>
45
- - !ruby/object:Gem::Version
46
- version: '0.7'
47
+ - !ruby/object:Gem::Version
48
+ version: "0.7"
47
49
  type: :runtime
48
- prerelease: false
49
- version_requirements: *70177446782420
50
- - !ruby/object:Gem::Dependency
50
+ version_requirements: *id003
51
+ - !ruby/object:Gem::Dependency
51
52
  name: bacon
52
- requirement: &70177446839420 !ruby/object:Gem::Requirement
53
+ prerelease: false
54
+ requirement: &id004 !ruby/object:Gem::Requirement
53
55
  none: false
54
- requirements:
56
+ requirements:
55
57
  - - ~>
56
- - !ruby/object:Gem::Version
57
- version: '1.1'
58
+ - !ruby/object:Gem::Version
59
+ version: "1.1"
58
60
  type: :development
59
- prerelease: false
60
- version_requirements: *70177446839420
61
- - !ruby/object:Gem::Dependency
61
+ version_requirements: *id004
62
+ - !ruby/object:Gem::Dependency
62
63
  name: open4
63
- requirement: &70177446844900 !ruby/object:Gem::Requirement
64
+ prerelease: false
65
+ requirement: &id005 !ruby/object:Gem::Requirement
64
66
  none: false
65
- requirements:
67
+ requirements:
66
68
  - - ~>
67
- - !ruby/object:Gem::Version
68
- version: '1.3'
69
+ - !ruby/object:Gem::Version
70
+ version: "1.3"
69
71
  type: :development
70
- prerelease: false
71
- version_requirements: *70177446844900
72
- - !ruby/object:Gem::Dependency
72
+ version_requirements: *id005
73
+ - !ruby/object:Gem::Dependency
73
74
  name: rake
74
- requirement: &70177446853320 !ruby/object:Gem::Requirement
75
+ prerelease: false
76
+ requirement: &id006 !ruby/object:Gem::Requirement
75
77
  none: false
76
- requirements:
78
+ requirements:
77
79
  - - ~>
78
- - !ruby/object:Gem::Version
79
- version: '0.9'
80
+ - !ruby/object:Gem::Version
81
+ version: "0.9"
80
82
  type: :development
81
- prerelease: false
82
- version_requirements: *70177446853320
83
+ version_requirements: *id006
83
84
  description: An IRB alternative and runtime developer console
84
85
  email: jrmair@gmail.com
85
- executables:
86
+ executables:
86
87
  - pry
87
88
  extensions: []
89
+
88
90
  extra_rdoc_files: []
89
- files:
91
+
92
+ files:
90
93
  - .document
91
94
  - .gemtest
92
95
  - .gitignore
@@ -187,29 +190,32 @@ files:
187
190
  - wiki/Home.md
188
191
  homepage: http://pry.github.com
189
192
  licenses: []
193
+
190
194
  post_install_message:
191
195
  rdoc_options: []
192
- require_paths:
196
+
197
+ require_paths:
193
198
  - lib
194
- required_ruby_version: !ruby/object:Gem::Requirement
199
+ required_ruby_version: !ruby/object:Gem::Requirement
195
200
  none: false
196
- requirements:
197
- - - ! '>='
198
- - !ruby/object:Gem::Version
199
- version: '0'
200
- required_rubygems_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: "0"
205
+ required_rubygems_version: !ruby/object:Gem::Requirement
201
206
  none: false
202
- requirements:
203
- - - ! '>'
204
- - !ruby/object:Gem::Version
207
+ requirements:
208
+ - - ">"
209
+ - !ruby/object:Gem::Version
205
210
  version: 1.3.1
206
211
  requirements: []
212
+
207
213
  rubyforge_project:
208
- rubygems_version: 1.8.6
214
+ rubygems_version: 1.8.11
209
215
  signing_key:
210
216
  specification_version: 3
211
217
  summary: An IRB alternative and runtime developer console
212
- test_files:
218
+ test_files:
213
219
  - test/helper.rb
214
220
  - test/test_cli.rb
215
221
  - test/test_code.rb