pry 0.10.pre.1-java → 0.10.0.pre2-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +702 -0
  3. data/LICENSE +2 -2
  4. data/{README.markdown → README.md} +41 -35
  5. data/lib/pry.rb +82 -139
  6. data/lib/pry/cli.rb +77 -30
  7. data/lib/pry/code.rb +126 -182
  8. data/lib/pry/code/code_file.rb +103 -0
  9. data/lib/pry/code/code_range.rb +71 -0
  10. data/lib/pry/code/loc.rb +92 -0
  11. data/lib/pry/code_object.rb +172 -0
  12. data/lib/pry/color_printer.rb +55 -0
  13. data/lib/pry/command.rb +184 -28
  14. data/lib/pry/command_set.rb +113 -59
  15. data/lib/pry/commands.rb +4 -27
  16. data/lib/pry/commands/amend_line.rb +99 -0
  17. data/lib/pry/commands/bang.rb +20 -0
  18. data/lib/pry/commands/bang_pry.rb +17 -0
  19. data/lib/pry/commands/cat.rb +62 -0
  20. data/lib/pry/commands/cat/abstract_formatter.rb +27 -0
  21. data/lib/pry/commands/cat/exception_formatter.rb +77 -0
  22. data/lib/pry/commands/cat/file_formatter.rb +67 -0
  23. data/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
  24. data/lib/pry/commands/cd.rb +41 -0
  25. data/lib/pry/commands/change_inspector.rb +27 -0
  26. data/lib/pry/commands/change_prompt.rb +26 -0
  27. data/lib/pry/commands/code_collector.rb +165 -0
  28. data/lib/pry/commands/disable_pry.rb +27 -0
  29. data/lib/pry/commands/disabled_commands.rb +2 -0
  30. data/lib/pry/commands/easter_eggs.rb +112 -0
  31. data/lib/pry/commands/edit.rb +195 -0
  32. data/lib/pry/commands/edit/exception_patcher.rb +25 -0
  33. data/lib/pry/commands/edit/file_and_line_locator.rb +36 -0
  34. data/lib/pry/commands/exit.rb +42 -0
  35. data/lib/pry/commands/exit_all.rb +29 -0
  36. data/lib/pry/commands/exit_program.rb +23 -0
  37. data/lib/pry/commands/find_method.rb +193 -0
  38. data/lib/pry/commands/fix_indent.rb +19 -0
  39. data/lib/pry/commands/gem_cd.rb +26 -0
  40. data/lib/pry/commands/gem_install.rb +32 -0
  41. data/lib/pry/commands/gem_list.rb +33 -0
  42. data/lib/pry/commands/gem_open.rb +29 -0
  43. data/lib/pry/commands/gist.rb +101 -0
  44. data/lib/pry/commands/help.rb +164 -0
  45. data/lib/pry/commands/hist.rb +180 -0
  46. data/lib/pry/commands/import_set.rb +22 -0
  47. data/lib/pry/commands/install_command.rb +53 -0
  48. data/lib/pry/commands/jump_to.rb +29 -0
  49. data/lib/pry/commands/list_inspectors.rb +35 -0
  50. data/lib/pry/commands/list_prompts.rb +35 -0
  51. data/lib/pry/commands/ls.rb +114 -0
  52. data/lib/pry/commands/ls/constants.rb +47 -0
  53. data/lib/pry/commands/ls/formatter.rb +49 -0
  54. data/lib/pry/commands/ls/globals.rb +48 -0
  55. data/lib/pry/commands/ls/grep.rb +21 -0
  56. data/lib/pry/commands/ls/instance_vars.rb +39 -0
  57. data/lib/pry/commands/ls/interrogatable.rb +18 -0
  58. data/lib/pry/commands/ls/jruby_hacks.rb +49 -0
  59. data/lib/pry/commands/ls/local_names.rb +35 -0
  60. data/lib/pry/commands/ls/local_vars.rb +39 -0
  61. data/lib/pry/commands/ls/ls_entity.rb +70 -0
  62. data/lib/pry/commands/ls/methods.rb +57 -0
  63. data/lib/pry/commands/ls/methods_helper.rb +46 -0
  64. data/lib/pry/commands/ls/self_methods.rb +32 -0
  65. data/lib/pry/commands/nesting.rb +25 -0
  66. data/lib/pry/commands/play.rb +103 -0
  67. data/lib/pry/commands/pry_backtrace.rb +25 -0
  68. data/lib/pry/commands/pry_version.rb +17 -0
  69. data/lib/pry/commands/raise_up.rb +32 -0
  70. data/lib/pry/commands/reload_code.rb +62 -0
  71. data/lib/pry/commands/reset.rb +18 -0
  72. data/lib/pry/commands/ri.rb +60 -0
  73. data/lib/pry/commands/save_file.rb +61 -0
  74. data/lib/pry/commands/shell_command.rb +48 -0
  75. data/lib/pry/commands/shell_mode.rb +25 -0
  76. data/lib/pry/commands/show_doc.rb +83 -0
  77. data/lib/pry/commands/show_info.rb +195 -0
  78. data/lib/pry/commands/show_input.rb +17 -0
  79. data/lib/pry/commands/show_source.rb +50 -0
  80. data/lib/pry/commands/simple_prompt.rb +22 -0
  81. data/lib/pry/commands/stat.rb +40 -0
  82. data/lib/pry/commands/switch_to.rb +23 -0
  83. data/lib/pry/commands/toggle_color.rb +24 -0
  84. data/lib/pry/commands/watch_expression.rb +105 -0
  85. data/lib/pry/commands/watch_expression/expression.rb +38 -0
  86. data/lib/pry/commands/whereami.rb +190 -0
  87. data/lib/pry/commands/wtf.rb +57 -0
  88. data/lib/pry/config.rb +20 -229
  89. data/lib/pry/config/behavior.rb +139 -0
  90. data/lib/pry/config/convenience.rb +26 -0
  91. data/lib/pry/config/default.rb +165 -0
  92. data/lib/pry/core_extensions.rb +59 -38
  93. data/lib/pry/editor.rb +133 -0
  94. data/lib/pry/exceptions.rb +77 -0
  95. data/lib/pry/helpers.rb +1 -0
  96. data/lib/pry/helpers/base_helpers.rb +40 -154
  97. data/lib/pry/helpers/command_helpers.rb +19 -130
  98. data/lib/pry/helpers/documentation_helpers.rb +21 -11
  99. data/lib/pry/helpers/table.rb +109 -0
  100. data/lib/pry/helpers/text.rb +8 -9
  101. data/lib/pry/history.rb +61 -45
  102. data/lib/pry/history_array.rb +11 -1
  103. data/lib/pry/hooks.rb +10 -32
  104. data/lib/pry/indent.rb +110 -38
  105. data/lib/pry/input_completer.rb +242 -0
  106. data/lib/pry/input_lock.rb +132 -0
  107. data/lib/pry/inspector.rb +27 -0
  108. data/lib/pry/last_exception.rb +61 -0
  109. data/lib/pry/method.rb +199 -200
  110. data/lib/pry/method/disowned.rb +53 -0
  111. data/lib/pry/method/patcher.rb +125 -0
  112. data/lib/pry/method/weird_method_locator.rb +186 -0
  113. data/lib/pry/module_candidate.rb +39 -33
  114. data/lib/pry/object_path.rb +82 -0
  115. data/lib/pry/output.rb +50 -0
  116. data/lib/pry/pager.rb +234 -0
  117. data/lib/pry/plugins.rb +4 -3
  118. data/lib/pry/prompt.rb +26 -0
  119. data/lib/pry/pry_class.rb +199 -227
  120. data/lib/pry/pry_instance.rb +344 -403
  121. data/lib/pry/rbx_path.rb +1 -1
  122. data/lib/pry/repl.rb +202 -0
  123. data/lib/pry/repl_file_loader.rb +20 -26
  124. data/lib/pry/rubygem.rb +82 -0
  125. data/lib/pry/terminal.rb +79 -0
  126. data/lib/pry/test/helper.rb +170 -0
  127. data/lib/pry/version.rb +1 -1
  128. data/lib/pry/wrapped_module.rb +133 -48
  129. metadata +132 -197
  130. data/.document +0 -2
  131. data/.gemtest +0 -0
  132. data/.gitignore +0 -16
  133. data/.travis.yml +0 -17
  134. data/.yardopts +0 -1
  135. data/CHANGELOG +0 -387
  136. data/CONTRIBUTORS +0 -36
  137. data/Gemfile +0 -2
  138. data/Rakefile +0 -137
  139. data/TODO +0 -117
  140. data/examples/example_basic.rb +0 -15
  141. data/examples/example_command_override.rb +0 -32
  142. data/examples/example_commands.rb +0 -36
  143. data/examples/example_hooks.rb +0 -9
  144. data/examples/example_image_edit.rb +0 -67
  145. data/examples/example_input.rb +0 -7
  146. data/examples/example_input2.rb +0 -29
  147. data/examples/example_output.rb +0 -11
  148. data/examples/example_print.rb +0 -6
  149. data/examples/example_prompt.rb +0 -9
  150. data/examples/helper.rb +0 -6
  151. data/lib/pry/completion.rb +0 -221
  152. data/lib/pry/custom_completions.rb +0 -6
  153. data/lib/pry/default_commands/cd.rb +0 -81
  154. data/lib/pry/default_commands/commands.rb +0 -62
  155. data/lib/pry/default_commands/context.rb +0 -98
  156. data/lib/pry/default_commands/easter_eggs.rb +0 -95
  157. data/lib/pry/default_commands/editing.rb +0 -420
  158. data/lib/pry/default_commands/find_method.rb +0 -169
  159. data/lib/pry/default_commands/gems.rb +0 -84
  160. data/lib/pry/default_commands/gist.rb +0 -187
  161. data/lib/pry/default_commands/help.rb +0 -127
  162. data/lib/pry/default_commands/hist.rb +0 -120
  163. data/lib/pry/default_commands/input_and_output.rb +0 -306
  164. data/lib/pry/default_commands/introspection.rb +0 -410
  165. data/lib/pry/default_commands/ls.rb +0 -272
  166. data/lib/pry/default_commands/misc.rb +0 -38
  167. data/lib/pry/default_commands/navigating_pry.rb +0 -110
  168. data/lib/pry/default_commands/whereami.rb +0 -92
  169. data/lib/pry/extended_commands/experimental.rb +0 -7
  170. data/lib/pry/rbx_method.rb +0 -13
  171. data/man/pry.1 +0 -195
  172. data/man/pry.1.html +0 -204
  173. data/man/pry.1.ronn +0 -141
  174. data/pry.gemspec +0 -46
  175. data/test/candidate_helper1.rb +0 -11
  176. data/test/candidate_helper2.rb +0 -8
  177. data/test/helper.rb +0 -223
  178. data/test/test_cli.rb +0 -78
  179. data/test/test_code.rb +0 -201
  180. data/test/test_command.rb +0 -712
  181. data/test/test_command_helpers.rb +0 -9
  182. data/test/test_command_integration.rb +0 -668
  183. data/test/test_command_set.rb +0 -610
  184. data/test/test_completion.rb +0 -62
  185. data/test/test_control_d_handler.rb +0 -45
  186. data/test/test_default_commands/example.erb +0 -5
  187. data/test/test_default_commands/test_cd.rb +0 -318
  188. data/test/test_default_commands/test_context.rb +0 -280
  189. data/test/test_default_commands/test_documentation.rb +0 -314
  190. data/test/test_default_commands/test_find_method.rb +0 -50
  191. data/test/test_default_commands/test_gems.rb +0 -18
  192. data/test/test_default_commands/test_help.rb +0 -57
  193. data/test/test_default_commands/test_input.rb +0 -428
  194. data/test/test_default_commands/test_introspection.rb +0 -511
  195. data/test/test_default_commands/test_ls.rb +0 -151
  196. data/test/test_default_commands/test_shell.rb +0 -343
  197. data/test/test_default_commands/test_show_source.rb +0 -432
  198. data/test/test_exception_whitelist.rb +0 -21
  199. data/test/test_history_array.rb +0 -65
  200. data/test/test_hooks.rb +0 -521
  201. data/test/test_indent.rb +0 -277
  202. data/test/test_input_stack.rb +0 -86
  203. data/test/test_method.rb +0 -401
  204. data/test/test_pry.rb +0 -463
  205. data/test/test_pry_defaults.rb +0 -419
  206. data/test/test_pry_history.rb +0 -84
  207. data/test/test_pry_output.rb +0 -41
  208. data/test/test_sticky_locals.rb +0 -155
  209. data/test/test_syntax_checking.rb +0 -65
  210. data/test/test_wrapped_module.rb +0 -174
  211. data/test/testrc +0 -2
  212. data/test/testrcbad +0 -2
  213. data/wiki/Customizing-pry.md +0 -397
  214. data/wiki/Home.md +0 -4
@@ -0,0 +1,170 @@
1
+ require 'pry'
2
+
3
+ # in case the tests call reset_defaults, ensure we reset them to
4
+ # amended (test friendly) values
5
+ class << Pry
6
+ alias_method :orig_reset_defaults, :reset_defaults
7
+ def reset_defaults
8
+ orig_reset_defaults
9
+
10
+ Pry.config.color = false
11
+ Pry.config.pager = false
12
+ Pry.config.should_load_rc = false
13
+ Pry.config.should_load_local_rc= false
14
+ Pry.config.should_load_plugins = false
15
+ Pry.config.history.should_load = false
16
+ Pry.config.history.should_save = false
17
+ Pry.config.correct_indent = false
18
+ Pry.config.hooks = Pry::Hooks.new
19
+ Pry.config.collision_warning = false
20
+ end
21
+ end
22
+ Pry.reset_defaults
23
+
24
+ # A global space for storing temporary state during tests.
25
+
26
+ module PryTestHelpers
27
+
28
+ module_function
29
+
30
+ # inject a variable into a binding
31
+ def inject_var(name, value, b)
32
+ Pry.current[:pry_local] = value
33
+ b.eval("#{name} = ::Pry.current[:pry_local]")
34
+ ensure
35
+ Pry.current[:pry_local] = nil
36
+ end
37
+
38
+ def constant_scope(*names)
39
+ names.each do |name|
40
+ Object.remove_const name if Object.const_defined?(name)
41
+ end
42
+
43
+ yield
44
+ ensure
45
+ names.each do |name|
46
+ Object.remove_const name if Object.const_defined?(name)
47
+ end
48
+ end
49
+
50
+ # Open a temp file and yield it to the block, closing it after
51
+ # @return [String] The path of the temp file
52
+ def temp_file(ext='.rb')
53
+ file = Tempfile.new(['pry', ext])
54
+ yield file
55
+ ensure
56
+ file.close(true) if file
57
+ File.unlink("#{file.path}c") if File.exists?("#{file.path}c") # rbx
58
+ end
59
+
60
+ def unindent(*args)
61
+ Pry::Helpers::CommandHelpers.unindent(*args)
62
+ end
63
+
64
+ def mock_command(cmd, args=[], opts={})
65
+ output = StringIO.new
66
+ pry = Pry.new(output: output)
67
+ ret = cmd.new(opts.merge(pry_instance: pry, :output => output)).call_safely(*args)
68
+ Struct.new(:output, :return).new(output.string, ret)
69
+ end
70
+
71
+ def mock_exception(*mock_backtrace)
72
+ StandardError.new.tap do |e|
73
+ e.define_singleton_method(:backtrace) { mock_backtrace }
74
+ end
75
+ end
76
+ end
77
+
78
+ def pry_tester(*args, &block)
79
+ if args.length == 0 || args[0].is_a?(Hash)
80
+ args.unshift(Pry.toplevel_binding)
81
+ end
82
+
83
+ PryTester.new(*args).tap do |t|
84
+ (class << t; self; end).class_eval(&block) if block
85
+ end
86
+ end
87
+
88
+ def pry_eval(*eval_strs)
89
+ if eval_strs.first.is_a? String
90
+ binding = Pry.toplevel_binding
91
+ else
92
+ binding = Pry.binding_for(eval_strs.shift)
93
+ end
94
+
95
+ pry_tester(binding).eval(*eval_strs)
96
+ end
97
+
98
+ class PryTester
99
+ extend Forwardable
100
+
101
+ attr_reader :pry, :out
102
+
103
+ def_delegators :@pry, :eval_string, :eval_string=
104
+
105
+ def initialize(target = TOPLEVEL_BINDING, options = {})
106
+ @pry = Pry.new(options.merge(:target => target))
107
+ @history = options[:history]
108
+
109
+ @pry.inject_sticky_locals!
110
+ reset_output
111
+ end
112
+
113
+ def eval(*strs)
114
+ reset_output
115
+ result = nil
116
+
117
+ strs.flatten.each do |str|
118
+ str = "#{str.strip}\n"
119
+ @history.push str if @history
120
+
121
+ if @pry.process_command(str)
122
+ result = last_command_result_or_output
123
+ else
124
+ result = @pry.evaluate_ruby(str)
125
+ end
126
+ end
127
+
128
+ result
129
+ end
130
+
131
+ def push(*lines)
132
+ Array(lines).flatten.each do |line|
133
+ @pry.eval(line)
134
+ end
135
+ end
136
+
137
+ def push_binding(context)
138
+ @pry.push_binding context
139
+ end
140
+
141
+ def last_output
142
+ @out.string if @out
143
+ end
144
+
145
+ def process_command(command_str)
146
+ @pry.process_command(command_str) or raise "Not a valid command"
147
+ last_command_result_or_output
148
+ end
149
+
150
+ def last_command_result
151
+ result = Pry.current[:pry_cmd_result]
152
+ result.retval if result
153
+ end
154
+
155
+ protected
156
+
157
+ def last_command_result_or_output
158
+ result = last_command_result
159
+ if result != Pry::Command::VOID_VALUE
160
+ result
161
+ else
162
+ last_output
163
+ end
164
+ end
165
+
166
+ def reset_output
167
+ @out = StringIO.new
168
+ @pry.output = @out
169
+ end
170
+ end
@@ -1,3 +1,3 @@
1
1
  class Pry
2
- VERSION = "0.10.pre.1"
2
+ VERSION = "0.10.0.pre2"
3
3
  end
@@ -14,10 +14,10 @@ class Pry
14
14
  end
15
15
 
16
16
  class WrappedModule
17
- include Pry::Helpers::DocumentationHelpers
17
+ include Helpers::BaseHelpers
18
+ include CodeObject::Helpers
18
19
 
19
20
  attr_reader :wrapped
20
- private :wrapped
21
21
 
22
22
  # Convert a string to a module.
23
23
  #
@@ -27,11 +27,7 @@ class Pry
27
27
  # @example
28
28
  # Pry::WrappedModule.from_str("Pry::Code")
29
29
  def self.from_str(mod_name, target=TOPLEVEL_BINDING)
30
- kind = target.eval("defined?(#{mod_name})")
31
-
32
- # if we dont limit it to constants then from_str could end up
33
- # executing methods which is not good, i.e `show-source pry`
34
- if (kind == "constant" && target.eval(mod_name).is_a?(Module))
30
+ if safe_to_evaluate?(mod_name, target)
35
31
  Pry::WrappedModule.new(target.eval(mod_name))
36
32
  else
37
33
  nil
@@ -40,6 +36,23 @@ class Pry
40
36
  nil
41
37
  end
42
38
 
39
+ class << self
40
+ private
41
+
42
+ # We use this method to decide whether code is safe to eval. Method's are
43
+ # generally not, but everything else is.
44
+ # TODO: is just checking != "method" enough??
45
+ # TODO: see duplication of this method in Pry::CodeObject
46
+ # @param [String] str The string to lookup.
47
+ # @param [Binding] target Where the lookup takes place.
48
+ # @return [Boolean]
49
+ def safe_to_evaluate?(str, target)
50
+ return true if str.strip == "self"
51
+ kind = target.eval("defined?(#{str})")
52
+ kind =~ /variable|constant/
53
+ end
54
+ end
55
+
43
56
  # @raise [ArgumentError] if the argument is not a `Module`
44
57
  # @param [Module] mod
45
58
  def initialize(mod)
@@ -52,6 +65,15 @@ class Pry
52
65
  @doc = nil
53
66
  end
54
67
 
68
+ # Returns an array of the names of the constants accessible in the wrapped
69
+ # module. This avoids the problem of accidentally calling the singleton
70
+ # method `Module.constants`.
71
+ # @param [Boolean] inherit Include the names of constants from included
72
+ # modules?
73
+ def constants(inherit = true)
74
+ Module.instance_method(:constants).bind(@wrapped).call(inherit)
75
+ end
76
+
55
77
  # The prefix that would appear before methods defined on this class.
56
78
  #
57
79
  # i.e. the "String." or "String#" in String.new and String#initialize.
@@ -83,7 +105,23 @@ class Pry
83
105
  # Is this a singleton class?
84
106
  # @return [Boolean]
85
107
  def singleton_class?
86
- wrapped != wrapped.ancestors.first
108
+ if Pry::Method.safe_send(wrapped, :respond_to?, :singleton_class?)
109
+ Pry::Method.safe_send(wrapped, :singleton_class?)
110
+ else
111
+ wrapped != Pry::Method.safe_send(wrapped, :ancestors).first
112
+ end
113
+ end
114
+
115
+ # Is this strictly a module? (does not match classes)
116
+ # @return [Boolean]
117
+ def module?
118
+ wrapped.instance_of?(Module)
119
+ end
120
+
121
+ # Is this strictly a class?
122
+ # @return [Boolean]
123
+ def class?
124
+ wrapped.instance_of?(Class)
87
125
  end
88
126
 
89
127
  # Get the instance associated with this singleton class.
@@ -192,26 +230,63 @@ class Pry
192
230
  @memoized_candidates[rank] ||= Candidate.new(self, rank)
193
231
  end
194
232
 
195
-
196
233
  # @return [Fixnum] The number of candidate definitions for the
197
234
  # current module.
198
235
  def number_of_candidates
199
236
  method_candidates.count
200
237
  end
201
238
 
239
+ # @note On JRuby 1.9 and higher, in certain conditions, this method chucks
240
+ # away its ability to be quick (when there are lots of monkey patches,
241
+ # like in Rails). However, it should be efficient enough on other rubies.
242
+ # @see https://github.com/jruby/jruby/issues/525
243
+ # @return [Enumerator, Array] on JRuby 1.9 and higher returns Array, on
244
+ # other rubies returns Enumerator
245
+ def candidates
246
+ enum = Enumerator.new do |y|
247
+ (0...number_of_candidates).each do |num|
248
+ y.yield candidate(num)
249
+ end
250
+ end
251
+ Pry::Helpers::BaseHelpers.jruby_19? ? enum.to_a : enum
252
+ end
253
+
202
254
  # @return [Boolean] Whether YARD docs are available for this module.
203
255
  def yard_docs?
204
256
  !!(defined?(YARD) && YARD::Registry.at(name))
205
257
  end
206
258
 
259
+ # @param [Fixnum] times How far to travel up the ancestor chain.
260
+ # @return [Pry::WrappedModule, nil] The wrapped module that is the
261
+ # superclass.
262
+ # When `self` is a `Module` then return the
263
+ # nth ancestor, otherwise (in the case of classes) return the
264
+ # nth ancestor that is a class.
265
+ def super(times=1)
266
+ return self if times.zero?
267
+
268
+ if wrapped.is_a?(Class)
269
+ sup = ancestors.select { |v| v.is_a?(Class) }[times]
270
+ else
271
+ sup = ancestors[times]
272
+ end
273
+
274
+ Pry::WrappedModule(sup) if sup
275
+ end
276
+
207
277
  private
208
278
 
209
- # @return [Pry::WrappedModule::Candidate] The candidate of rank 0,
210
- # that is the 'monkey patch' of this module with the highest
211
- # number of methods. It is considered the 'canonical' definition
212
- # for the module.
279
+ # @return [Pry::WrappedModule::Candidate] The candidate with the
280
+ # highest rank, that is the 'monkey patch' of this module with the
281
+ # highest number of methods, which contains a source code line that
282
+ # defines the module. It is considered the 'canonical' definition
283
+ # for the module. In the absense of a suitable candidate, the
284
+ # candidate of rank 0 will be returned, or a CommandError raised if
285
+ # there are no candidates at all.
213
286
  def primary_candidate
214
- @primary_candidate ||= candidate(0)
287
+ @primary_candidate ||= candidates.find { |c| c.file } ||
288
+ # This will raise an exception if there is no candidate at all.
289
+ candidate(0)
215
290
  end
216
291
 
217
292
  # @return [Array<Array<Pry::Method>>] The array of `Pry::Method` objects,
@@ -231,34 +306,57 @@ class Pry
231
306
  def all_source_locations_by_popularity
232
307
  return @all_source_locations_by_popularity if @all_source_locations_by_popularity
233
308
 
234
- ims = all_methods_for(wrapped)
309
+ ims = all_relevant_methods_for(wrapped)
310
+ @all_source_locations_by_popularity = ims.group_by { |v| Array(v.source_location).first }.
311
+ sort_by do |path, methods|
312
+ expanded = File.expand_path(path)
313
+ load_order = $LOADED_FEATURES.index{ |file| expanded.end_with?(file) }
314
+
315
+ [-methods.size, load_order || (1.0 / 0.0)]
316
+ end
317
+ end
235
318
 
236
- # reject __class_init__ because it's an odd rbx specific thing that causes tests to fail
237
- ims = ims.select(&:source_location).reject{ |x| x.name == '__class_init__' }
319
+ # We only want methods that have a non-nil `source_location`. We also
320
+ # skip some spooky internal methods.
321
+ # (i.e we skip `__class_init__` because it's an odd rbx specific thing that causes tests to fail.)
322
+ # @return [Array<Pry::Method>]
323
+ def all_relevant_methods_for(mod)
324
+ methods = all_methods_for(mod).select(&:source_location).
325
+ reject{ |x| x.name == '__class_init__' || method_defined_by_forwardable_module?(x) }
238
326
 
239
- @all_source_locations_by_popularity = ims.group_by { |v| Array(v.source_location).first }.
240
- sort_by { |k, v| -v.size }
327
+ return methods unless methods.empty?
328
+
329
+ safe_send(mod, :constants).map do |const_name|
330
+ if const = nested_module?(mod, const_name)
331
+ all_relevant_methods_for(const)
332
+ else
333
+ []
334
+ end
335
+ end.flatten
241
336
  end
242
337
 
243
338
  # Return all methods (instance methods and class methods) for a
244
339
  # given module.
340
+ # @return [Array<Pry::Method>]
245
341
  def all_methods_for(mod)
246
- all_from_common(mod, :instance_method) + all_from_common(mod, :method)
247
- end
248
-
249
- # FIXME: a variant of this method is also found in Pry::Method
250
- def all_from_common(mod, method_type)
251
- %w(public protected private).map do |visibility|
252
- safe_send(mod, :"#{visibility}_#{method_type}s", false).select do |method_name|
253
- if method_type == :method
254
- safe_send(mod, method_type, method_name).owner == class << mod; self; end
255
- else
256
- safe_send(mod, method_type, method_name).owner == mod
257
- end
258
- end.map do |method_name|
259
- Pry::Method.new(safe_send(mod, method_type, method_name), :visibility => visibility.to_sym)
260
- end
261
- end.flatten
342
+ Pry::Method.all_from_obj(mod, false) + Pry::Method.all_from_class(mod, false)
343
+ end
344
+
345
+ def nested_module?(parent, name)
346
+ return if safe_send(parent, :autoload?, name)
347
+ child = safe_send(parent, :const_get, name)
348
+ return unless Module === child
349
+ return unless safe_send(child, :name) == "#{safe_send(parent, :name)}::#{name}"
350
+ child
351
+ end
352
+
353
+ # Detect methods that are defined with `def_delegator` from the Forwardable
354
+ # module. We want to reject these methods as they screw up module
355
+ # extraction since the `source_location` for such methods points at forwardable.rb
356
+ # TODO: make this more robust as valid user-defined files called
357
+ # forwardable.rb are also skipped.
358
+ def method_defined_by_forwardable_module?(method)
359
+ method.source_location.first =~ /forwardable\.rb/
262
360
  end
263
361
 
264
362
  # memoized lines for file
@@ -271,18 +369,5 @@ class Pry
271
369
  @lines_for_file[file] ||= File.readlines(file)
272
370
  end
273
371
  end
274
-
275
- # FIXME: this method is also found in Pry::Method
276
- def safe_send(obj, method, *args, &block)
277
- (Module === obj ? Module : Object).instance_method(method).bind(obj).call(*args, &block)
278
- end
279
-
280
- # @param [String] doc The raw docstring to process.
281
- # @return [String] Process docstring markup and strip leading white space.
282
- def process_doc(doc)
283
- process_comment_markup(strip_leading_hash_and_whitespace_from_ruby_comments(doc),
284
- :ruby)
285
- end
286
-
287
372
  end
288
373
  end
metadata CHANGED
@@ -1,313 +1,248 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.pre.1
5
- prerelease: 5
4
+ version: 0.10.0.pre2
6
5
  platform: java
7
6
  authors:
8
7
  - John Mair (banisterfiend)
9
8
  - Conrad Irwin
9
+ - Ryan Fitzgerald
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-07-05 00:00:00.000000000 Z
13
+ date: 2014-05-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: coderay
17
17
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
18
  requirements:
20
- - - ~>
19
+ - - "~>"
21
20
  - !ruby/object:Gem::Version
22
- version: 1.0.5
21
+ version: 1.1.0
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
25
  requirements:
28
- - - ~>
26
+ - - "~>"
29
27
  - !ruby/object:Gem::Version
30
- version: 1.0.5
28
+ version: 1.1.0
31
29
  - !ruby/object:Gem::Dependency
32
30
  name: slop
33
31
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
32
  requirements:
36
- - - ~>
33
+ - - "~>"
37
34
  - !ruby/object:Gem::Version
38
- version: 3.3.1
35
+ version: '3.4'
39
36
  type: :runtime
40
37
  prerelease: false
41
38
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
39
  requirements:
44
- - - ~>
40
+ - - "~>"
45
41
  - !ruby/object:Gem::Version
46
- version: 3.3.1
42
+ version: '3.4'
47
43
  - !ruby/object:Gem::Dependency
48
44
  name: method_source
49
45
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
46
  requirements:
52
- - - ~>
47
+ - - "~>"
53
48
  - !ruby/object:Gem::Version
54
- version: '0.8'
49
+ version: 0.8.1
55
50
  type: :runtime
56
51
  prerelease: false
57
52
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
53
  requirements:
60
- - - ~>
54
+ - - "~>"
61
55
  - !ruby/object:Gem::Version
62
- version: '0.8'
56
+ version: 0.8.1
63
57
  - !ruby/object:Gem::Dependency
64
- name: bacon
58
+ name: bundler
65
59
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
60
  requirements:
68
- - - ~>
61
+ - - "~>"
69
62
  - !ruby/object:Gem::Version
70
- version: '1.1'
63
+ version: '1.0'
71
64
  type: :development
72
65
  prerelease: false
73
66
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
67
  requirements:
76
- - - ~>
68
+ - - "~>"
77
69
  - !ruby/object:Gem::Version
78
- version: '1.1'
79
- - !ruby/object:Gem::Dependency
80
- name: open4
81
- requirement: !ruby/object:Gem::Requirement
82
- none: false
83
- requirements:
84
- - - ~>
85
- - !ruby/object:Gem::Version
86
- version: '1.3'
87
- type: :development
88
- prerelease: false
89
- version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
- requirements:
92
- - - ~>
93
- - !ruby/object:Gem::Version
94
- version: '1.3'
95
- - !ruby/object:Gem::Dependency
96
- name: rake
97
- requirement: !ruby/object:Gem::Requirement
98
- none: false
99
- requirements:
100
- - - ~>
101
- - !ruby/object:Gem::Version
102
- version: '0.9'
103
- type: :development
104
- prerelease: false
105
- version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
- requirements:
108
- - - ~>
109
- - !ruby/object:Gem::Version
110
- version: '0.9'
70
+ version: '1.0'
111
71
  - !ruby/object:Gem::Dependency
112
72
  name: spoon
113
73
  requirement: !ruby/object:Gem::Requirement
114
- none: false
115
74
  requirements:
116
- - - ~>
75
+ - - "~>"
117
76
  - !ruby/object:Gem::Version
118
77
  version: '0.0'
119
78
  type: :runtime
120
79
  prerelease: false
121
80
  version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
81
  requirements:
124
- - - ~>
82
+ - - "~>"
125
83
  - !ruby/object:Gem::Version
126
84
  version: '0.0'
127
85
  description: An IRB alternative and runtime developer console
128
86
  email:
129
87
  - jrmair@gmail.com
130
88
  - conrad.irwin@gmail.com
89
+ - rwfitzge@gmail.com
131
90
  executables:
132
91
  - pry
133
92
  extensions: []
134
93
  extra_rdoc_files: []
135
94
  files:
136
- - .document
137
- - .gemtest
138
- - .gitignore
139
- - .travis.yml
140
- - .yardopts
141
- - CHANGELOG
142
- - CONTRIBUTORS
143
- - Gemfile
95
+ - CHANGELOG.md
144
96
  - LICENSE
145
- - README.markdown
146
- - Rakefile
147
- - TODO
97
+ - README.md
148
98
  - bin/pry
149
- - examples/example_basic.rb
150
- - examples/example_command_override.rb
151
- - examples/example_commands.rb
152
- - examples/example_hooks.rb
153
- - examples/example_image_edit.rb
154
- - examples/example_input.rb
155
- - examples/example_input2.rb
156
- - examples/example_output.rb
157
- - examples/example_print.rb
158
- - examples/example_prompt.rb
159
- - examples/helper.rb
160
99
  - lib/pry.rb
161
100
  - lib/pry/cli.rb
162
101
  - lib/pry/code.rb
102
+ - lib/pry/code/code_file.rb
103
+ - lib/pry/code/code_range.rb
104
+ - lib/pry/code/loc.rb
105
+ - lib/pry/code_object.rb
106
+ - lib/pry/color_printer.rb
163
107
  - lib/pry/command.rb
164
108
  - lib/pry/command_set.rb
165
109
  - lib/pry/commands.rb
166
- - lib/pry/completion.rb
110
+ - lib/pry/commands/amend_line.rb
111
+ - lib/pry/commands/bang.rb
112
+ - lib/pry/commands/bang_pry.rb
113
+ - lib/pry/commands/cat.rb
114
+ - lib/pry/commands/cat/abstract_formatter.rb
115
+ - lib/pry/commands/cat/exception_formatter.rb
116
+ - lib/pry/commands/cat/file_formatter.rb
117
+ - lib/pry/commands/cat/input_expression_formatter.rb
118
+ - lib/pry/commands/cd.rb
119
+ - lib/pry/commands/change_inspector.rb
120
+ - lib/pry/commands/change_prompt.rb
121
+ - lib/pry/commands/code_collector.rb
122
+ - lib/pry/commands/disable_pry.rb
123
+ - lib/pry/commands/disabled_commands.rb
124
+ - lib/pry/commands/easter_eggs.rb
125
+ - lib/pry/commands/edit.rb
126
+ - lib/pry/commands/edit/exception_patcher.rb
127
+ - lib/pry/commands/edit/file_and_line_locator.rb
128
+ - lib/pry/commands/exit.rb
129
+ - lib/pry/commands/exit_all.rb
130
+ - lib/pry/commands/exit_program.rb
131
+ - lib/pry/commands/find_method.rb
132
+ - lib/pry/commands/fix_indent.rb
133
+ - lib/pry/commands/gem_cd.rb
134
+ - lib/pry/commands/gem_install.rb
135
+ - lib/pry/commands/gem_list.rb
136
+ - lib/pry/commands/gem_open.rb
137
+ - lib/pry/commands/gist.rb
138
+ - lib/pry/commands/help.rb
139
+ - lib/pry/commands/hist.rb
140
+ - lib/pry/commands/import_set.rb
141
+ - lib/pry/commands/install_command.rb
142
+ - lib/pry/commands/jump_to.rb
143
+ - lib/pry/commands/list_inspectors.rb
144
+ - lib/pry/commands/list_prompts.rb
145
+ - lib/pry/commands/ls.rb
146
+ - lib/pry/commands/ls/constants.rb
147
+ - lib/pry/commands/ls/formatter.rb
148
+ - lib/pry/commands/ls/globals.rb
149
+ - lib/pry/commands/ls/grep.rb
150
+ - lib/pry/commands/ls/instance_vars.rb
151
+ - lib/pry/commands/ls/interrogatable.rb
152
+ - lib/pry/commands/ls/jruby_hacks.rb
153
+ - lib/pry/commands/ls/local_names.rb
154
+ - lib/pry/commands/ls/local_vars.rb
155
+ - lib/pry/commands/ls/ls_entity.rb
156
+ - lib/pry/commands/ls/methods.rb
157
+ - lib/pry/commands/ls/methods_helper.rb
158
+ - lib/pry/commands/ls/self_methods.rb
159
+ - lib/pry/commands/nesting.rb
160
+ - lib/pry/commands/play.rb
161
+ - lib/pry/commands/pry_backtrace.rb
162
+ - lib/pry/commands/pry_version.rb
163
+ - lib/pry/commands/raise_up.rb
164
+ - lib/pry/commands/reload_code.rb
165
+ - lib/pry/commands/reset.rb
166
+ - lib/pry/commands/ri.rb
167
+ - lib/pry/commands/save_file.rb
168
+ - lib/pry/commands/shell_command.rb
169
+ - lib/pry/commands/shell_mode.rb
170
+ - lib/pry/commands/show_doc.rb
171
+ - lib/pry/commands/show_info.rb
172
+ - lib/pry/commands/show_input.rb
173
+ - lib/pry/commands/show_source.rb
174
+ - lib/pry/commands/simple_prompt.rb
175
+ - lib/pry/commands/stat.rb
176
+ - lib/pry/commands/switch_to.rb
177
+ - lib/pry/commands/toggle_color.rb
178
+ - lib/pry/commands/watch_expression.rb
179
+ - lib/pry/commands/watch_expression/expression.rb
180
+ - lib/pry/commands/whereami.rb
181
+ - lib/pry/commands/wtf.rb
167
182
  - lib/pry/config.rb
183
+ - lib/pry/config/behavior.rb
184
+ - lib/pry/config/convenience.rb
185
+ - lib/pry/config/default.rb
168
186
  - lib/pry/core_extensions.rb
169
- - lib/pry/custom_completions.rb
170
- - lib/pry/default_commands/cd.rb
171
- - lib/pry/default_commands/commands.rb
172
- - lib/pry/default_commands/context.rb
173
- - lib/pry/default_commands/easter_eggs.rb
174
- - lib/pry/default_commands/editing.rb
175
- - lib/pry/default_commands/find_method.rb
176
- - lib/pry/default_commands/gems.rb
177
- - lib/pry/default_commands/gist.rb
178
- - lib/pry/default_commands/help.rb
179
- - lib/pry/default_commands/hist.rb
180
- - lib/pry/default_commands/input_and_output.rb
181
- - lib/pry/default_commands/introspection.rb
182
- - lib/pry/default_commands/ls.rb
183
- - lib/pry/default_commands/misc.rb
184
- - lib/pry/default_commands/navigating_pry.rb
185
- - lib/pry/default_commands/whereami.rb
186
- - lib/pry/extended_commands/experimental.rb
187
+ - lib/pry/editor.rb
188
+ - lib/pry/exceptions.rb
187
189
  - lib/pry/helpers.rb
188
190
  - lib/pry/helpers/base_helpers.rb
189
191
  - lib/pry/helpers/command_helpers.rb
190
192
  - lib/pry/helpers/documentation_helpers.rb
191
193
  - lib/pry/helpers/options_helpers.rb
194
+ - lib/pry/helpers/table.rb
192
195
  - lib/pry/helpers/text.rb
193
196
  - lib/pry/history.rb
194
197
  - lib/pry/history_array.rb
195
198
  - lib/pry/hooks.rb
196
199
  - lib/pry/indent.rb
200
+ - lib/pry/input_completer.rb
201
+ - lib/pry/input_lock.rb
202
+ - lib/pry/inspector.rb
203
+ - lib/pry/last_exception.rb
197
204
  - lib/pry/method.rb
205
+ - lib/pry/method/disowned.rb
206
+ - lib/pry/method/patcher.rb
207
+ - lib/pry/method/weird_method_locator.rb
198
208
  - lib/pry/module_candidate.rb
209
+ - lib/pry/object_path.rb
210
+ - lib/pry/output.rb
211
+ - lib/pry/pager.rb
199
212
  - lib/pry/plugins.rb
213
+ - lib/pry/prompt.rb
200
214
  - lib/pry/pry_class.rb
201
215
  - lib/pry/pry_instance.rb
202
- - lib/pry/rbx_method.rb
203
216
  - lib/pry/rbx_path.rb
217
+ - lib/pry/repl.rb
204
218
  - lib/pry/repl_file_loader.rb
219
+ - lib/pry/rubygem.rb
220
+ - lib/pry/terminal.rb
221
+ - lib/pry/test/helper.rb
205
222
  - lib/pry/version.rb
206
223
  - lib/pry/wrapped_module.rb
207
- - man/pry.1
208
- - man/pry.1.html
209
- - man/pry.1.ronn
210
- - pry.gemspec
211
- - test/candidate_helper1.rb
212
- - test/candidate_helper2.rb
213
- - test/helper.rb
214
- - test/test_cli.rb
215
- - test/test_code.rb
216
- - test/test_command.rb
217
- - test/test_command_helpers.rb
218
- - test/test_command_integration.rb
219
- - test/test_command_set.rb
220
- - test/test_completion.rb
221
- - test/test_control_d_handler.rb
222
- - test/test_default_commands/example.erb
223
- - test/test_default_commands/test_cd.rb
224
- - test/test_default_commands/test_context.rb
225
- - test/test_default_commands/test_documentation.rb
226
- - test/test_default_commands/test_find_method.rb
227
- - test/test_default_commands/test_gems.rb
228
- - test/test_default_commands/test_help.rb
229
- - test/test_default_commands/test_input.rb
230
- - test/test_default_commands/test_introspection.rb
231
- - test/test_default_commands/test_ls.rb
232
- - test/test_default_commands/test_shell.rb
233
- - test/test_default_commands/test_show_source.rb
234
- - test/test_exception_whitelist.rb
235
- - test/test_history_array.rb
236
- - test/test_hooks.rb
237
- - test/test_indent.rb
238
- - test/test_input_stack.rb
239
- - test/test_method.rb
240
- - test/test_pry.rb
241
- - test/test_pry_defaults.rb
242
- - test/test_pry_history.rb
243
- - test/test_pry_output.rb
244
- - test/test_sticky_locals.rb
245
- - test/test_syntax_checking.rb
246
- - test/test_wrapped_module.rb
247
- - test/testrc
248
- - test/testrcbad
249
- - wiki/Customizing-pry.md
250
- - wiki/Home.md
251
- homepage: http://pry.github.com
252
- licenses: []
224
+ homepage: http://pryrepl.org
225
+ licenses:
226
+ - MIT
227
+ metadata: {}
253
228
  post_install_message:
254
229
  rdoc_options: []
255
230
  require_paths:
256
231
  - lib
257
232
  required_ruby_version: !ruby/object:Gem::Requirement
258
- none: false
259
233
  requirements:
260
- - - ! '>='
234
+ - - ">="
261
235
  - !ruby/object:Gem::Version
262
236
  version: '0'
263
237
  required_rubygems_version: !ruby/object:Gem::Requirement
264
- none: false
265
238
  requirements:
266
- - - ! '>'
239
+ - - ">"
267
240
  - !ruby/object:Gem::Version
268
241
  version: 1.3.1
269
242
  requirements: []
270
243
  rubyforge_project:
271
- rubygems_version: 1.8.24
244
+ rubygems_version: 2.2.2
272
245
  signing_key:
273
- specification_version: 3
246
+ specification_version: 4
274
247
  summary: An IRB alternative and runtime developer console
275
- test_files:
276
- - test/candidate_helper1.rb
277
- - test/candidate_helper2.rb
278
- - test/helper.rb
279
- - test/test_cli.rb
280
- - test/test_code.rb
281
- - test/test_command.rb
282
- - test/test_command_helpers.rb
283
- - test/test_command_integration.rb
284
- - test/test_command_set.rb
285
- - test/test_completion.rb
286
- - test/test_control_d_handler.rb
287
- - test/test_default_commands/example.erb
288
- - test/test_default_commands/test_cd.rb
289
- - test/test_default_commands/test_context.rb
290
- - test/test_default_commands/test_documentation.rb
291
- - test/test_default_commands/test_find_method.rb
292
- - test/test_default_commands/test_gems.rb
293
- - test/test_default_commands/test_help.rb
294
- - test/test_default_commands/test_input.rb
295
- - test/test_default_commands/test_introspection.rb
296
- - test/test_default_commands/test_ls.rb
297
- - test/test_default_commands/test_shell.rb
298
- - test/test_default_commands/test_show_source.rb
299
- - test/test_exception_whitelist.rb
300
- - test/test_history_array.rb
301
- - test/test_hooks.rb
302
- - test/test_indent.rb
303
- - test/test_input_stack.rb
304
- - test/test_method.rb
305
- - test/test_pry.rb
306
- - test/test_pry_defaults.rb
307
- - test/test_pry_history.rb
308
- - test/test_pry_output.rb
309
- - test/test_sticky_locals.rb
310
- - test/test_syntax_checking.rb
311
- - test/test_wrapped_module.rb
312
- - test/testrc
313
- - test/testrcbad
248
+ test_files: []