pry 0.9.6.1-i386-mswin32 → 0.9.6.2-i386-mswin32

Sign up to get free protection for your applications and to get access to all the features.
@@ -61,8 +61,8 @@ class Pry
61
61
  start_line = (ex_line - 1) - window_size
62
62
  start_line = start_line < 0 ? 0 : start_line
63
63
  end_line = (ex_line - 1) + window_size
64
- if ex_file && RbxPath.is_core_path?(ex_file)
65
- file_name = RbxPath.convert_path_to_full(ex_file)
64
+ if ex_file && is_core_rbx_path?(ex_file)
65
+ file_name = rbx_convert_path_to_full(ex_file)
66
66
  else
67
67
  file_name = ex_file
68
68
  end
@@ -4,8 +4,12 @@ class Pry
4
4
  Experimental = Pry::CommandSet.new do
5
5
 
6
6
  command "reload-method", "Reload the source specifically for a method", :requires_gem => "method_reload" do |meth_name|
7
- meth = get_method_or_print_error(meth_name, target, {}, :no_cmd)
8
- meth.reload if meth
7
+ if (meth = get_method_object(meth_name, target, {})).nil?
8
+ output.puts "Invalid method name: #{meth_name}."
9
+ next
10
+ end
11
+
12
+ meth.reload
9
13
  end
10
14
  end
11
15
  end
@@ -35,7 +35,7 @@ class Pry
35
35
  end
36
36
 
37
37
  def set_file_and_dir_locals(file_name)
38
- return if !target or !file_name
38
+ return if !target
39
39
  _pry_.last_file = File.expand_path(file_name)
40
40
  _pry_.inject_local("_file_", _pry_.last_file, target)
41
41
 
@@ -5,6 +5,15 @@ class Pry
5
5
 
6
6
  module_function
7
7
 
8
+ def meth_name_from_binding(b)
9
+ meth_name = b.eval('__method__')
10
+ if [:__script__, nil, :__binding__, :__binding_impl__].include?(meth_name)
11
+ nil
12
+ else
13
+ meth_name
14
+ end
15
+ end
16
+
8
17
  # if start_line is not false then add line numbers starting with start_line
9
18
  def render_output(should_flood, start_line, text, color=:blue)
10
19
  if start_line
@@ -18,6 +27,18 @@ class Pry
18
27
  end
19
28
  end
20
29
 
30
+ def is_a_dynamically_defined_method?(meth)
31
+ file, _ = meth.source_location
32
+ !!(file =~ /(\(.*\))|<.*>/)
33
+ end
34
+
35
+ def check_for_dynamically_defined_method(meth)
36
+ file, _ = meth.source_location
37
+ if file =~ /(\(.*\))|<.*>/ && file != Pry.eval_path
38
+ raise "Cannot retrieve source for dynamically defined method."
39
+ end
40
+ end
41
+
21
42
  # Open a temp file and yield it to the block, closing it after
22
43
  # @return [String] The path of the temp file
23
44
  def temp_file
@@ -27,28 +48,225 @@ class Pry
27
48
  file.close
28
49
  end
29
50
 
30
- def get_method_or_print_error(name, target, opts={}, omit_cmd=false)
31
- if (meth = Pry::Method.from_str(name, target, opts))
32
- set_file_and_dir_locals(meth.source_file)
33
- meth
51
+ ########### RBX HELPERS #############
52
+ def is_core_rbx_path?(path)
53
+ rbx? &&
54
+ path.start_with?("kernel")
55
+ end
56
+
57
+ def rbx_core?(meth)
58
+ meth.source_location &&
59
+ is_core_rbx_path?(meth.source_location.first)
60
+ end
61
+
62
+ def rvm_ruby?(path)
63
+ !!(path =~ /\.rvm/)
64
+ end
65
+
66
+ def rbx_core_code_for(meth)
67
+ rbx_core_code_or_doc_for(meth, :code)
68
+ end
69
+
70
+ def rbx_core_doc_for(meth)
71
+ rbx_core_code_or_doc_for(meth, :doc)
72
+ end
73
+
74
+ def rbx_core_code_or_doc_for(meth, code_or_doc)
75
+ path_line = rbx_core_path_line_for(meth)
76
+
77
+ case code_or_doc
78
+ when :code
79
+ MethodSource.source_helper(path_line)
80
+ when :doc
81
+ MethodSource.comment_helper(path_line)
82
+ end
83
+ end
84
+
85
+ def rbx_convert_path_to_full(path)
86
+ if rvm_ruby?(Rubinius::BIN_PATH)
87
+ rbx_rvm_convert_path_to_full(path)
88
+ else
89
+ rbx_std_convert_path_to_full(path)
90
+ end
91
+ end
92
+
93
+ def rbx_rvm_convert_path_to_full(path)
94
+ ruby_name = File.dirname(Rubinius::BIN_PATH).split("/").last
95
+ source_path = File.join(File.dirname(File.dirname(File.dirname(Rubinius::BIN_PATH))), "src", ruby_name)
96
+ file_name = File.join(source_path, path)
97
+ raise "Cannot find rbx core source" if !File.exists?(file_name)
98
+ file_name
99
+ end
100
+
101
+ def rbx_std_convert_path_to_full(path)
102
+ file_name = File.join(Rubinius::BIN_PATH, "..", path)
103
+ raise "Cannot find rbx core source" if !File.exists?(file_name)
104
+ file_name
105
+ end
106
+
107
+ def rbx_core_path_line_for(meth)
108
+ if rvm_ruby?(Rubinius::BIN_PATH)
109
+ rvm_rbx_core_path_line_for(meth)
110
+ else
111
+ std_rbx_core_path_line_for(meth)
112
+ end
113
+ end
114
+
115
+ def std_rbx_core_path_line_for(meth)
116
+ file_name = rbx_std_convert_path_to_full(meth.source_location.first)
117
+ start_line = meth.source_location.last
118
+
119
+ [file_name, start_line]
120
+ end
121
+
122
+ def rvm_rbx_core_path_line_for(meth)
123
+ file_name = rbx_rvm_convert_path_to_full(meth.source_location.first)
124
+ start_line = meth.source_location.last
125
+
126
+ [file_name, start_line]
127
+ end
128
+
129
+ ######### END RBX HELPERS ###############
130
+
131
+ def code_and_code_type_for(meth)
132
+ case code_type = code_type_for(meth)
133
+ when nil
134
+ return nil
135
+ when :c
136
+ code = Pry::MethodInfo.info_for(meth).source
137
+ code = strip_comments_from_c_code(code)
138
+ when :ruby
139
+ if meth.source_location.first == Pry.eval_path
140
+ start_line = meth.source_location.last
141
+
142
+ # FIXME this line below needs to be refactored, WAY too
143
+ # much of a hack. We pass nothing to prompt because if
144
+ # prompt uses #inspect (or #pretty_inspect) on the context
145
+ # it can hang the session if the object being inspected on
146
+ # is enormous see: https://github.com/pry/pry/issues/245
147
+ p = Pry.new(:input => StringIO.new(Pry.line_buffer[start_line..-1].join), :prompt => proc {""}, :hooks => {}).r(target)
148
+ code = strip_leading_whitespace(p)
149
+ else
150
+ if rbx_core?(meth)
151
+ code = strip_leading_whitespace(rbx_core_code_for(meth))
152
+ else
153
+ code = strip_leading_whitespace(meth.source)
154
+ end
155
+ end
156
+ set_file_and_dir_locals(path_line_for(meth).first)
157
+ end
158
+
159
+ [code, code_type]
160
+ end
161
+
162
+ def doc_and_code_type_for(meth)
163
+ case code_type = code_type_for(meth)
164
+ when nil
165
+ return nil
166
+ when :c
167
+ doc = Pry::MethodInfo.info_for(meth).docstring
168
+ when :ruby
169
+ if rbx_core?(meth)
170
+ doc = strip_leading_hash_and_whitespace_from_ruby_comments(rbx_core_doc_for(meth))
171
+ else
172
+ doc = strip_leading_hash_and_whitespace_from_ruby_comments(meth.comment)
173
+ end
174
+ set_file_and_dir_locals(path_line_for(meth).first)
175
+ end
176
+
177
+ [doc, code_type]
178
+ end
179
+
180
+ def get_method_object(meth_name, target=nil, options={})
181
+ get_method_object_from_target(*get_method_attributes(meth_name, target, options)) rescue nil
182
+ end
183
+
184
+ def get_method_attributes(meth_name, target=nil, options={})
185
+ if meth_name
186
+ if meth_name =~ /(\S+)\#(\S+)\Z/
187
+ context, meth_name = $1, $2
188
+ target = Pry.binding_for(target.eval(context))
189
+ type = :instance
190
+ elsif meth_name =~ /(\S+)\.(\S+)\Z/
191
+ context, meth_name = $1, $2
192
+ target = Pry.binding_for(target.eval(context))
193
+ type = :singleton
194
+ elsif options["instance_methods"]
195
+ type = :instance
196
+ elsif options[:methods]
197
+ type = :singleton
198
+ else
199
+ type = nil
200
+ end
34
201
  else
35
- # FIXME: better/more accurate error handling
36
- output.print "Invalid method name: #{name}."
37
- output.print " Type `#{command_name} --help` for help." unless omit_cmd
38
- output.puts
202
+ meth_name = meth_name_from_binding(target)
203
+ type = nil
39
204
  end
205
+ [meth_name, target, type]
40
206
  end
41
207
 
42
- def make_header(meth, content=meth.source)
43
- code_type = meth.source_type
208
+ def get_method_object_from_target(meth_name, target, type=nil)
209
+ case type
210
+ when :instance
211
+ target.eval("instance_method(:#{meth_name})") rescue nil
212
+ when :singleton
213
+ target.eval("method(:#{meth_name})") rescue nil
214
+ else
215
+ get_method_object_from_target(meth_name, target, :instance) ||
216
+ get_method_object_from_target(meth_name, target, :singleton)
217
+ end
218
+ end
219
+
220
+ def path_line_for(meth)
221
+ if rbx_core?(meth)
222
+ rbx_core_path_line_for(meth)
223
+ else
224
+ meth.source_location
225
+ end
226
+ end
227
+
228
+ def make_header(meth, code_type, content)
44
229
  num_lines = "Number of lines: #{Pry::Helpers::Text.bold(content.each_line.count.to_s)}"
45
230
  case code_type
46
- when :c
231
+ when :ruby
232
+ file, line = path_line_for(meth)
233
+ "\n#{Pry::Helpers::Text.bold('From:')} #{file} @ line #{line}:\n#{num_lines}\n\n"
234
+ else
47
235
  file = Pry::MethodInfo.info_for(meth).file
48
236
  "\n#{Pry::Helpers::Text.bold('From:')} #{file} in Ruby Core (C Method):\n#{num_lines}\n\n"
49
237
  end
50
238
  end
51
239
 
240
+ def is_a_c_method?(meth)
241
+ meth.source_location.nil?
242
+ end
243
+
244
+ def should_use_pry_doc?(meth)
245
+ Pry.config.has_pry_doc && is_a_c_method?(meth)
246
+ end
247
+
248
+ def code_type_for(meth)
249
+ # only C methods
250
+ if should_use_pry_doc?(meth)
251
+ info = Pry::MethodInfo.info_for(meth)
252
+ if info && info.source
253
+ code_type = :c
254
+ else
255
+ output.puts "Cannot find C method: #{meth.name}"
256
+ code_type = nil
257
+ end
258
+ else
259
+ if is_a_c_method?(meth)
260
+ output.puts "Cannot locate this method: #{meth.name}. Try `gem install pry-doc` to get access to Ruby Core documentation."
261
+ code_type = nil
262
+ else
263
+ check_for_dynamically_defined_method(meth)
264
+ code_type = :ruby
265
+ end
266
+ end
267
+ code_type
268
+ end
269
+
52
270
  def file_map
53
271
  {
54
272
  [".c", ".h"] => :c,
@@ -139,6 +357,24 @@ class Pry
139
357
  process_yardoc process_rdoc(comment, code_type)
140
358
  end
141
359
 
360
+ # strip leading whitespace but preserve indentation
361
+ def strip_leading_whitespace(text)
362
+ return text if text.empty?
363
+ leading_spaces = text.lines.first[/^(\s+)/, 1]
364
+ text.gsub(/^#{leading_spaces}/, '')
365
+ end
366
+
367
+ def strip_leading_hash_and_whitespace_from_ruby_comments(comment)
368
+ comment = comment.dup
369
+ comment.gsub!(/\A\#+?$/, '')
370
+ comment.gsub!(/^\s*#/, '')
371
+ strip_leading_whitespace(comment)
372
+ end
373
+
374
+ def strip_comments_from_c_code(code)
375
+ code.sub(/\A\s*\/\*.*?\*\/\s*/m, '')
376
+ end
377
+
142
378
  def invoke_editor(file, line)
143
379
  if Pry.config.editor.respond_to?(:call)
144
380
  editor_invocation = Pry.config.editor.call(file, line)
@@ -1,3 +1,3 @@
1
1
  class Pry
2
- VERSION = "0.9.6.1"
2
+ VERSION = "0.9.6.2"
3
3
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{pry}
5
- s.version = "0.9.6.1"
5
+ s.version = "0.9.6.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = [%q{John Mair (banisterfiend)}]
@@ -10,39 +10,39 @@ Gem::Specification.new do |s|
10
10
  s.description = %q{An IRB alternative and runtime developer console}
11
11
  s.email = %q{jrmair@gmail.com}
12
12
  s.executables = [%q{pry}]
13
- s.files = [%q{.document}, %q{.gemtest}, %q{.gitignore}, %q{.travis.yml}, %q{.yardopts}, %q{CHANGELOG}, %q{CONTRIBUTORS}, %q{Gemfile}, %q{LICENSE}, %q{README.markdown}, %q{Rakefile}, %q{TODO}, %q{bin/pry}, %q{examples/example_basic.rb}, %q{examples/example_command_override.rb}, %q{examples/example_commands.rb}, %q{examples/example_hooks.rb}, %q{examples/example_image_edit.rb}, %q{examples/example_input.rb}, %q{examples/example_input2.rb}, %q{examples/example_output.rb}, %q{examples/example_print.rb}, %q{examples/example_prompt.rb}, %q{examples/helper.rb}, %q{lib/pry.rb}, %q{lib/pry/command_context.rb}, %q{lib/pry/command_processor.rb}, %q{lib/pry/command_set.rb}, %q{lib/pry/commands.rb}, %q{lib/pry/completion.rb}, %q{lib/pry/config.rb}, %q{lib/pry/core_extensions.rb}, %q{lib/pry/custom_completions.rb}, %q{lib/pry/default_commands/basic.rb}, %q{lib/pry/default_commands/context.rb}, %q{lib/pry/default_commands/documentation.rb}, %q{lib/pry/default_commands/easter_eggs.rb}, %q{lib/pry/default_commands/gems.rb}, %q{lib/pry/default_commands/input.rb}, %q{lib/pry/default_commands/introspection.rb}, %q{lib/pry/default_commands/ls.rb}, %q{lib/pry/default_commands/shell.rb}, %q{lib/pry/extended_commands/experimental.rb}, %q{lib/pry/extended_commands/user_command_api.rb}, %q{lib/pry/helpers.rb}, %q{lib/pry/helpers/base_helpers.rb}, %q{lib/pry/helpers/command_helpers.rb}, %q{lib/pry/helpers/text.rb}, %q{lib/pry/history.rb}, %q{lib/pry/history_array.rb}, %q{lib/pry/method.rb}, %q{lib/pry/plugins.rb}, %q{lib/pry/pry_class.rb}, %q{lib/pry/pry_instance.rb}, %q{lib/pry/rbx_method.rb}, %q{lib/pry/rbx_path.rb}, %q{lib/pry/version.rb}, %q{pry.gemspec}, %q{test/helper.rb}, %q{test/test_command_helpers.rb}, %q{test/test_command_processor.rb}, %q{test/test_command_set.rb}, %q{test/test_completion.rb}, %q{test/test_default_commands.rb}, %q{test/test_default_commands/test_context.rb}, %q{test/test_default_commands/test_documentation.rb}, %q{test/test_default_commands/test_gems.rb}, %q{test/test_default_commands/test_input.rb}, %q{test/test_default_commands/test_introspection.rb}, %q{test/test_default_commands/test_shell.rb}, %q{test/test_exception_whitelist.rb}, %q{test/test_history_array.rb}, %q{test/test_input_stack.rb}, %q{test/test_method.rb}, %q{test/test_pry.rb}, %q{test/test_pry_history.rb}, %q{test/test_pry_output.rb}, %q{test/test_special_locals.rb}, %q{test/testrc}, %q{wiki/Customizing-pry.md}, %q{wiki/Home.md}]
13
+ s.files = [%q{.document}, %q{.gemtest}, %q{.gitignore}, %q{.travis.yml}, %q{.yardopts}, %q{CHANGELOG}, %q{CONTRIBUTORS}, %q{Gemfile}, %q{LICENSE}, %q{README.markdown}, %q{Rakefile}, %q{TODO}, %q{bin/pry}, %q{examples/example_basic.rb}, %q{examples/example_command_override.rb}, %q{examples/example_commands.rb}, %q{examples/example_hooks.rb}, %q{examples/example_image_edit.rb}, %q{examples/example_input.rb}, %q{examples/example_input2.rb}, %q{examples/example_output.rb}, %q{examples/example_print.rb}, %q{examples/example_prompt.rb}, %q{examples/helper.rb}, %q{lib/pry.rb}, %q{lib/pry/command_context.rb}, %q{lib/pry/command_processor.rb}, %q{lib/pry/command_set.rb}, %q{lib/pry/commands.rb}, %q{lib/pry/completion.rb}, %q{lib/pry/config.rb}, %q{lib/pry/core_extensions.rb}, %q{lib/pry/custom_completions.rb}, %q{lib/pry/default_commands/basic.rb}, %q{lib/pry/default_commands/context.rb}, %q{lib/pry/default_commands/documentation.rb}, %q{lib/pry/default_commands/easter_eggs.rb}, %q{lib/pry/default_commands/gems.rb}, %q{lib/pry/default_commands/input.rb}, %q{lib/pry/default_commands/introspection.rb}, %q{lib/pry/default_commands/ls.rb}, %q{lib/pry/default_commands/shell.rb}, %q{lib/pry/extended_commands/experimental.rb}, %q{lib/pry/extended_commands/user_command_api.rb}, %q{lib/pry/helpers.rb}, %q{lib/pry/helpers/base_helpers.rb}, %q{lib/pry/helpers/command_helpers.rb}, %q{lib/pry/helpers/text.rb}, %q{lib/pry/history.rb}, %q{lib/pry/history_array.rb}, %q{lib/pry/plugins.rb}, %q{lib/pry/pry_class.rb}, %q{lib/pry/pry_instance.rb}, %q{lib/pry/version.rb}, %q{pry.gemspec}, %q{test/helper.rb}, %q{test/test_command_helpers.rb}, %q{test/test_command_processor.rb}, %q{test/test_command_set.rb}, %q{test/test_completion.rb}, %q{test/test_default_commands.rb}, %q{test/test_default_commands/test_context.rb}, %q{test/test_default_commands/test_documentation.rb}, %q{test/test_default_commands/test_gems.rb}, %q{test/test_default_commands/test_input.rb}, %q{test/test_default_commands/test_introspection.rb}, %q{test/test_default_commands/test_shell.rb}, %q{test/test_exception_whitelist.rb}, %q{test/test_history_array.rb}, %q{test/test_input_stack.rb}, %q{test/test_pry.rb}, %q{test/test_pry_history.rb}, %q{test/test_pry_output.rb}, %q{test/test_special_locals.rb}, %q{test/testrc}, %q{wiki/Customizing-pry.md}, %q{wiki/Home.md}]
14
14
  s.homepage = %q{http://pry.github.com}
15
15
  s.require_paths = [%q{lib}]
16
16
  s.rubygems_version = %q{1.8.6}
17
17
  s.summary = %q{An IRB alternative and runtime developer console}
18
- s.test_files = [%q{test/helper.rb}, %q{test/test_command_helpers.rb}, %q{test/test_command_processor.rb}, %q{test/test_command_set.rb}, %q{test/test_completion.rb}, %q{test/test_default_commands.rb}, %q{test/test_default_commands/test_context.rb}, %q{test/test_default_commands/test_documentation.rb}, %q{test/test_default_commands/test_gems.rb}, %q{test/test_default_commands/test_input.rb}, %q{test/test_default_commands/test_introspection.rb}, %q{test/test_default_commands/test_shell.rb}, %q{test/test_exception_whitelist.rb}, %q{test/test_history_array.rb}, %q{test/test_input_stack.rb}, %q{test/test_method.rb}, %q{test/test_pry.rb}, %q{test/test_pry_history.rb}, %q{test/test_pry_output.rb}, %q{test/test_special_locals.rb}, %q{test/testrc}]
18
+ s.test_files = [%q{test/helper.rb}, %q{test/test_command_helpers.rb}, %q{test/test_command_processor.rb}, %q{test/test_command_set.rb}, %q{test/test_completion.rb}, %q{test/test_default_commands.rb}, %q{test/test_default_commands/test_context.rb}, %q{test/test_default_commands/test_documentation.rb}, %q{test/test_default_commands/test_gems.rb}, %q{test/test_default_commands/test_input.rb}, %q{test/test_default_commands/test_introspection.rb}, %q{test/test_default_commands/test_shell.rb}, %q{test/test_exception_whitelist.rb}, %q{test/test_history_array.rb}, %q{test/test_input_stack.rb}, %q{test/test_pry.rb}, %q{test/test_pry_history.rb}, %q{test/test_pry_output.rb}, %q{test/test_special_locals.rb}, %q{test/testrc}]
19
19
 
20
20
  if s.respond_to? :specification_version then
21
21
  s.specification_version = 3
22
22
 
23
23
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
24
- s.add_runtime_dependency(%q<ruby_parser>, [">= 2.0.5"])
25
- s.add_runtime_dependency(%q<coderay>, [">= 0.9.8"])
24
+ s.add_runtime_dependency(%q<ruby_parser>, ["~> 2.0.5"])
25
+ s.add_runtime_dependency(%q<coderay>, ["~> 0.9.8"])
26
26
  s.add_runtime_dependency(%q<slop>, ["~> 2.1.0"])
27
- s.add_runtime_dependency(%q<method_source>, [">= 0.6.5"])
28
- s.add_development_dependency(%q<bacon>, [">= 1.1.0"])
27
+ s.add_runtime_dependency(%q<method_source>, ["~> 0.6.5"])
28
+ s.add_development_dependency(%q<bacon>, ["~> 1.1.0"])
29
29
  s.add_development_dependency(%q<open4>, ["~> 1.0.1"])
30
30
  s.add_development_dependency(%q<rake>, ["~> 0.9"])
31
31
  else
32
- s.add_dependency(%q<ruby_parser>, [">= 2.0.5"])
33
- s.add_dependency(%q<coderay>, [">= 0.9.8"])
32
+ s.add_dependency(%q<ruby_parser>, ["~> 2.0.5"])
33
+ s.add_dependency(%q<coderay>, ["~> 0.9.8"])
34
34
  s.add_dependency(%q<slop>, ["~> 2.1.0"])
35
- s.add_dependency(%q<method_source>, [">= 0.6.5"])
36
- s.add_dependency(%q<bacon>, [">= 1.1.0"])
35
+ s.add_dependency(%q<method_source>, ["~> 0.6.5"])
36
+ s.add_dependency(%q<bacon>, ["~> 1.1.0"])
37
37
  s.add_dependency(%q<open4>, ["~> 1.0.1"])
38
38
  s.add_dependency(%q<rake>, ["~> 0.9"])
39
39
  end
40
40
  else
41
- s.add_dependency(%q<ruby_parser>, [">= 2.0.5"])
42
- s.add_dependency(%q<coderay>, [">= 0.9.8"])
41
+ s.add_dependency(%q<ruby_parser>, ["~> 2.0.5"])
42
+ s.add_dependency(%q<coderay>, ["~> 0.9.8"])
43
43
  s.add_dependency(%q<slop>, ["~> 2.1.0"])
44
- s.add_dependency(%q<method_source>, [">= 0.6.5"])
45
- s.add_dependency(%q<bacon>, [">= 1.1.0"])
44
+ s.add_dependency(%q<method_source>, ["~> 0.6.5"])
45
+ s.add_dependency(%q<bacon>, ["~> 1.1.0"])
46
46
  s.add_dependency(%q<open4>, ["~> 1.0.1"])
47
47
  s.add_dependency(%q<rake>, ["~> 0.9"])
48
48
  end
@@ -5,5 +5,73 @@ describe Pry::Helpers::CommandHelpers do
5
5
  @helper = Pry::Helpers::CommandHelpers
6
6
  end
7
7
 
8
- # FIXME: currently no tests
8
+ describe "get_method_object" do
9
+ it 'should look up instance methods if no methods available and no options provided' do
10
+ klass = Class.new { def hello; end }
11
+ meth = @helper.get_method_object(:hello, Pry.binding_for(klass), {})
12
+ meth.should == klass.instance_method(:hello)
13
+ end
14
+
15
+ it 'should look up methods if no instance methods available and no options provided' do
16
+ klass = Class.new { def self.hello; end }
17
+ meth = @helper.get_method_object(:hello, Pry.binding_for(klass), {})
18
+ meth.should == klass.method(:hello)
19
+ end
20
+
21
+ it 'should look up instance methods first even if methods available and no options provided' do
22
+ klass = Class.new { def hello; end; def self.hello; end }
23
+ meth = @helper.get_method_object(:hello, Pry.binding_for(klass), {})
24
+ meth.should == klass.instance_method(:hello)
25
+ end
26
+
27
+ it 'should look up instance methods if "instance-methods" option provided' do
28
+ klass = Class.new { def hello; end; def self.hello; end }
29
+ meth = @helper.get_method_object(:hello, Pry.binding_for(klass), {"instance-methods" => true})
30
+ meth.should == klass.instance_method(:hello)
31
+ end
32
+
33
+ it 'should look up methods if :methods option provided' do
34
+ klass = Class.new { def hello; end; def self.hello; end }
35
+ meth = @helper.get_method_object(:hello, Pry.binding_for(klass), {:methods => true})
36
+ meth.should == klass.method(:hello)
37
+ end
38
+
39
+ it 'should look up instance methods using the Class#method syntax' do
40
+ klass = Class.new { def hello; end; def self.hello; end }
41
+ meth = @helper.get_method_object("klass#hello", Pry.binding_for(binding), {})
42
+ meth.should == klass.instance_method(:hello)
43
+ end
44
+
45
+ it 'should look up methods using the object.method syntax' do
46
+ klass = Class.new { def hello; end; def self.hello; end }
47
+ meth = @helper.get_method_object("klass.hello", Pry.binding_for(binding), {})
48
+ meth.should == klass.method(:hello)
49
+ end
50
+
51
+ it 'should NOT look up instance methods using the Class#method syntax if no instance methods defined' do
52
+ klass = Class.new { def self.hello; end }
53
+ meth = @helper.get_method_object("klass#hello", Pry.binding_for(binding), {})
54
+ meth.should == nil
55
+ end
56
+
57
+ it 'should NOT look up methods using the object.method syntax if no methods defined' do
58
+ klass = Class.new { def hello; end }
59
+ meth = @helper.get_method_object("klass.hello", Pry.binding_for(binding), {})
60
+ meth.should == nil
61
+ end
62
+
63
+ it 'should look up methods using klass.new.method syntax' do
64
+ klass = Class.new { def hello; :hello; end }
65
+ meth = @helper.get_method_object("klass.new.hello", Pry.binding_for(binding), {})
66
+ meth.name.to_sym.should == :hello
67
+ end
68
+
69
+ it 'should look up instance methods using klass.meth#method syntax' do
70
+ klass = Class.new { def self.meth; Class.new; end }
71
+ meth = @helper.get_method_object("klass.meth#initialize", Pry.binding_for(binding), {})
72
+ meth.name.to_sym.should == :initialize
73
+ end
74
+ end
9
75
  end
76
+
77
+