pry 0.9.12.6-i386-mingw32 → 0.10.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 (187) 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 +19 -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 +6 -7
  20. data/lib/pry/commands/cat/file_formatter.rb +15 -32
  21. data/lib/pry/commands/cat/input_expression_formatter.rb +1 -1
  22. data/lib/pry/commands/cd.rb +14 -3
  23. data/lib/pry/commands/change_inspector.rb +27 -0
  24. data/lib/pry/commands/change_prompt.rb +26 -0
  25. data/lib/pry/commands/code_collector.rb +4 -4
  26. data/lib/pry/commands/easter_eggs.rb +3 -3
  27. data/lib/pry/commands/edit.rb +10 -22
  28. data/lib/pry/commands/edit/exception_patcher.rb +2 -2
  29. data/lib/pry/commands/edit/file_and_line_locator.rb +0 -2
  30. data/lib/pry/commands/exit_program.rb +0 -1
  31. data/lib/pry/commands/find_method.rb +16 -22
  32. data/lib/pry/commands/gem_install.rb +5 -2
  33. data/lib/pry/commands/gem_open.rb +1 -1
  34. data/lib/pry/commands/gist.rb +10 -11
  35. data/lib/pry/commands/help.rb +14 -14
  36. data/lib/pry/commands/hist.rb +27 -8
  37. data/lib/pry/commands/install_command.rb +14 -12
  38. data/lib/pry/commands/list_inspectors.rb +35 -0
  39. data/lib/pry/commands/list_prompts.rb +35 -0
  40. data/lib/pry/commands/ls.rb +72 -296
  41. data/lib/pry/commands/ls/constants.rb +47 -0
  42. data/lib/pry/commands/ls/formatter.rb +49 -0
  43. data/lib/pry/commands/ls/globals.rb +48 -0
  44. data/lib/pry/commands/ls/grep.rb +21 -0
  45. data/lib/pry/commands/ls/instance_vars.rb +39 -0
  46. data/lib/pry/commands/ls/interrogatable.rb +18 -0
  47. data/lib/pry/commands/ls/jruby_hacks.rb +49 -0
  48. data/lib/pry/commands/ls/local_names.rb +35 -0
  49. data/lib/pry/commands/ls/local_vars.rb +39 -0
  50. data/lib/pry/commands/ls/ls_entity.rb +70 -0
  51. data/lib/pry/commands/ls/methods.rb +57 -0
  52. data/lib/pry/commands/ls/methods_helper.rb +46 -0
  53. data/lib/pry/commands/ls/self_methods.rb +32 -0
  54. data/lib/pry/commands/play.rb +44 -10
  55. data/lib/pry/commands/pry_backtrace.rb +1 -2
  56. data/lib/pry/commands/raise_up.rb +2 -2
  57. data/lib/pry/commands/reload_code.rb +16 -19
  58. data/lib/pry/commands/ri.rb +7 -3
  59. data/lib/pry/commands/shell_command.rb +18 -13
  60. data/lib/pry/commands/shell_mode.rb +2 -4
  61. data/lib/pry/commands/show_doc.rb +5 -0
  62. data/lib/pry/commands/show_info.rb +8 -13
  63. data/lib/pry/commands/show_source.rb +15 -3
  64. data/lib/pry/commands/simple_prompt.rb +1 -1
  65. data/lib/pry/commands/toggle_color.rb +8 -4
  66. data/lib/pry/commands/watch_expression.rb +105 -0
  67. data/lib/pry/commands/watch_expression/expression.rb +38 -0
  68. data/lib/pry/commands/whereami.rb +18 -10
  69. data/lib/pry/commands/wtf.rb +3 -3
  70. data/lib/pry/config.rb +20 -254
  71. data/lib/pry/config/behavior.rb +139 -0
  72. data/lib/pry/config/convenience.rb +26 -0
  73. data/lib/pry/config/default.rb +165 -0
  74. data/lib/pry/core_extensions.rb +31 -21
  75. data/lib/pry/editor.rb +107 -103
  76. data/lib/pry/exceptions.rb +77 -0
  77. data/lib/pry/helpers/base_helpers.rb +22 -109
  78. data/lib/pry/helpers/command_helpers.rb +10 -8
  79. data/lib/pry/helpers/documentation_helpers.rb +1 -2
  80. data/lib/pry/helpers/text.rb +4 -5
  81. data/lib/pry/history.rb +46 -45
  82. data/lib/pry/history_array.rb +6 -1
  83. data/lib/pry/hooks.rb +9 -29
  84. data/lib/pry/indent.rb +6 -6
  85. data/lib/pry/input_completer.rb +242 -0
  86. data/lib/pry/input_lock.rb +132 -0
  87. data/lib/pry/inspector.rb +27 -0
  88. data/lib/pry/last_exception.rb +61 -0
  89. data/lib/pry/method.rb +82 -87
  90. data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +41 -38
  91. data/lib/pry/module_candidate.rb +4 -14
  92. data/lib/pry/object_path.rb +82 -0
  93. data/lib/pry/output.rb +50 -0
  94. data/lib/pry/pager.rb +193 -48
  95. data/lib/pry/plugins.rb +1 -1
  96. data/lib/pry/prompt.rb +26 -0
  97. data/lib/pry/pry_class.rb +149 -230
  98. data/lib/pry/pry_instance.rb +302 -413
  99. data/lib/pry/rbx_path.rb +1 -1
  100. data/lib/pry/repl.rb +202 -0
  101. data/lib/pry/repl_file_loader.rb +20 -26
  102. data/lib/pry/rubygem.rb +13 -5
  103. data/lib/pry/terminal.rb +2 -1
  104. data/lib/pry/test/helper.rb +26 -41
  105. data/lib/pry/version.rb +1 -1
  106. data/lib/pry/wrapped_module.rb +45 -59
  107. metadata +62 -225
  108. data/.document +0 -2
  109. data/.gitignore +0 -16
  110. data/.travis.yml +0 -25
  111. data/.yardopts +0 -1
  112. data/CHANGELOG +0 -534
  113. data/CONTRIBUTORS +0 -55
  114. data/Gemfile +0 -12
  115. data/Rakefile +0 -140
  116. data/TODO +0 -117
  117. data/lib/pry/completion.rb +0 -321
  118. data/lib/pry/custom_completions.rb +0 -6
  119. data/lib/pry/rbx_method.rb +0 -13
  120. data/man/pry.1 +0 -195
  121. data/man/pry.1.html +0 -204
  122. data/man/pry.1.ronn +0 -141
  123. data/pry.gemspec +0 -29
  124. data/spec/Procfile +0 -3
  125. data/spec/cli_spec.rb +0 -78
  126. data/spec/code_object_spec.rb +0 -277
  127. data/spec/code_spec.rb +0 -219
  128. data/spec/command_helpers_spec.rb +0 -29
  129. data/spec/command_integration_spec.rb +0 -644
  130. data/spec/command_set_spec.rb +0 -627
  131. data/spec/command_spec.rb +0 -821
  132. data/spec/commands/amend_line_spec.rb +0 -247
  133. data/spec/commands/bang_spec.rb +0 -19
  134. data/spec/commands/cat_spec.rb +0 -164
  135. data/spec/commands/cd_spec.rb +0 -250
  136. data/spec/commands/disable_pry_spec.rb +0 -25
  137. data/spec/commands/edit_spec.rb +0 -727
  138. data/spec/commands/exit_all_spec.rb +0 -34
  139. data/spec/commands/exit_program_spec.rb +0 -19
  140. data/spec/commands/exit_spec.rb +0 -34
  141. data/spec/commands/find_method_spec.rb +0 -70
  142. data/spec/commands/gem_list_spec.rb +0 -26
  143. data/spec/commands/gist_spec.rb +0 -79
  144. data/spec/commands/help_spec.rb +0 -56
  145. data/spec/commands/hist_spec.rb +0 -181
  146. data/spec/commands/jump_to_spec.rb +0 -15
  147. data/spec/commands/ls_spec.rb +0 -181
  148. data/spec/commands/play_spec.rb +0 -140
  149. data/spec/commands/raise_up_spec.rb +0 -56
  150. data/spec/commands/save_file_spec.rb +0 -177
  151. data/spec/commands/show_doc_spec.rb +0 -510
  152. data/spec/commands/show_input_spec.rb +0 -17
  153. data/spec/commands/show_source_spec.rb +0 -782
  154. data/spec/commands/whereami_spec.rb +0 -203
  155. data/spec/completion_spec.rb +0 -241
  156. data/spec/control_d_handler_spec.rb +0 -58
  157. data/spec/documentation_helper_spec.rb +0 -73
  158. data/spec/editor_spec.rb +0 -79
  159. data/spec/exception_whitelist_spec.rb +0 -21
  160. data/spec/fixtures/candidate_helper1.rb +0 -11
  161. data/spec/fixtures/candidate_helper2.rb +0 -8
  162. data/spec/fixtures/example.erb +0 -5
  163. data/spec/fixtures/example_nesting.rb +0 -33
  164. data/spec/fixtures/show_source_doc_examples.rb +0 -15
  165. data/spec/fixtures/testrc +0 -2
  166. data/spec/fixtures/testrcbad +0 -2
  167. data/spec/fixtures/whereami_helper.rb +0 -6
  168. data/spec/helper.rb +0 -34
  169. data/spec/helpers/bacon.rb +0 -86
  170. data/spec/helpers/mock_pry.rb +0 -43
  171. data/spec/helpers/table_spec.rb +0 -105
  172. data/spec/history_array_spec.rb +0 -67
  173. data/spec/hooks_spec.rb +0 -522
  174. data/spec/indent_spec.rb +0 -301
  175. data/spec/input_stack_spec.rb +0 -90
  176. data/spec/method_spec.rb +0 -482
  177. data/spec/prompt_spec.rb +0 -60
  178. data/spec/pry_defaults_spec.rb +0 -419
  179. data/spec/pry_history_spec.rb +0 -99
  180. data/spec/pry_output_spec.rb +0 -95
  181. data/spec/pry_spec.rb +0 -515
  182. data/spec/run_command_spec.rb +0 -25
  183. data/spec/sticky_locals_spec.rb +0 -157
  184. data/spec/syntax_checking_spec.rb +0 -81
  185. data/spec/wrapped_module_spec.rb +0 -261
  186. data/wiki/Customizing-pry.md +0 -397
  187. 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