pry 0.9.12.2 → 0.14.2

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 (237) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1141 -0
  3. data/LICENSE +2 -2
  4. data/README.md +466 -0
  5. data/bin/pry +4 -7
  6. data/lib/pry/basic_object.rb +10 -0
  7. data/lib/pry/block_command.rb +22 -0
  8. data/lib/pry/class_command.rb +194 -0
  9. data/lib/pry/cli.rb +97 -92
  10. data/lib/pry/code/code_file.rb +114 -0
  11. data/lib/pry/code/code_range.rb +7 -4
  12. data/lib/pry/code/loc.rb +27 -14
  13. data/lib/pry/code.rb +62 -90
  14. data/lib/pry/code_object.rb +83 -39
  15. data/lib/pry/color_printer.rb +66 -0
  16. data/lib/pry/command.rb +202 -371
  17. data/lib/pry/command_set.rb +151 -133
  18. data/lib/pry/command_state.rb +31 -0
  19. data/lib/pry/commands/amend_line.rb +86 -82
  20. data/lib/pry/commands/bang.rb +18 -14
  21. data/lib/pry/commands/bang_pry.rb +15 -11
  22. data/lib/pry/commands/cat/abstract_formatter.rb +23 -18
  23. data/lib/pry/commands/cat/exception_formatter.rb +85 -73
  24. data/lib/pry/commands/cat/file_formatter.rb +56 -63
  25. data/lib/pry/commands/cat/input_expression_formatter.rb +35 -30
  26. data/lib/pry/commands/cat.rb +64 -47
  27. data/lib/pry/commands/cd.rb +42 -26
  28. data/lib/pry/commands/change_inspector.rb +34 -0
  29. data/lib/pry/commands/change_prompt.rb +51 -0
  30. data/lib/pry/commands/clear_screen.rb +20 -0
  31. data/lib/pry/commands/code_collector.rb +148 -131
  32. data/lib/pry/commands/disable_pry.rb +23 -19
  33. data/lib/pry/commands/easter_eggs.rb +23 -34
  34. data/lib/pry/commands/edit/exception_patcher.rb +21 -17
  35. data/lib/pry/commands/edit/file_and_line_locator.rb +33 -24
  36. data/lib/pry/commands/edit.rb +183 -167
  37. data/lib/pry/commands/exit.rb +40 -35
  38. data/lib/pry/commands/exit_all.rb +24 -20
  39. data/lib/pry/commands/exit_program.rb +20 -17
  40. data/lib/pry/commands/find_method.rb +167 -167
  41. data/lib/pry/commands/fix_indent.rb +16 -12
  42. data/lib/pry/commands/help.rb +140 -133
  43. data/lib/pry/commands/hist.rb +153 -132
  44. data/lib/pry/commands/import_set.rb +20 -15
  45. data/lib/pry/commands/jump_to.rb +25 -21
  46. data/lib/pry/commands/list_inspectors.rb +42 -0
  47. data/lib/pry/commands/ls/constants.rb +75 -0
  48. data/lib/pry/commands/ls/formatter.rb +55 -0
  49. data/lib/pry/commands/ls/globals.rb +50 -0
  50. data/lib/pry/commands/ls/grep.rb +23 -0
  51. data/lib/pry/commands/ls/instance_vars.rb +40 -0
  52. data/lib/pry/commands/ls/interrogatable.rb +24 -0
  53. data/lib/pry/commands/ls/jruby_hacks.rb +55 -0
  54. data/lib/pry/commands/ls/local_names.rb +37 -0
  55. data/lib/pry/commands/ls/local_vars.rb +47 -0
  56. data/lib/pry/commands/ls/ls_entity.rb +65 -0
  57. data/lib/pry/commands/ls/methods.rb +55 -0
  58. data/lib/pry/commands/ls/methods_helper.rb +50 -0
  59. data/lib/pry/commands/ls/self_methods.rb +34 -0
  60. data/lib/pry/commands/ls.rb +100 -303
  61. data/lib/pry/commands/nesting.rb +21 -17
  62. data/lib/pry/commands/play.rb +93 -49
  63. data/lib/pry/commands/pry_backtrace.rb +22 -18
  64. data/lib/pry/commands/pry_version.rb +15 -11
  65. data/lib/pry/commands/raise_up.rb +33 -27
  66. data/lib/pry/commands/reload_code.rb +57 -48
  67. data/lib/pry/commands/reset.rb +16 -12
  68. data/lib/pry/commands/ri.rb +57 -38
  69. data/lib/pry/commands/save_file.rb +45 -43
  70. data/lib/pry/commands/shell_command.rb +66 -34
  71. data/lib/pry/commands/shell_mode.rb +22 -20
  72. data/lib/pry/commands/show_doc.rb +80 -65
  73. data/lib/pry/commands/show_info.rb +193 -159
  74. data/lib/pry/commands/show_input.rb +16 -11
  75. data/lib/pry/commands/show_source.rb +113 -33
  76. data/lib/pry/commands/stat.rb +35 -31
  77. data/lib/pry/commands/switch_to.rb +21 -15
  78. data/lib/pry/commands/toggle_color.rb +21 -13
  79. data/lib/pry/commands/watch_expression/expression.rb +43 -0
  80. data/lib/pry/commands/watch_expression.rb +110 -0
  81. data/lib/pry/commands/whereami.rb +157 -134
  82. data/lib/pry/commands/wtf.rb +78 -40
  83. data/lib/pry/config/attributable.rb +22 -0
  84. data/lib/pry/config/lazy_value.rb +29 -0
  85. data/lib/pry/config/memoized_value.rb +34 -0
  86. data/lib/pry/config/value.rb +24 -0
  87. data/lib/pry/config.rb +290 -220
  88. data/lib/pry/control_d_handler.rb +28 -0
  89. data/lib/pry/core_extensions.rb +50 -27
  90. data/lib/pry/editor.rb +130 -102
  91. data/lib/pry/env.rb +18 -0
  92. data/lib/pry/exception_handler.rb +43 -0
  93. data/lib/pry/exceptions.rb +73 -0
  94. data/lib/pry/forwardable.rb +27 -0
  95. data/lib/pry/helpers/base_helpers.rb +22 -151
  96. data/lib/pry/helpers/command_helpers.rb +55 -63
  97. data/lib/pry/helpers/documentation_helpers.rb +21 -13
  98. data/lib/pry/helpers/options_helpers.rb +15 -8
  99. data/lib/pry/helpers/platform.rb +55 -0
  100. data/lib/pry/helpers/table.rb +44 -32
  101. data/lib/pry/helpers/text.rb +96 -86
  102. data/lib/pry/helpers.rb +3 -0
  103. data/lib/pry/history.rb +101 -70
  104. data/lib/pry/hooks.rb +67 -137
  105. data/lib/pry/indent.rb +79 -73
  106. data/lib/pry/input_completer.rb +283 -0
  107. data/lib/pry/input_lock.rb +129 -0
  108. data/lib/pry/inspector.rb +39 -0
  109. data/lib/pry/last_exception.rb +61 -0
  110. data/lib/pry/method/disowned.rb +19 -5
  111. data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +51 -42
  112. data/lib/pry/method/weird_method_locator.rb +80 -44
  113. data/lib/pry/method.rb +225 -176
  114. data/lib/pry/object_path.rb +91 -0
  115. data/lib/pry/output.rb +136 -0
  116. data/lib/pry/pager.rb +227 -68
  117. data/lib/pry/prompt.rb +214 -0
  118. data/lib/pry/pry_class.rb +216 -289
  119. data/lib/pry/pry_instance.rb +438 -500
  120. data/lib/pry/repl.rb +256 -0
  121. data/lib/pry/repl_file_loader.rb +34 -35
  122. data/lib/pry/ring.rb +89 -0
  123. data/lib/pry/slop/LICENSE +20 -0
  124. data/lib/pry/slop/commands.rb +190 -0
  125. data/lib/pry/slop/option.rb +210 -0
  126. data/lib/pry/slop.rb +672 -0
  127. data/lib/pry/syntax_highlighter.rb +26 -0
  128. data/lib/pry/system_command_handler.rb +17 -0
  129. data/lib/pry/testable/evalable.rb +24 -0
  130. data/lib/pry/testable/mockable.rb +22 -0
  131. data/lib/pry/testable/pry_tester.rb +88 -0
  132. data/lib/pry/testable/utility.rb +34 -0
  133. data/lib/pry/testable/variables.rb +52 -0
  134. data/lib/pry/testable.rb +68 -0
  135. data/lib/pry/version.rb +3 -1
  136. data/lib/pry/warning.rb +20 -0
  137. data/lib/pry/{module_candidate.rb → wrapped_module/candidate.rb} +36 -43
  138. data/lib/pry/wrapped_module.rb +102 -103
  139. data/lib/pry.rb +135 -261
  140. metadata +94 -283
  141. data/.document +0 -2
  142. data/.gitignore +0 -16
  143. data/.travis.yml +0 -21
  144. data/.yardopts +0 -1
  145. data/CHANGELOG +0 -534
  146. data/CONTRIBUTORS +0 -55
  147. data/Gemfile +0 -9
  148. data/Guardfile +0 -62
  149. data/README.markdown +0 -400
  150. data/Rakefile +0 -140
  151. data/TODO +0 -117
  152. data/lib/pry/commands/disabled_commands.rb +0 -2
  153. data/lib/pry/commands/gem_cd.rb +0 -26
  154. data/lib/pry/commands/gem_install.rb +0 -29
  155. data/lib/pry/commands/gem_list.rb +0 -33
  156. data/lib/pry/commands/gem_open.rb +0 -29
  157. data/lib/pry/commands/gist.rb +0 -102
  158. data/lib/pry/commands/install_command.rb +0 -51
  159. data/lib/pry/commands/simple_prompt.rb +0 -22
  160. data/lib/pry/commands.rb +0 -6
  161. data/lib/pry/completion.rb +0 -304
  162. data/lib/pry/custom_completions.rb +0 -6
  163. data/lib/pry/history_array.rb +0 -116
  164. data/lib/pry/plugins.rb +0 -103
  165. data/lib/pry/rbx_method.rb +0 -13
  166. data/lib/pry/rbx_path.rb +0 -22
  167. data/lib/pry/rubygem.rb +0 -74
  168. data/lib/pry/terminal.rb +0 -78
  169. data/lib/pry/test/helper.rb +0 -185
  170. data/man/pry.1 +0 -195
  171. data/man/pry.1.html +0 -204
  172. data/man/pry.1.ronn +0 -141
  173. data/pry.gemspec +0 -30
  174. data/spec/Procfile +0 -3
  175. data/spec/cli_spec.rb +0 -78
  176. data/spec/code_object_spec.rb +0 -277
  177. data/spec/code_spec.rb +0 -219
  178. data/spec/command_helpers_spec.rb +0 -29
  179. data/spec/command_integration_spec.rb +0 -644
  180. data/spec/command_set_spec.rb +0 -627
  181. data/spec/command_spec.rb +0 -821
  182. data/spec/commands/amend_line_spec.rb +0 -247
  183. data/spec/commands/bang_spec.rb +0 -19
  184. data/spec/commands/cat_spec.rb +0 -164
  185. data/spec/commands/cd_spec.rb +0 -250
  186. data/spec/commands/disable_pry_spec.rb +0 -25
  187. data/spec/commands/edit_spec.rb +0 -727
  188. data/spec/commands/exit_all_spec.rb +0 -34
  189. data/spec/commands/exit_program_spec.rb +0 -19
  190. data/spec/commands/exit_spec.rb +0 -34
  191. data/spec/commands/find_method_spec.rb +0 -70
  192. data/spec/commands/gem_list_spec.rb +0 -26
  193. data/spec/commands/gist_spec.rb +0 -79
  194. data/spec/commands/help_spec.rb +0 -56
  195. data/spec/commands/hist_spec.rb +0 -181
  196. data/spec/commands/jump_to_spec.rb +0 -15
  197. data/spec/commands/ls_spec.rb +0 -181
  198. data/spec/commands/play_spec.rb +0 -140
  199. data/spec/commands/raise_up_spec.rb +0 -56
  200. data/spec/commands/save_file_spec.rb +0 -177
  201. data/spec/commands/show_doc_spec.rb +0 -510
  202. data/spec/commands/show_input_spec.rb +0 -17
  203. data/spec/commands/show_source_spec.rb +0 -782
  204. data/spec/commands/whereami_spec.rb +0 -203
  205. data/spec/completion_spec.rb +0 -239
  206. data/spec/control_d_handler_spec.rb +0 -58
  207. data/spec/documentation_helper_spec.rb +0 -73
  208. data/spec/editor_spec.rb +0 -79
  209. data/spec/exception_whitelist_spec.rb +0 -21
  210. data/spec/fixtures/candidate_helper1.rb +0 -11
  211. data/spec/fixtures/candidate_helper2.rb +0 -8
  212. data/spec/fixtures/example.erb +0 -5
  213. data/spec/fixtures/example_nesting.rb +0 -33
  214. data/spec/fixtures/show_source_doc_examples.rb +0 -15
  215. data/spec/fixtures/testrc +0 -2
  216. data/spec/fixtures/testrcbad +0 -2
  217. data/spec/fixtures/whereami_helper.rb +0 -6
  218. data/spec/helper.rb +0 -34
  219. data/spec/helpers/bacon.rb +0 -86
  220. data/spec/helpers/mock_pry.rb +0 -43
  221. data/spec/helpers/table_spec.rb +0 -105
  222. data/spec/history_array_spec.rb +0 -67
  223. data/spec/hooks_spec.rb +0 -522
  224. data/spec/indent_spec.rb +0 -301
  225. data/spec/input_stack_spec.rb +0 -90
  226. data/spec/method_spec.rb +0 -482
  227. data/spec/prompt_spec.rb +0 -60
  228. data/spec/pry_defaults_spec.rb +0 -419
  229. data/spec/pry_history_spec.rb +0 -99
  230. data/spec/pry_output_spec.rb +0 -95
  231. data/spec/pry_spec.rb +0 -504
  232. data/spec/run_command_spec.rb +0 -25
  233. data/spec/sticky_locals_spec.rb +0 -157
  234. data/spec/syntax_checking_spec.rb +0 -81
  235. data/spec/wrapped_module_spec.rb +0 -261
  236. data/wiki/Customizing-pry.md +0 -397
  237. data/wiki/Home.md +0 -4
data/spec/method_spec.rb DELETED
@@ -1,482 +0,0 @@
1
- require 'helper'
2
- require 'set'
3
-
4
- describe Pry::Method do
5
- it "should use String names for compatibility" do
6
- klass = Class.new { def hello; end }
7
- Pry::Method.new(klass.instance_method(:hello)).name.should == "hello"
8
- end
9
-
10
- describe ".from_str" do
11
- it 'should look up instance methods if no methods available and no options provided' do
12
- klass = Class.new { def hello; end }
13
- meth = Pry::Method.from_str(:hello, Pry.binding_for(klass))
14
- meth.should == klass.instance_method(:hello)
15
- end
16
-
17
- it 'should look up methods if no instance methods available and no options provided' do
18
- klass = Class.new { def self.hello; end }
19
- meth = Pry::Method.from_str(:hello, Pry.binding_for(klass))
20
- meth.should == klass.method(:hello)
21
- end
22
-
23
- it 'should look up instance methods first even if methods available and no options provided' do
24
- klass = Class.new { def hello; end; def self.hello; end }
25
- meth = Pry::Method.from_str(:hello, Pry.binding_for(klass))
26
- meth.should == klass.instance_method(:hello)
27
- end
28
-
29
- it 'should look up instance methods if "instance-methods" option provided' do
30
- klass = Class.new { def hello; end; def self.hello; end }
31
- meth = Pry::Method.from_str(:hello, Pry.binding_for(klass), {"instance-methods" => true})
32
- meth.should == klass.instance_method(:hello)
33
- end
34
-
35
- it 'should look up methods if :methods option provided' do
36
- klass = Class.new { def hello; end; def self.hello; end }
37
- meth = Pry::Method.from_str(:hello, Pry.binding_for(klass), {:methods => true})
38
- meth.should == klass.method(:hello)
39
- end
40
-
41
- it 'should look up instance methods using the Class#method syntax' do
42
- klass = Class.new { def hello; end; def self.hello; end }
43
- meth = Pry::Method.from_str("klass#hello", Pry.binding_for(binding))
44
- meth.should == klass.instance_method(:hello)
45
- end
46
-
47
- it 'should look up methods using the object.method syntax' do
48
- klass = Class.new { def hello; end; def self.hello; end }
49
- meth = Pry::Method.from_str("klass.hello", Pry.binding_for(binding))
50
- meth.should == klass.method(:hello)
51
- end
52
-
53
- it 'should NOT look up instance methods using the Class#method syntax if no instance methods defined' do
54
- klass = Class.new { def self.hello; end }
55
- meth = Pry::Method.from_str("klass#hello", Pry.binding_for(binding))
56
- meth.should == nil
57
- end
58
-
59
- it 'should NOT look up methods using the object.method syntax if no methods defined' do
60
- klass = Class.new { def hello; end }
61
- meth = Pry::Method.from_str("klass.hello", Pry.binding_for(binding))
62
- meth.should == nil
63
- end
64
-
65
- it 'should look up methods using klass.new.method syntax' do
66
- klass = Class.new { def hello; :hello; end }
67
- meth = Pry::Method.from_str("klass.new.hello", Pry.binding_for(binding))
68
- meth.name.should == "hello"
69
- end
70
-
71
- it 'should look up instance methods using klass.meth#method syntax' do
72
- klass = Class.new { def self.meth; Class.new; end }
73
- meth = Pry::Method.from_str("klass.meth#initialize", Pry.binding_for(binding))
74
- meth.name.should == "initialize"
75
- end
76
-
77
- it 'should look up methods using instance::bar syntax' do
78
- klass = Class.new{ def self.meth; Class.new; end }
79
- meth = Pry::Method.from_str("klass::meth", Pry.binding_for(binding))
80
- meth.name.should == "meth"
81
- end
82
-
83
- it 'should not raise an exception if receiver does not exist' do
84
- lambda { Pry::Method.from_str("random_klass.meth", Pry.binding_for(binding)) }.should.not.raise
85
- end
86
- end
87
-
88
- describe '.from_binding' do
89
- it 'should be able to pick a method out of a binding' do
90
- Pry::Method.from_binding(Class.new{ def self.foo; binding; end }.foo).name.should == "foo"
91
- end
92
-
93
- it 'should NOT find a method from the toplevel binding' do
94
- Pry::Method.from_binding(TOPLEVEL_BINDING).should == nil
95
- end
96
-
97
- it "should find methods that have been undef'd" do
98
- c = Class.new do
99
- def self.bar
100
- class << self; undef bar; end
101
- binding
102
- end
103
- end
104
-
105
- m = Pry::Method.from_binding(c.bar)
106
- m.name.should == "bar"
107
- end
108
-
109
- # Our source_location trick doesn't work, due to https://github.com/rubinius/rubinius/issues/953
110
- unless Pry::Helpers::BaseHelpers.rbx?
111
- it 'should find the super method correctly' do
112
- a = Class.new{ def gag33; binding; end; def self.line; __LINE__; end }
113
- b = Class.new(a){ def gag33; super; end }
114
-
115
- g = b.new.gag33
116
- m = Pry::Method.from_binding(g)
117
-
118
- m.owner.should == a
119
- m.source_line.should == a.line
120
- m.name.should == "gag33"
121
- end
122
- end
123
-
124
- it 'should find the right method if a super method exists' do
125
- a = Class.new{ def gag; binding; end; }
126
- b = Class.new(a){ def gag; super; binding; end; def self.line; __LINE__; end }
127
-
128
- m = Pry::Method.from_binding(b.new.gag)
129
-
130
- m.owner.should == b
131
- m.source_line.should == b.line
132
- m.name.should == "gag"
133
- end
134
-
135
- if defined?(BasicObject) && !Pry::Helpers::BaseHelpers.rbx? # rubinius issue 1921
136
- it "should find the right method from a BasicObject" do
137
- a = Class.new(BasicObject) { def gag; ::Kernel.binding; end; def self.line; __LINE__; end }
138
-
139
- m = Pry::Method.from_binding(a.new.gag)
140
- m.owner.should == a
141
- m.source_file.should == __FILE__
142
- m.source_line.should == a.line
143
- end
144
- end
145
-
146
- it 'should find the right method even if it was renamed and replaced' do
147
- o = Object.new
148
- class << o
149
- def borscht
150
- "nips"
151
- binding
152
- end
153
- alias paella borscht
154
- def borscht() paella end
155
- end
156
-
157
- m = Pry::Method.from_binding(o.borscht)
158
- m.source.should == Pry::Method(o.method(:paella)).source
159
- end
160
- end
161
-
162
- describe 'super' do
163
- it 'should be able to find the super method on a bound method' do
164
- a = Class.new{ def rar; 4; end }
165
- b = Class.new(a){ def rar; super; end }
166
-
167
- obj = b.new
168
-
169
- zuper = Pry::Method(obj.method(:rar)).super
170
- zuper.owner.should == a
171
- zuper.receiver.should == obj
172
- end
173
-
174
- it 'should be able to find the super method of an unbound method' do
175
- a = Class.new{ def rar; 4; end }
176
- b = Class.new(a){ def rar; super; end }
177
-
178
- zuper = Pry::Method(b.instance_method(:rar)).super
179
- zuper.owner.should == a
180
- end
181
-
182
- it 'should return nil if no super method exists' do
183
- a = Class.new{ def rar; super; end }
184
-
185
- Pry::Method(a.instance_method(:rar)).super.should == nil
186
- end
187
-
188
- it 'should be able to find super methods defined on modules' do
189
- m = Module.new{ def rar; 4; end }
190
- a = Class.new{ def rar; super; end; include m }
191
-
192
- zuper = Pry::Method(a.new.method(:rar)).super
193
- zuper.owner.should == m
194
- end
195
-
196
- it 'should be able to find super methods defined on super-classes when there are modules in the way' do
197
- a = Class.new{ def rar; 4; end }
198
- m = Module.new{ def mooo; 4; end }
199
- b = Class.new(a){ def rar; super; end; include m }
200
-
201
- zuper = Pry::Method(b.new.method(:rar)).super
202
- zuper.owner.should == a
203
- end
204
-
205
- it 'should be able to jump up multiple levels of bound method, even through modules' do
206
- a = Class.new{ def rar; 4; end }
207
- m = Module.new{ def rar; 4; end }
208
- b = Class.new(a){ def rar; super; end; include m }
209
-
210
- zuper = Pry::Method(b.new.method(:rar)).super
211
- zuper.owner.should == m
212
- zuper.super.owner.should == a
213
- end
214
- end
215
-
216
- describe 'all_from_class' do
217
- def should_find_method(name)
218
- Pry::Method.all_from_class(@class).map(&:name).should.include(name)
219
- end
220
-
221
- it 'should be able to find public instance methods defined in a class' do
222
- @class = Class.new{ def meth; 1; end }
223
- should_find_method('meth')
224
- end
225
-
226
- it 'should be able to find private and protected instance methods defined in a class' do
227
- @class = Class.new { protected; def prot; 1; end; private; def priv; 1; end }
228
- should_find_method('priv')
229
- should_find_method('prot')
230
- end
231
-
232
- it 'should find methods all the way up to Kernel' do
233
- @class = Class.new
234
- should_find_method('exit!')
235
- end
236
-
237
- it 'should be able to find instance methods defined in a super-class' do
238
- @class = Class.new(Class.new{ def meth; 1; end }) {}
239
- should_find_method('meth')
240
- end
241
-
242
- it 'should be able to find instance methods defined in modules included into this class' do
243
- @class = Class.new{ include Module.new{ def meth; 1; end; } }
244
- should_find_method('meth')
245
- end
246
-
247
- it 'should be able to find instance methods defined in modules included into super-classes' do
248
- @class = Class.new(Class.new{ include Module.new{ def meth; 1; end; } })
249
- should_find_method('meth')
250
- end
251
-
252
- it 'should attribute overridden methods to the sub-class' do
253
- @class = Class.new(Class.new{ include Module.new{ def meth; 1; end; } }) { def meth; 2; end }
254
- Pry::Method.all_from_class(@class).detect{ |x| x.name == 'meth' }.owner.should == @class
255
- end
256
-
257
- it 'should be able to find methods defined on a singleton class' do
258
- @class = (class << Object.new; def meth; 1; end; self; end)
259
- should_find_method('meth')
260
- end
261
-
262
- it 'should be able to find methods on super-classes when given a singleton class' do
263
- @class = (class << Class.new{ def meth; 1; end}.new; self; end)
264
- should_find_method('meth')
265
- end
266
- end
267
-
268
- describe 'all_from_obj' do
269
- describe 'on normal objects' do
270
- def should_find_method(name)
271
- Pry::Method.all_from_obj(@obj).map(&:name).should.include(name)
272
- end
273
-
274
- it "should find methods defined in the object's class" do
275
- @obj = Class.new{ def meth; 1; end }.new
276
- should_find_method('meth')
277
- end
278
-
279
- it "should find methods defined in modules included into the object's class" do
280
- @obj = Class.new{ include Module.new{ def meth; 1; end } }.new
281
- should_find_method('meth')
282
- end
283
-
284
- it "should find methods defined in the object's singleton class" do
285
- @obj = Object.new
286
- class << @obj; def meth; 1; end; end
287
- should_find_method('meth')
288
- end
289
-
290
- it "should find methods in modules included into the object's singleton class" do
291
- @obj = Object.new
292
- @obj.extend Module.new{ def meth; 1; end }
293
- should_find_method('meth')
294
- end
295
-
296
- it "should find methods all the way up to Kernel" do
297
- @obj = Object.new
298
- should_find_method('exit!')
299
- end
300
-
301
- it "should not find methods defined on the classes singleton class" do
302
- @obj = Class.new{ class << self; def meth; 1; end; end }.new
303
- Pry::Method.all_from_obj(@obj).map(&:name).should.not.include('meth')
304
- end
305
-
306
- it "should work in the face of an overridden send" do
307
- @obj = Class.new{ def meth; 1; end; def send; raise EOFError; end }.new
308
- should_find_method('meth')
309
- end
310
- end
311
-
312
- describe 'on classes' do
313
- def should_find_method(name)
314
- Pry::Method.all_from_obj(@class).map(&:name).should.include(name)
315
- end
316
-
317
- it "should find methods defined in the class' singleton class" do
318
- @class = Class.new{ class << self; def meth; 1; end; end }
319
- should_find_method('meth')
320
- end
321
-
322
- it "should find methods defined on modules extended into the class" do
323
- @class = Class.new{ extend Module.new{ def meth; 1; end; } }
324
- should_find_method('meth')
325
- end
326
-
327
- it "should find methods defined on the singleton class of super-classes" do
328
- @class = Class.new(Class.new{ class << self; def meth; 1; end; end })
329
- should_find_method('meth')
330
- end
331
-
332
- it "should not find methods defined within the class" do
333
- @class = Class.new{ def meth; 1; end }
334
- Pry::Method.all_from_obj(@obj).map(&:name).should.not.include('meth')
335
- end
336
-
337
- it "should find methods defined on Class" do
338
- @class = Class.new
339
- should_find_method('allocate')
340
- end
341
-
342
- it "should find methods defined on Kernel" do
343
- @class = Class.new
344
- should_find_method('exit!')
345
- end
346
-
347
- it "should attribute overridden methods to the sub-class' singleton class" do
348
- @class = Class.new(Class.new{ class << self; def meth; 1; end; end }) { class << self; def meth; 1; end; end }
349
- Pry::Method.all_from_obj(@class).detect{ |x| x.name == 'meth' }.owner.should == (class << @class; self; end)
350
- end
351
-
352
- it "should attrbute overridden methods to the class not the module" do
353
- @class = Class.new { class << self; def meth; 1; end; end; extend Module.new{ def meth; 1; end; } }
354
- Pry::Method.all_from_obj(@class).detect{ |x| x.name == 'meth' }.owner.should == (class << @class; self; end)
355
- end
356
-
357
- it "should attribute overridden methods to the relevant singleton class in preference to Class" do
358
- @class = Class.new { class << self; def allocate; 1; end; end }
359
- Pry::Method.all_from_obj(@class).detect{ |x| x.name == 'allocate' }.owner.should == (class << @class; self; end)
360
- end
361
- end
362
-
363
- describe 'method resolution order' do
364
- module LS
365
- class Top; end
366
-
367
- class Next < Top; end
368
-
369
- module M; end
370
- module N; include M; end
371
- module O; include M; end
372
- module P; end
373
-
374
- class Low < Next; include N; include P; end
375
- class Lower < Low; extend N; end
376
- class Bottom < Lower; extend O; end
377
- end
378
-
379
- def singleton_class(obj); class << obj; self; end; end
380
-
381
- it "should look at a class and then its superclass" do
382
- Pry::Method.instance_resolution_order(LS::Next).should == [LS::Next] + Pry::Method.instance_resolution_order(LS::Top)
383
- end
384
-
385
- it "should include the included modules between a class and its superclass" do
386
- Pry::Method.instance_resolution_order(LS::Low).should == [LS::Low, LS::P, LS::N, LS::M] + Pry::Method.instance_resolution_order(LS::Next)
387
- end
388
-
389
- it "should not include modules extended into the class" do
390
- Pry::Method.instance_resolution_order(LS::Bottom).should == [LS::Bottom] + Pry::Method.instance_resolution_order(LS::Lower)
391
- end
392
-
393
- it "should include included modules for Modules" do
394
- Pry::Method.instance_resolution_order(LS::O).should == [LS::O, LS::M]
395
- end
396
-
397
- it "should include the singleton class of objects" do
398
- obj = LS::Low.new
399
- Pry::Method.resolution_order(obj).should == [singleton_class(obj)] + Pry::Method.instance_resolution_order(LS::Low)
400
- end
401
-
402
- it "should not include singleton classes of numbers" do
403
- Pry::Method.resolution_order(4).should == Pry::Method.instance_resolution_order(Fixnum)
404
- end
405
-
406
- it "should include singleton classes for classes" do
407
- Pry::Method.resolution_order(LS::Low).should == [singleton_class(LS::Low)] + Pry::Method.resolution_order(LS::Next)
408
- end
409
-
410
- it "should include modules included into singleton classes" do
411
- Pry::Method.resolution_order(LS::Lower).should == [singleton_class(LS::Lower), LS::N, LS::M] + Pry::Method.resolution_order(LS::Low)
412
- end
413
-
414
- it "should include modules at most once" do
415
- Pry::Method.resolution_order(LS::Bottom).count(LS::M).should == 1
416
- end
417
-
418
- it "should include modules at the point which they would be reached" do
419
- Pry::Method.resolution_order(LS::Bottom).should == [singleton_class(LS::Bottom), LS::O] + (Pry::Method.resolution_order(LS::Lower))
420
- end
421
-
422
- it "should include the Pry::Method.instance_resolution_order of Class after the singleton classes" do
423
- Pry::Method.resolution_order(LS::Top).should ==
424
- [singleton_class(LS::Top), singleton_class(Object), (defined? BasicObject) && singleton_class(BasicObject)].compact +
425
- Pry::Method.instance_resolution_order(Class)
426
- end
427
- end
428
- end
429
-
430
- describe 'method_name_from_first_line' do
431
- it 'should work in all simple cases' do
432
- meth = Pry::Method.new(nil)
433
- meth.send(:method_name_from_first_line, "def x").should == "x"
434
- meth.send(:method_name_from_first_line, "def self.x").should == "x"
435
- meth.send(:method_name_from_first_line, "def ClassName.x").should == "x"
436
- meth.send(:method_name_from_first_line, "def obj_name.x").should == "x"
437
- end
438
- end
439
-
440
- describe 'method aliases' do
441
- before do
442
- @class = Class.new {
443
- def eat
444
- end
445
-
446
- alias fress eat
447
- alias_method :omnomnom, :fress
448
-
449
- def eruct
450
- end
451
- }
452
- end
453
-
454
- it 'should be able to find method aliases' do
455
- meth = Pry::Method(@class.new.method(:eat))
456
- aliases = Set.new(meth.aliases)
457
-
458
- aliases.should == Set.new(["fress", "omnomnom"])
459
- end
460
-
461
- it 'should return an empty Array if cannot find aliases' do
462
- meth = Pry::Method(@class.new.method(:eruct))
463
- meth.aliases.should.be.empty
464
- end
465
-
466
- it 'should not include the own name in the list of aliases' do
467
- meth = Pry::Method(@class.new.method(:eat))
468
- meth.aliases.should.not.include "eat"
469
- end
470
-
471
- unless Pry::Helpers::BaseHelpers.mri_18?
472
- # Ruby 1.8 doesn't support this feature.
473
- it 'should be able to find aliases for methods implemented in C' do
474
- meth = Pry::Method(Hash.new.method(:key?))
475
- aliases = Set.new(meth.aliases)
476
-
477
- aliases.should == Set.new(["include?", "member?", "has_key?"])
478
- end
479
- end
480
-
481
- end
482
- end
data/spec/prompt_spec.rb DELETED
@@ -1,60 +0,0 @@
1
- require 'helper'
2
-
3
- describe "Prompts" do
4
- describe "one-parameter prompt proc" do
5
- it 'should get full config object' do
6
- config = nil
7
- redirect_pry_io(InputTester.new("exit-all")) do
8
- Pry.start(self, :prompt => proc { |v| config = v })
9
- end
10
- config.is_a?(OpenStruct).should == true
11
- end
12
-
13
- it 'should get full config object, when using a proc array' do
14
- config1 = nil
15
- redirect_pry_io(InputTester.new("exit-all")) do
16
- Pry.start(self, :prompt => [proc { |v| config1 = v }, proc { |v| config2 = v }])
17
- end
18
- config1.is_a?(OpenStruct).should == true
19
- end
20
-
21
- it 'should receive correct data in the config object' do
22
- config = nil
23
- redirect_pry_io(InputTester.new("def hello", "exit-all")) do
24
- Pry.start(self, :prompt => proc { |v| config = v })
25
- end
26
- config.eval_string.should =~ /def hello/
27
- config.nesting_level.should == 0
28
- config.expr_number.should == 1
29
- config.cont.should == true
30
- config._pry_.is_a?(Pry).should == true
31
- config.object.should == self
32
- end
33
- end
34
-
35
- describe "BACKWARDS COMPATIBILITY: 3 parameter prompt proc" do
36
- it 'should get 3 parameters' do
37
- o = n = p = nil
38
- redirect_pry_io(InputTester.new("exit-all")) do
39
- Pry.start(:test, :prompt => proc { |obj, nesting, _pry_|
40
- o, n, p = obj, nesting, _pry_ })
41
- end
42
- o.should == :test
43
- n.should == 0
44
- p.is_a?(Pry).should == true
45
- end
46
-
47
- it 'should get 3 parameters, when using proc array' do
48
- o1 = n1 = p1 = nil
49
- redirect_pry_io(InputTester.new("exit-all")) do
50
- Pry.start(:test, :prompt => [proc { |obj, nesting, _pry_|
51
- o1, n1, p1 = obj, nesting, _pry_ },
52
- proc { |obj, nesting, _pry_|
53
- o2, n2, p2 = obj, nesting, _pry_ }])
54
- end
55
- o1.should == :test
56
- n1.should == 0
57
- p1.is_a?(Pry).should == true
58
- end
59
- end
60
- end