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,17 +0,0 @@
1
- require 'helper'
2
-
3
- describe "show-input" do
4
- before do
5
- @t = pry_tester
6
- end
7
-
8
- it 'should correctly show the current lines in the input buffer' do
9
- eval_str = unindent(<<-STR)
10
- def hello
11
- puts :bing
12
- STR
13
-
14
- @t.process_command 'show-input', eval_str
15
- @t.last_output.should =~ /\A\d+: def hello\n\d+: puts :bing/
16
- end
17
- end
@@ -1,782 +0,0 @@
1
- require 'helper'
2
- require "fixtures/show_source_doc_examples"
3
-
4
- if !PryTestHelpers.mri18_and_no_real_source_location?
5
- describe "show-source" do
6
- before do
7
- @o = Object.new
8
- def @o.sample_method
9
- :sample
10
- end
11
-
12
- Object.const_set(:Test, Module.new)
13
- end
14
-
15
- after do
16
- Pad.clear
17
- end
18
-
19
- it "should output a method's source" do
20
- pry_eval(binding, 'show-source @o.sample_method').should =~ /def @o.sample/
21
- end
22
-
23
- it "should output help" do
24
- pry_eval('show-source -h').should =~ /Usage:\s+show-source/
25
- end
26
-
27
- it "should output a method's source with line numbers" do
28
- pry_eval(binding, 'show-source -l @o.sample_method').should =~ /\d+: def @o.sample/
29
- end
30
-
31
- it "should output a method's source with line numbers starting at 1" do
32
- pry_eval(binding, 'show-source -b @o.sample_method').should =~ /1: def @o.sample/
33
- end
34
-
35
- it "should output a method's source if inside method and no name given" do
36
- def @o.sample
37
- pry_eval(binding, 'show-source').should =~ /def @o.sample/
38
- end
39
- @o.sample
40
- end
41
-
42
- it "should output a method's source inside method using the -l switch" do
43
- def @o.sample
44
- pry_eval(binding, 'show-source -l').should =~ /def @o.sample/
45
- end
46
- @o.sample
47
- end
48
-
49
- it "should find methods even if there are spaces in the arguments" do
50
- def @o.foo(*bars)
51
- "Mr flibble"
52
- self
53
- end
54
-
55
- out = pry_eval(binding, "show-source @o.foo('bar', 'baz bam').foo")
56
- out.should =~ /Mr flibble/
57
- end
58
-
59
- it "should find methods even if the object overrides method method" do
60
- c = Class.new{
61
- def method;
62
- 98
63
- end
64
- }
65
-
66
- pry_eval(binding, "show-source c.new.method").should =~ /98/
67
- end
68
-
69
- it "should not show the source when a non-extant method is requested" do
70
- c = Class.new{ def method; 98; end }
71
- mock_pry(binding, "show-source c#wrongmethod").should =~ /Couldn't locate/
72
- end
73
-
74
- it "should find instance_methods if the class overrides instance_method" do
75
- c = Class.new{
76
- def method;
77
- 98
78
- end
79
-
80
- def self.instance_method; 789; end
81
- }
82
-
83
- pry_eval(binding, "show-source c#method").should =~ /98/
84
- end
85
-
86
- it "should find instance methods with self#moo" do
87
- c = Class.new{ def moo; "ve over!"; end }
88
-
89
- pry_eval(binding, "cd c", "show-source self#moo").should =~ /ve over/
90
- end
91
-
92
- it "should not find instance methods with self.moo" do
93
- c = Class.new{ def moo; "ve over!"; end }
94
-
95
- proc {
96
- pry_eval(binding, 'cd c', 'show-source self.moo')
97
- }.should.raise(Pry::CommandError).message.should =~ /Couldn't locate/
98
- end
99
-
100
- it "should find normal methods with self.moo" do
101
- c = Class.new{ def self.moo; "ve over!"; end }
102
-
103
- pry_eval(binding, 'cd c', 'show-source self.moo').should =~ /ve over/
104
- end
105
-
106
- it "should not find normal methods with self#moo" do
107
- c = Class.new{ def self.moo; "ve over!"; end }
108
-
109
- proc {
110
- pry_eval(binding, 'cd c', 'show-source self#moo')
111
- }.should.raise(Pry::CommandError).message.should =~ /Couldn't locate/
112
- end
113
-
114
- it "should find normal methods (i.e non-instance methods) by default" do
115
- c = Class.new{ def self.moo; "ve over!"; end }
116
-
117
- pry_eval(binding, "cd c", "show-source moo").should =~ /ve over/
118
- end
119
-
120
- it "should find instance methods if no normal methods available" do
121
- c = Class.new{ def moo; "ve over!"; end }
122
-
123
- pry_eval(binding, "cd c", "show-source moo").should =~ /ve over/
124
- end
125
-
126
- it "should find super methods" do
127
- class Foo
128
- def foo(*bars)
129
- :super_wibble
130
- end
131
- end
132
- o = Foo.new
133
- Object.remove_const(:Foo)
134
- def o.foo(*bars)
135
- :wibble
136
- end
137
-
138
- pry_eval(binding, "show-source --super o.foo").
139
- should =~ /:super_wibble/
140
- end
141
-
142
- it "should raise a CommandError when super method doesn't exist" do
143
- def @o.foo(*bars); end
144
-
145
- proc {
146
- pry_eval(binding, "show-source --super @o.foo")
147
- }.should.raise(Pry::CommandError).message.should =~ /No superclass found/
148
- end
149
-
150
- # dynamically defined method source retrieval is only supported in
151
- # 1.9 - where Method#source_location is native
152
- if RUBY_VERSION =~ /1.9/
153
- it "should output the source of a method defined inside Pry" do
154
- out = pry_eval("def dyn_method\n:test\nend", 'show-source dyn_method')
155
- out.should =~ /def dyn_method/
156
- Object.remove_method :dyn_method
157
- end
158
-
159
- it 'should output source for an instance method defined inside pry' do
160
- pry_tester.tap do |t|
161
- t.eval "class Test::A\n def yo\n end\nend"
162
- t.eval('show-source Test::A#yo').should =~ /def yo/
163
- end
164
- end
165
-
166
- it 'should output source for a repl method defined using define_method' do
167
- pry_tester.tap do |t|
168
- t.eval "class Test::A\n define_method(:yup) {}\nend"
169
- t.eval('show-source Test::A#yup').should =~ /define_method\(:yup\)/
170
- end
171
- end
172
-
173
- it "should output the source of a command defined inside Pry" do
174
- command_definition = %{
175
- Pry.commands.command "hubba-hubba" do
176
- puts "that's what she said!"
177
- end
178
- }
179
- out = pry_eval(command_definition, 'show-source hubba-hubba')
180
- out.should =~ /what she said/
181
- Pry.commands.delete "hubba-hubba"
182
- end
183
- end
184
-
185
- describe "on sourcable objects" do
186
- if RUBY_VERSION =~ /1.9/
187
- it "should output source defined inside pry" do
188
- pry_tester.tap do |t|
189
- t.eval "hello = proc { puts 'hello world!' }"
190
- t.eval("show-source hello").should =~ /proc \{ puts/
191
- end
192
- end
193
- end
194
-
195
- it "should output source for procs/lambdas stored in variables" do
196
- hello = proc { puts 'hello world!' }
197
- pry_eval(binding, 'show-source hello').should =~ /proc \{ puts/
198
- end
199
-
200
- it "should output source for procs/lambdas stored in constants" do
201
- HELLO = proc { puts 'hello world!' }
202
- pry_eval(binding, "show-source HELLO").should =~ /proc \{ puts/
203
- Object.remove_const(:HELLO)
204
- end
205
-
206
- it "should output source for method objects" do
207
- def @o.hi; puts 'hi world'; end
208
- meth = @o.method(:hi)
209
- pry_eval(binding, "show-source meth").should =~ /puts 'hi world'/
210
- end
211
-
212
- describe "on variables that shadow methods" do
213
- before do
214
- @t = pry_tester.eval unindent(<<-EOS)
215
- class ::TestHost
216
- def hello
217
- hello = proc { ' smile ' }
218
- pry_tester(binding)
219
- end
220
- end
221
- ::TestHost.new.hello
222
- EOS
223
- end
224
-
225
- after do
226
- Object.remove_const(:TestHost)
227
- end
228
-
229
- it "source of variable should take precedence over method that is being shadowed" do
230
- source = @t.eval('show-source hello')
231
- source.should.not =~ /def hello/
232
- source.should =~ /proc \{ ' smile ' \}/
233
- end
234
-
235
- it "source of method being shadowed should take precedence over variable
236
- if given self.meth_name syntax" do
237
- @t.eval('show-source self.hello').should =~ /def hello/
238
- end
239
- end
240
- end
241
-
242
- describe "on variable or constant" do
243
- before do
244
- class TestHost
245
- def hello
246
- "hi there"
247
- end
248
- end
249
- end
250
-
251
- after do
252
- Object.remove_const(:TestHost)
253
- end
254
-
255
- it "should output source of its class if variable doesn't respond to source_location" do
256
- test_host = TestHost.new
257
- pry_eval(binding, 'show-source test_host').
258
- should =~ /class TestHost\n.*def hello/
259
- end
260
-
261
- it "should output source of its class if constant doesn't respond to source_location" do
262
- TEST_HOST = TestHost.new
263
- pry_eval(binding, 'show-source TEST_HOST').
264
- should =~ /class TestHost\n.*def hello/
265
- Object.remove_const(:TEST_HOST)
266
- end
267
- end
268
-
269
- describe "on modules" do
270
- before do
271
- class ShowSourceTestSuperClass
272
- def alpha
273
- end
274
- end
275
-
276
- class ShowSourceTestClass<ShowSourceTestSuperClass
277
- def alpha
278
- end
279
- end
280
-
281
- module ShowSourceTestSuperModule
282
- def alpha
283
- end
284
- end
285
-
286
- module ShowSourceTestModule
287
- include ShowSourceTestSuperModule
288
- def alpha
289
- end
290
- end
291
-
292
- ShowSourceTestClassWeirdSyntax = Class.new do
293
- def beta
294
- end
295
- end
296
-
297
- ShowSourceTestModuleWeirdSyntax = Module.new do
298
- def beta
299
- end
300
- end
301
- end
302
-
303
- after do
304
- Object.remove_const :ShowSourceTestSuperClass
305
- Object.remove_const :ShowSourceTestClass
306
- Object.remove_const :ShowSourceTestClassWeirdSyntax
307
- Object.remove_const :ShowSourceTestSuperModule
308
- Object.remove_const :ShowSourceTestModule
309
- Object.remove_const :ShowSourceTestModuleWeirdSyntax
310
- end
311
-
312
- describe "basic functionality, should find top-level module definitions" do
313
- it 'should show source for a class' do
314
- pry_eval('show-source ShowSourceTestClass').
315
- should =~ /class ShowSourceTestClass.*?def alpha/m
316
- end
317
-
318
- it 'should show source for a super class' do
319
- pry_eval('show-source -s ShowSourceTestClass').
320
- should =~ /class ShowSourceTestSuperClass.*?def alpha/m
321
- end
322
-
323
- it 'should show source for a module' do
324
- pry_eval('show-source ShowSourceTestModule').
325
- should =~ /module ShowSourceTestModule/
326
- end
327
-
328
- it 'should show source for an ancestor module' do
329
- pry_eval('show-source -s ShowSourceTestModule').
330
- should =~ /module ShowSourceTestSuperModule/
331
- end
332
-
333
- it 'should show source for a class when Const = Class.new syntax is used' do
334
- pry_eval('show-source ShowSourceTestClassWeirdSyntax').
335
- should =~ /ShowSourceTestClassWeirdSyntax = Class.new/
336
- end
337
-
338
- it 'should show source for a super class when Const = Class.new syntax is used' do
339
- pry_eval('show-source -s ShowSourceTestClassWeirdSyntax').
340
- should =~ /class Object/
341
- end
342
-
343
- it 'should show source for a module when Const = Module.new syntax is used' do
344
- pry_eval('show-source ShowSourceTestModuleWeirdSyntax').
345
- should =~ /ShowSourceTestModuleWeirdSyntax = Module.new/
346
- end
347
- end
348
-
349
- if !Pry::Helpers::BaseHelpers.mri_18?
350
- before do
351
- pry_eval unindent(<<-EOS)
352
- class Dog
353
- def woof
354
- end
355
- end
356
-
357
- class TobinaMyDog < Dog
358
- def woof
359
- end
360
- end
361
- EOS
362
- end
363
-
364
- after do
365
- Object.remove_const :Dog
366
- Object.remove_const :TobinaMyDog
367
- end
368
-
369
- describe "in REPL" do
370
- it 'should find class defined in repl' do
371
- pry_eval('show-source TobinaMyDog').should =~ /class TobinaMyDog/
372
- end
373
- it 'should find superclass defined in repl' do
374
- pry_eval('show-source -s TobinaMyDog').should =~ /class Dog/
375
- end
376
- end
377
- end
378
-
379
- it 'should lookup module name with respect to current context' do
380
-
381
- constant_scope(:AlphaClass, :BetaClass) do
382
- class BetaClass
383
- def alpha
384
- end
385
- end
386
-
387
- class AlphaClass
388
- class BetaClass
389
- def beta
390
- end
391
- end
392
- end
393
-
394
- pry_eval(AlphaClass, 'show-source BetaClass').should =~ /def beta/
395
- end
396
- end
397
-
398
- it 'should lookup nested modules' do
399
- constant_scope(:AlphaClass) do
400
- class AlphaClass
401
- class BetaClass
402
- def beta
403
- end
404
- end
405
- end
406
-
407
- pry_eval('show-source AlphaClass::BetaClass').should =~ /class Beta/
408
- end
409
- end
410
-
411
- # note that pry assumes a class is only monkey-patched at most
412
- # ONCE per file, so will not find multiple monkeypatches in the
413
- # SAME file.
414
- describe "show-source -a" do
415
- it 'should show the source for all monkeypatches defined in different files' do
416
- class TestClassForShowSource
417
- def beta
418
- end
419
- end
420
-
421
- result = pry_eval('show-source TestClassForShowSource -a')
422
- result.should =~ /def alpha/
423
- result.should =~ /def beta/
424
- end
425
-
426
- it 'should show the source for a class_eval-based monkeypatch' do
427
- TestClassForShowSourceClassEval.class_eval do
428
- def class_eval_method
429
- end
430
- end
431
-
432
- result = pry_eval('show-source TestClassForShowSourceClassEval -a')
433
- result.should =~ /def class_eval_method/
434
- end
435
-
436
- it 'should ignore -a when object is not a module' do
437
- TestClassForShowSourceClassEval.class_eval do
438
- def class_eval_method
439
- :bing
440
- end
441
- end
442
-
443
- result = pry_eval('show-source TestClassForShowSourceClassEval#class_eval_method -a')
444
- result.should =~ /bing/
445
- end
446
-
447
- it 'should show the source for an instance_eval-based monkeypatch' do
448
- TestClassForShowSourceInstanceEval.instance_eval do
449
- def instance_eval_method
450
- end
451
- end
452
-
453
- result = pry_eval('show-source TestClassForShowSourceInstanceEval -a')
454
- result.should =~ /def instance_eval_method/
455
- end
456
-
457
- describe "messages relating to -a" do
458
- it 'indicates all available monkeypatches can be shown with -a when (when -a not used and more than one candidate exists for class)' do
459
- class TestClassForShowSource
460
- def beta
461
- end
462
- end
463
-
464
- result = pry_eval('show-source TestClassForShowSource')
465
- result.should =~ /available monkeypatches/
466
- end
467
-
468
- it 'shouldnt say anything about monkeypatches when only one candidate exists for selected class' do
469
- class Aarrrrrghh
470
- def o;end
471
- end
472
-
473
- result = pry_eval('show-source Aarrrrrghh')
474
- result.should.not =~ /available monkeypatches/
475
- Object.remove_const(:Aarrrrrghh)
476
- end
477
- end
478
- end
479
-
480
- describe "when show-source is invoked without a method or class argument" do
481
- before do
482
- module TestHost
483
- class M
484
- def alpha; end
485
- def beta; end
486
- end
487
-
488
- module C
489
- end
490
-
491
- module D
492
- def self.invoked_in_method
493
- pry_eval(binding, 'show-source')
494
- end
495
- end
496
- end
497
- end
498
-
499
- after do
500
- Object.remove_const(:TestHost)
501
- end
502
-
503
- describe "inside a module" do
504
- it 'should display module source by default' do
505
- out = pry_eval(TestHost::M, 'show-source')
506
- out.should =~ /class M/
507
- out.should =~ /def alpha/
508
- out.should =~ /def beta/
509
- end
510
-
511
- it 'should be unable to find module source if no methods defined' do
512
- proc {
513
- pry_eval(TestHost::C, 'show-source')
514
- }.should.raise(Pry::CommandError).
515
- message.should =~ /Couldn't locate/
516
- end
517
-
518
- it 'should display method code (rather than class) if Pry started inside method binding' do
519
- out = TestHost::D.invoked_in_method
520
- out.should =~ /invoked_in_method/
521
- out.should.not =~ /module D/
522
- end
523
-
524
- it 'should display class source when inside instance' do
525
- out = pry_eval(TestHost::M.new, 'show-source')
526
- out.should =~ /class M/
527
- out.should =~ /def alpha/
528
- out.should =~ /def beta/
529
- end
530
-
531
- it 'should allow options to be passed' do
532
- out = pry_eval(TestHost::M, 'show-source -b')
533
- out.should =~ /\d:\s*class M/
534
- out.should =~ /\d:\s*def alpha/
535
- out.should =~ /\d:\s*def beta/
536
- end
537
-
538
- describe "should skip over broken modules" do
539
- before do
540
- module BabyDuck
541
-
542
- module Muesli
543
- binding.eval("def a; end", "dummy.rb", 1)
544
- binding.eval("def b; end", "dummy.rb", 2)
545
- binding.eval("def c; end", "dummy.rb", 3)
546
- end
547
-
548
- module Muesli
549
- def d; end
550
- def e; end
551
- end
552
- end
553
- end
554
-
555
- after do
556
- Object.remove_const(:BabyDuck)
557
- end
558
-
559
- it 'should return source for first valid module' do
560
- out = pry_eval('show-source BabyDuck::Muesli')
561
- out.should =~ /def d; end/
562
- out.should.not =~ /def a; end/
563
- end
564
- end
565
- end
566
- end
567
- end
568
-
569
- describe "on commands" do
570
- before do
571
- @oldset = Pry.config.commands
572
- @set = Pry.config.commands = Pry::CommandSet.new do
573
- import Pry::Commands
574
- end
575
- end
576
-
577
- after do
578
- Pry.config.commands = @oldset
579
- end
580
-
581
- describe "block commands" do
582
- it 'should show source for an ordinary command' do
583
- @set.command "foo", :body_of_foo do; end
584
-
585
- pry_eval('show-source foo').should =~ /:body_of_foo/
586
- end
587
-
588
- it "should output source of commands using special characters" do
589
- @set.command "!%$", "I gots the yellow fever" do; end
590
-
591
- pry_eval('show-source !%$').should =~ /yellow fever/
592
- end
593
-
594
- it 'should show source for a command with spaces in its name' do
595
- @set.command "foo bar", :body_of_foo_bar do; end
596
-
597
- pry_eval('show-source foo bar').should =~ /:body_of_foo_bar/
598
- end
599
-
600
- it 'should show source for a command by listing name' do
601
- @set.command /foo(.*)/, :body_of_foo_bar_regex, :listing => "bar" do; end
602
-
603
- pry_eval('show-source bar').should =~ /:body_of_foo_bar_regex/
604
- end
605
- end
606
-
607
- describe "create_command commands" do
608
- it 'should show source for a command' do
609
- @set.create_command "foo", "babble" do
610
- def process() :body_of_foo end
611
- end
612
- pry_eval('show-source foo').should =~ /:body_of_foo/
613
- end
614
-
615
- it 'should show source for a command defined inside pry' do
616
- pry_eval %{
617
- _pry_.commands.create_command "foo", "babble" do
618
- def process() :body_of_foo end
619
- end
620
- }
621
- pry_eval('show-source foo').should =~ /:body_of_foo/
622
- end
623
- end
624
-
625
- describe "real class-based commands" do
626
- before do
627
- class ::TemporaryCommand < Pry::ClassCommand
628
- match 'temp-command'
629
- def process() :body_of_temp end
630
- end
631
-
632
- Pry.commands.add_command(::TemporaryCommand)
633
- end
634
-
635
- after do
636
- Object.remove_const(:TemporaryCommand)
637
- end
638
-
639
- it 'should show source for a command' do
640
- pry_eval('show-source temp-command').should =~ /:body_of_temp/
641
- end
642
-
643
- it 'should show source for a command defined inside pry' do
644
- pry_eval %{
645
- class ::TemporaryCommandInPry < Pry::ClassCommand
646
- match 'temp-command-in-pry'
647
- def process() :body_of_temp end
648
- end
649
- }
650
- Pry.commands.add_command(::TemporaryCommandInPry)
651
- pry_eval('show-source temp-command-in-pry').should =~ /:body_of_temp/
652
- Object.remove_const(:TemporaryCommandInPry)
653
- end
654
- end
655
- end
656
-
657
- describe "should set _file_ and _dir_" do
658
- it 'should set _file_ and _dir_ to file containing method source' do
659
- t = pry_tester
660
- t.process_command "show-source TestClassForShowSource#alpha"
661
- t.pry.last_file.should =~ /show_source_doc_examples/
662
- t.pry.last_dir.should =~ /fixtures/
663
- end
664
- end
665
-
666
- unless Pry::Helpers::BaseHelpers.rbx?
667
- describe "can't find class/module code" do
668
- describe "for classes" do
669
- before do
670
- module Jesus
671
- module Pig
672
- def lillybing; :lillybing; end
673
- end
674
-
675
- class Brian; end
676
- class Jingle
677
- def a; :doink; end
678
- end
679
-
680
- class Jangle < Jingle; include Pig; end
681
- class Bangle < Jangle; end
682
- end
683
- end
684
-
685
- after do
686
- Object.remove_const(:Jesus)
687
- end
688
-
689
- it 'shows superclass code' do
690
- t = pry_tester
691
- t.process_command "show-source Jesus::Jangle"
692
- t.last_output.should =~ /doink/
693
- end
694
-
695
- it 'ignores included modules' do
696
- t = pry_tester
697
- t.process_command "show-source Jesus::Jangle"
698
- t.last_output.should.not =~ /lillybing/
699
- end
700
-
701
- it 'errors when class has no superclass to show' do
702
- t = pry_tester
703
- lambda { t.process_command "show-source Jesus::Brian" }.should.raise(Pry::CommandError).message.
704
- should =~ /Couldn't locate/
705
- end
706
-
707
- it 'shows warning when reverting to superclass code' do
708
- t = pry_tester
709
- t.process_command "show-source Jesus::Jangle"
710
- t.last_output.should =~ /Warning.*?Cannot find.*?Jesus::Jangle.*Showing.*Jesus::Jingle instead/
711
- end
712
-
713
- it 'shows nth level superclass code (when no intermediary superclasses have code either)' do
714
- t = pry_tester
715
- t.process_command "show-source Jesus::Bangle"
716
- t.last_output.should =~ /doink/
717
- end
718
-
719
- it 'shows correct warning when reverting to nth level superclass' do
720
- t = pry_tester
721
- t.process_command "show-source Jesus::Bangle"
722
- t.last_output.should =~ /Warning.*?Cannot find.*?Jesus::Bangle.*Showing.*Jesus::Jingle instead/
723
- end
724
- end
725
-
726
- describe "for modules" do
727
- before do
728
- module Jesus
729
- module Alpha
730
- def alpha; :alpha; end
731
- end
732
-
733
- module Zeta; end
734
-
735
- module Beta
736
- include Alpha
737
- end
738
-
739
- module Gamma
740
- include Beta
741
- end
742
- end
743
- end
744
-
745
- after do
746
- Object.remove_const(:Jesus)
747
- end
748
-
749
- it 'shows included module code' do
750
- t = pry_tester
751
- t.process_command "show-source Jesus::Beta"
752
- t.last_output.should =~ /alpha/
753
- end
754
-
755
- it 'shows warning when reverting to included module code' do
756
- t = pry_tester
757
- t.process_command "show-source Jesus::Beta"
758
- t.last_output.should =~ /Warning.*?Cannot find.*?Jesus::Beta.*Showing.*Jesus::Alpha instead/
759
- end
760
-
761
- it 'errors when module has no included module to show' do
762
- t = pry_tester
763
- lambda { t.process_command "show-source Jesus::Zeta" }.should.raise(Pry::CommandError).message.
764
- should =~ /Couldn't locate/
765
- end
766
-
767
- it 'shows nth level included module code (when no intermediary modules have code either)' do
768
- t = pry_tester
769
- t.process_command "show-source Jesus::Gamma"
770
- t.last_output.should =~ /alpha/
771
- end
772
-
773
- it 'shows correct warning when reverting to nth level included module' do
774
- t = pry_tester
775
- t.process_command "show-source Jesus::Gamma"
776
- t.last_output.should =~ /Warning.*?Cannot find.*?Jesus::Gamma.*Showing.*Jesus::Alpha instead/
777
- end
778
- end
779
- end
780
- end
781
- end
782
- end