pry 0.9.12.6 → 0.10.0.pre2

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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +702 -0
  3. data/LICENSE +2 -2
  4. data/{README.markdown → README.md} +37 -31
  5. data/lib/pry.rb +38 -151
  6. data/lib/pry/cli.rb +35 -17
  7. data/lib/pry/code.rb +24 -63
  8. data/lib/pry/code/code_file.rb +103 -0
  9. data/lib/pry/code/code_range.rb +2 -1
  10. data/lib/pry/code/loc.rb +2 -2
  11. data/lib/pry/code_object.rb +40 -21
  12. data/lib/pry/color_printer.rb +55 -0
  13. data/lib/pry/command.rb +12 -9
  14. data/lib/pry/command_set.rb +81 -38
  15. data/lib/pry/commands.rb +1 -1
  16. data/lib/pry/commands/amend_line.rb +2 -2
  17. data/lib/pry/commands/bang.rb +1 -1
  18. data/lib/pry/commands/cat.rb +11 -2
  19. data/lib/pry/commands/cat/exception_formatter.rb +5 -6
  20. data/lib/pry/commands/cat/file_formatter.rb +15 -32
  21. data/lib/pry/commands/cd.rb +14 -3
  22. data/lib/pry/commands/change_inspector.rb +27 -0
  23. data/lib/pry/commands/change_prompt.rb +26 -0
  24. data/lib/pry/commands/code_collector.rb +4 -4
  25. data/lib/pry/commands/easter_eggs.rb +3 -3
  26. data/lib/pry/commands/edit.rb +10 -22
  27. data/lib/pry/commands/edit/exception_patcher.rb +2 -2
  28. data/lib/pry/commands/edit/file_and_line_locator.rb +0 -2
  29. data/lib/pry/commands/exit_program.rb +0 -1
  30. data/lib/pry/commands/find_method.rb +16 -22
  31. data/lib/pry/commands/gem_install.rb +5 -2
  32. data/lib/pry/commands/gem_open.rb +1 -1
  33. data/lib/pry/commands/gist.rb +10 -11
  34. data/lib/pry/commands/help.rb +14 -14
  35. data/lib/pry/commands/hist.rb +27 -8
  36. data/lib/pry/commands/install_command.rb +14 -12
  37. data/lib/pry/commands/list_inspectors.rb +35 -0
  38. data/lib/pry/commands/list_prompts.rb +35 -0
  39. data/lib/pry/commands/ls.rb +72 -296
  40. data/lib/pry/commands/ls/constants.rb +47 -0
  41. data/lib/pry/commands/ls/formatter.rb +49 -0
  42. data/lib/pry/commands/ls/globals.rb +48 -0
  43. data/lib/pry/commands/ls/grep.rb +21 -0
  44. data/lib/pry/commands/ls/instance_vars.rb +39 -0
  45. data/lib/pry/commands/ls/interrogatable.rb +18 -0
  46. data/lib/pry/commands/ls/jruby_hacks.rb +49 -0
  47. data/lib/pry/commands/ls/local_names.rb +35 -0
  48. data/lib/pry/commands/ls/local_vars.rb +39 -0
  49. data/lib/pry/commands/ls/ls_entity.rb +70 -0
  50. data/lib/pry/commands/ls/methods.rb +57 -0
  51. data/lib/pry/commands/ls/methods_helper.rb +46 -0
  52. data/lib/pry/commands/ls/self_methods.rb +32 -0
  53. data/lib/pry/commands/play.rb +44 -10
  54. data/lib/pry/commands/pry_backtrace.rb +1 -2
  55. data/lib/pry/commands/raise_up.rb +2 -2
  56. data/lib/pry/commands/reload_code.rb +16 -19
  57. data/lib/pry/commands/ri.rb +7 -3
  58. data/lib/pry/commands/shell_command.rb +18 -13
  59. data/lib/pry/commands/shell_mode.rb +2 -4
  60. data/lib/pry/commands/show_doc.rb +5 -0
  61. data/lib/pry/commands/show_info.rb +8 -13
  62. data/lib/pry/commands/show_source.rb +15 -3
  63. data/lib/pry/commands/simple_prompt.rb +1 -1
  64. data/lib/pry/commands/toggle_color.rb +8 -4
  65. data/lib/pry/commands/watch_expression.rb +105 -0
  66. data/lib/pry/commands/watch_expression/expression.rb +38 -0
  67. data/lib/pry/commands/whereami.rb +18 -10
  68. data/lib/pry/commands/wtf.rb +3 -3
  69. data/lib/pry/config.rb +20 -254
  70. data/lib/pry/config/behavior.rb +139 -0
  71. data/lib/pry/config/convenience.rb +26 -0
  72. data/lib/pry/config/default.rb +165 -0
  73. data/lib/pry/core_extensions.rb +31 -21
  74. data/lib/pry/editor.rb +107 -103
  75. data/lib/pry/exceptions.rb +77 -0
  76. data/lib/pry/helpers/base_helpers.rb +22 -109
  77. data/lib/pry/helpers/command_helpers.rb +10 -8
  78. data/lib/pry/helpers/documentation_helpers.rb +1 -2
  79. data/lib/pry/helpers/text.rb +4 -5
  80. data/lib/pry/history.rb +46 -45
  81. data/lib/pry/history_array.rb +6 -1
  82. data/lib/pry/hooks.rb +9 -29
  83. data/lib/pry/indent.rb +6 -6
  84. data/lib/pry/input_completer.rb +242 -0
  85. data/lib/pry/input_lock.rb +132 -0
  86. data/lib/pry/inspector.rb +27 -0
  87. data/lib/pry/last_exception.rb +61 -0
  88. data/lib/pry/method.rb +82 -87
  89. data/lib/pry/{commands/edit/method_patcher.rb → method/patcher.rb} +41 -38
  90. data/lib/pry/module_candidate.rb +4 -14
  91. data/lib/pry/object_path.rb +82 -0
  92. data/lib/pry/output.rb +50 -0
  93. data/lib/pry/pager.rb +191 -47
  94. data/lib/pry/plugins.rb +1 -1
  95. data/lib/pry/prompt.rb +26 -0
  96. data/lib/pry/pry_class.rb +149 -230
  97. data/lib/pry/pry_instance.rb +302 -413
  98. data/lib/pry/rbx_path.rb +1 -1
  99. data/lib/pry/repl.rb +202 -0
  100. data/lib/pry/repl_file_loader.rb +20 -26
  101. data/lib/pry/rubygem.rb +13 -5
  102. data/lib/pry/terminal.rb +2 -1
  103. data/lib/pry/test/helper.rb +26 -41
  104. data/lib/pry/version.rb +1 -1
  105. data/lib/pry/wrapped_module.rb +45 -59
  106. metadata +61 -224
  107. data/.document +0 -2
  108. data/.gitignore +0 -16
  109. data/.travis.yml +0 -25
  110. data/.yardopts +0 -1
  111. data/CHANGELOG +0 -534
  112. data/CONTRIBUTORS +0 -55
  113. data/Gemfile +0 -12
  114. data/Rakefile +0 -140
  115. data/TODO +0 -117
  116. data/lib/pry/completion.rb +0 -321
  117. data/lib/pry/custom_completions.rb +0 -6
  118. data/lib/pry/rbx_method.rb +0 -13
  119. data/man/pry.1 +0 -195
  120. data/man/pry.1.html +0 -204
  121. data/man/pry.1.ronn +0 -141
  122. data/pry.gemspec +0 -29
  123. data/spec/Procfile +0 -3
  124. data/spec/cli_spec.rb +0 -78
  125. data/spec/code_object_spec.rb +0 -277
  126. data/spec/code_spec.rb +0 -219
  127. data/spec/command_helpers_spec.rb +0 -29
  128. data/spec/command_integration_spec.rb +0 -644
  129. data/spec/command_set_spec.rb +0 -627
  130. data/spec/command_spec.rb +0 -821
  131. data/spec/commands/amend_line_spec.rb +0 -247
  132. data/spec/commands/bang_spec.rb +0 -19
  133. data/spec/commands/cat_spec.rb +0 -164
  134. data/spec/commands/cd_spec.rb +0 -250
  135. data/spec/commands/disable_pry_spec.rb +0 -25
  136. data/spec/commands/edit_spec.rb +0 -727
  137. data/spec/commands/exit_all_spec.rb +0 -34
  138. data/spec/commands/exit_program_spec.rb +0 -19
  139. data/spec/commands/exit_spec.rb +0 -34
  140. data/spec/commands/find_method_spec.rb +0 -70
  141. data/spec/commands/gem_list_spec.rb +0 -26
  142. data/spec/commands/gist_spec.rb +0 -79
  143. data/spec/commands/help_spec.rb +0 -56
  144. data/spec/commands/hist_spec.rb +0 -181
  145. data/spec/commands/jump_to_spec.rb +0 -15
  146. data/spec/commands/ls_spec.rb +0 -181
  147. data/spec/commands/play_spec.rb +0 -140
  148. data/spec/commands/raise_up_spec.rb +0 -56
  149. data/spec/commands/save_file_spec.rb +0 -177
  150. data/spec/commands/show_doc_spec.rb +0 -510
  151. data/spec/commands/show_input_spec.rb +0 -17
  152. data/spec/commands/show_source_spec.rb +0 -782
  153. data/spec/commands/whereami_spec.rb +0 -203
  154. data/spec/completion_spec.rb +0 -241
  155. data/spec/control_d_handler_spec.rb +0 -58
  156. data/spec/documentation_helper_spec.rb +0 -73
  157. data/spec/editor_spec.rb +0 -79
  158. data/spec/exception_whitelist_spec.rb +0 -21
  159. data/spec/fixtures/candidate_helper1.rb +0 -11
  160. data/spec/fixtures/candidate_helper2.rb +0 -8
  161. data/spec/fixtures/example.erb +0 -5
  162. data/spec/fixtures/example_nesting.rb +0 -33
  163. data/spec/fixtures/show_source_doc_examples.rb +0 -15
  164. data/spec/fixtures/testrc +0 -2
  165. data/spec/fixtures/testrcbad +0 -2
  166. data/spec/fixtures/whereami_helper.rb +0 -6
  167. data/spec/helper.rb +0 -34
  168. data/spec/helpers/bacon.rb +0 -86
  169. data/spec/helpers/mock_pry.rb +0 -43
  170. data/spec/helpers/table_spec.rb +0 -105
  171. data/spec/history_array_spec.rb +0 -67
  172. data/spec/hooks_spec.rb +0 -522
  173. data/spec/indent_spec.rb +0 -301
  174. data/spec/input_stack_spec.rb +0 -90
  175. data/spec/method_spec.rb +0 -482
  176. data/spec/prompt_spec.rb +0 -60
  177. data/spec/pry_defaults_spec.rb +0 -419
  178. data/spec/pry_history_spec.rb +0 -99
  179. data/spec/pry_output_spec.rb +0 -95
  180. data/spec/pry_spec.rb +0 -515
  181. data/spec/run_command_spec.rb +0 -25
  182. data/spec/sticky_locals_spec.rb +0 -157
  183. data/spec/syntax_checking_spec.rb +0 -81
  184. data/spec/wrapped_module_spec.rb +0 -261
  185. data/wiki/Customizing-pry.md +0 -397
  186. data/wiki/Home.md +0 -4
@@ -0,0 +1,47 @@
1
+ require 'pry/commands/ls/interrogatable'
2
+
3
+ class Pry
4
+ class Command::Ls < Pry::ClassCommand
5
+ class Constants < Pry::Command::Ls::Formatter
6
+ include Pry::Command::Ls::Interrogatable
7
+
8
+
9
+ def initialize(interrogatee, no_user_opts, opts, _pry_)
10
+ super(_pry_)
11
+ @interrogatee = interrogatee
12
+ @no_user_opts = no_user_opts
13
+ @default_switch = opts[:constants]
14
+ @verbose_switch = opts[:verbose]
15
+ end
16
+
17
+ def correct_opts?
18
+ super || (@no_user_opts && interrogating_a_module?)
19
+ end
20
+
21
+ def output_self
22
+ mod = interrogatee_mod
23
+ constants = WrappedModule.new(mod).constants(@verbose_switch)
24
+ output_section('constants', grep.regexp[format(mod, constants)])
25
+ end
26
+
27
+ private
28
+
29
+ def format(mod, constants)
30
+ constants.sort_by(&:downcase).map do |name|
31
+ if const = (!mod.autoload?(name) && (mod.const_get(name) || true) rescue nil)
32
+ if (const < Exception rescue false)
33
+ color(:exception_constant, name)
34
+ elsif (Module === mod.const_get(name) rescue false)
35
+ color(:class_constant, name)
36
+ else
37
+ color(:constant, name)
38
+ end
39
+ else
40
+ color(:unloaded_constant, name)
41
+ end
42
+ end
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,49 @@
1
+ class Pry
2
+ class Command::Ls < Pry::ClassCommand
3
+ class Formatter
4
+ attr_accessor :grep
5
+ attr_reader :_pry_
6
+
7
+ def initialize(_pry_)
8
+ @_pry_ = _pry_
9
+ @target = _pry_.current_context
10
+ end
11
+
12
+ def write_out
13
+ return false unless correct_opts?
14
+ output_self
15
+ end
16
+
17
+ private
18
+
19
+ def color(type, str)
20
+ Pry::Helpers::Text.send _pry_.config.ls["#{type}_color"], str
21
+ end
22
+
23
+ # Add a new section to the output.
24
+ # Outputs nothing if the section would be empty.
25
+ def output_section(heading, body)
26
+ return '' if body.compact.empty?
27
+ fancy_heading = Pry::Helpers::Text.bold(color(:heading, heading))
28
+ Pry::Helpers.tablify_or_one_line(fancy_heading, body)
29
+ end
30
+
31
+ def format_value(value)
32
+ Pry::ColorPrinter.pp(value, '')
33
+ end
34
+
35
+ def correct_opts?
36
+ @default_switch
37
+ end
38
+
39
+ def output_self
40
+ raise NotImplementedError
41
+ end
42
+
43
+ def grep
44
+ @grep || proc { |x| x }
45
+ end
46
+
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,48 @@
1
+ class Pry
2
+ class Command::Ls < Pry::ClassCommand
3
+ class Globals < Pry::Command::Ls::Formatter
4
+
5
+ # Taken from "puts global_variables.inspect".
6
+ BUILTIN_GLOBALS =
7
+ %w($" $$ $* $, $-0 $-F $-I $-K $-W $-a $-d $-i $-l $-p $-v $-w $. $/ $\\
8
+ $: $; $< $= $> $0 $ARGV $CONSOLE $DEBUG $DEFAULT_INPUT $DEFAULT_OUTPUT
9
+ $FIELD_SEPARATOR $FILENAME $FS $IGNORECASE $INPUT_LINE_NUMBER
10
+ $INPUT_RECORD_SEPARATOR $KCODE $LOADED_FEATURES $LOAD_PATH $NR $OFS
11
+ $ORS $OUTPUT_FIELD_SEPARATOR $OUTPUT_RECORD_SEPARATOR $PID $PROCESS_ID
12
+ $PROGRAM_NAME $RS $VERBOSE $deferr $defout $stderr $stdin $stdout)
13
+
14
+ # `$SAFE` and `$?` are thread-local, the exception stuff only works in a
15
+ # rescue clause, everything else is basically a local variable with a `$`
16
+ # in its name.
17
+ PSEUDO_GLOBALS =
18
+ %w($! $' $& $` $@ $? $+ $_ $~ $1 $2 $3 $4 $5 $6 $7 $8 $9
19
+ $CHILD_STATUS $SAFE $ERROR_INFO $ERROR_POSITION $LAST_MATCH_INFO
20
+ $LAST_PAREN_MATCH $LAST_READ_LINE $MATCH $POSTMATCH $PREMATCH)
21
+
22
+ def initialize(opts, _pry_)
23
+ super(_pry_)
24
+ @default_switch = opts[:globals]
25
+ end
26
+
27
+ def output_self
28
+ variables = format(@target.eval('global_variables'))
29
+ output_section('global variables', grep.regexp[variables])
30
+ end
31
+
32
+ private
33
+
34
+ def format(globals)
35
+ globals.map(&:to_s).sort_by(&:downcase).map do |name|
36
+ if PSEUDO_GLOBALS.include?(name)
37
+ color(:pseudo_global, name)
38
+ elsif BUILTIN_GLOBALS.include?(name)
39
+ color(:builtin_global, name)
40
+ else
41
+ color(:global_var, name)
42
+ end
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,21 @@
1
+ class Pry
2
+ class Command::Ls < Pry::ClassCommand
3
+ class Grep
4
+
5
+ def initialize(grep_regexp)
6
+ @grep_regexp = grep_regexp
7
+ end
8
+
9
+ def regexp
10
+ proc { |x|
11
+ if x.instance_of?(Array)
12
+ x.grep(@grep_regexp)
13
+ else
14
+ x =~ @grep_regexp
15
+ end
16
+ }
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,39 @@
1
+ require 'pry/commands/ls/interrogatable'
2
+
3
+ class Pry
4
+ class Command::Ls < Pry::ClassCommand
5
+ class InstanceVars < Pry::Command::Ls::Formatter
6
+ include Pry::Command::Ls::Interrogatable
7
+
8
+ def initialize(interrogatee, no_user_opts, opts, _pry_)
9
+ super(_pry_)
10
+ @interrogatee = interrogatee
11
+ @no_user_opts = no_user_opts
12
+ @default_switch = opts[:ivars]
13
+ end
14
+
15
+ def correct_opts?
16
+ super || @no_user_opts
17
+ end
18
+
19
+ def output_self
20
+ ivars = if Object === @interrogatee
21
+ Pry::Method.safe_send(@interrogatee, :instance_variables)
22
+ else
23
+ [] #TODO: BasicObject support
24
+ end
25
+ kvars = Pry::Method.safe_send(interrogatee_mod, :class_variables)
26
+ ivars_out = output_section('instance variables', format(:instance_var, ivars))
27
+ kvars_out = output_section('class variables', format(:class_var, kvars))
28
+ ivars_out + kvars_out
29
+ end
30
+
31
+ private
32
+
33
+ def format(type, vars)
34
+ vars.sort_by { |var| var.to_s.downcase }.map { |var| color(type, var) }
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,18 @@
1
+ module Pry::Command::Ls::Interrogatable
2
+
3
+ private
4
+
5
+ def interrogating_a_module?
6
+ Module === @interrogatee
7
+ end
8
+
9
+ def interrogatee_mod
10
+ if interrogating_a_module?
11
+ @interrogatee
12
+ else
13
+ singleton = Pry::Method.singleton_class_of(@interrogatee)
14
+ singleton.ancestors.grep(::Class).reject { |c| c == singleton }.first
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,49 @@
1
+ module Pry::Command::Ls::JRubyHacks
2
+
3
+ private
4
+
5
+ # JRuby creates lots of aliases for methods imported from java in an attempt
6
+ # to make life easier for ruby programmers. (e.g. getFooBar becomes
7
+ # get_foo_bar and foo_bar, and maybe foo_bar? if it returns a Boolean). The
8
+ # full transformations are in the assignAliases method of:
9
+ # https://github.com/jruby/jruby/blob/master/src/org/jruby/javasupport/JavaClass.java
10
+ #
11
+ # This has the unfortunate side-effect of making the output of ls even more
12
+ # incredibly verbose than it normally would be for these objects; and so we
13
+ # filter out all but the nicest of these aliases here.
14
+ #
15
+ # TODO: This is a little bit vague, better heuristics could be used.
16
+ # JRuby also has a lot of scala-specific logic, which we don't copy.
17
+ def trim_jruby_aliases(methods)
18
+ grouped = methods.group_by do |m|
19
+ m.name.sub(/\A(is|get|set)(?=[A-Z_])/, '').gsub(/[_?=]/, '').downcase
20
+ end
21
+
22
+ grouped.map do |key, values|
23
+ values = values.sort_by do |m|
24
+ rubbishness(m.name)
25
+ end
26
+
27
+ found = []
28
+ values.select do |x|
29
+ (!found.any? { |y| x == y }) && found << x
30
+ end
31
+ end.flatten(1)
32
+ end
33
+
34
+ # When removing jruby aliases, we want to keep the alias that is
35
+ # "least rubbish" according to this metric.
36
+ def rubbishness(name)
37
+ name.each_char.map { |x|
38
+ case x
39
+ when /[A-Z]/
40
+ 1
41
+ when '?', '=', '!'
42
+ -2
43
+ else
44
+ 0
45
+ end
46
+ }.inject(&:+) + (name.size / 100.0)
47
+ end
48
+
49
+ end
@@ -0,0 +1,35 @@
1
+ class Pry
2
+ class Command::Ls < Pry::ClassCommand
3
+ class LocalNames < Pry::Command::Ls::Formatter
4
+
5
+ def initialize(no_user_opts, args, _pry_)
6
+ super(_pry_)
7
+ @no_user_opts = no_user_opts
8
+ @args = args
9
+ @sticky_locals = _pry_.sticky_locals
10
+ end
11
+
12
+ def correct_opts?
13
+ super || (@no_user_opts && @args.empty?)
14
+ end
15
+
16
+ def output_self
17
+ local_vars = grep.regexp[@target.eval('local_variables')]
18
+ output_section('locals', format(local_vars))
19
+ end
20
+
21
+ private
22
+
23
+ def format(locals)
24
+ locals.sort_by(&:downcase).map do |name|
25
+ if @sticky_locals.include?(name.to_sym)
26
+ color(:pry_var, name)
27
+ else
28
+ color(:local_var, name)
29
+ end
30
+ end
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ class Pry
2
+ class Command::Ls < Pry::ClassCommand
3
+ class LocalVars < Pry::Command::Ls::Formatter
4
+
5
+ def initialize(opts, _pry_)
6
+ super(_pry_)
7
+ @default_switch = opts[:locals]
8
+ @sticky_locals = _pry_.sticky_locals
9
+ end
10
+
11
+ def output_self
12
+ name_value_pairs = @target.eval('local_variables').reject { |e|
13
+ @sticky_locals.keys.include?(e.to_sym)
14
+ }.map { |name|
15
+ [name, (@target.eval(name.to_s))]
16
+ }
17
+ format(name_value_pairs).join('')
18
+ end
19
+
20
+ private
21
+
22
+ def format(name_value_pairs)
23
+ name_value_pairs.sort_by { |name, value|
24
+ value.to_s.size
25
+ }.reverse.map { |name, value|
26
+ colorized_assignment_style(name, format_value(value))
27
+ }
28
+ end
29
+
30
+ def colorized_assignment_style(lhs, rhs, desired_width = 7)
31
+ colorized_lhs = color(:local_var, lhs)
32
+ color_escape_padding = colorized_lhs.size - lhs.size
33
+ pad = desired_width + color_escape_padding
34
+ "%-#{pad}s = %s" % [color(:local_var, colorized_lhs), rhs]
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,70 @@
1
+ require 'pry/commands/ls/grep'
2
+ require 'pry/commands/ls/formatter'
3
+ require 'pry/commands/ls/globals'
4
+ require 'pry/commands/ls/constants'
5
+ require 'pry/commands/ls/methods'
6
+ require 'pry/commands/ls/self_methods'
7
+ require 'pry/commands/ls/instance_vars'
8
+ require 'pry/commands/ls/local_names'
9
+ require 'pry/commands/ls/local_vars'
10
+
11
+ class Pry
12
+ class Command::Ls < Pry::ClassCommand
13
+
14
+ class LsEntity
15
+ attr_reader :_pry_
16
+
17
+ def initialize(opts)
18
+ @interrogatee = opts[:interrogatee]
19
+ @no_user_opts = opts[:no_user_opts]
20
+ @opts = opts[:opts]
21
+ @args = opts[:args]
22
+ @grep = Grep.new(Regexp.new(opts[:opts][:G] || '.'))
23
+ @_pry_ = opts.delete(:_pry_)
24
+ end
25
+
26
+ def entities_table
27
+ entities.map(&:write_out).reject { |o| !o }.join('')
28
+ end
29
+
30
+ private
31
+
32
+ def grep(entity)
33
+ entity.tap { |o| o.grep = @grep }
34
+ end
35
+
36
+ def globals
37
+ grep Globals.new(@opts, _pry_)
38
+ end
39
+
40
+ def constants
41
+ grep Constants.new(@interrogatee, @no_user_opts, @opts, _pry_)
42
+ end
43
+
44
+ def methods
45
+ grep(Methods.new(@interrogatee, @no_user_opts, @opts, _pry_))
46
+ end
47
+
48
+ def self_methods
49
+ grep SelfMethods.new(@interrogatee, @no_user_opts, @opts, _pry_)
50
+ end
51
+
52
+ def instance_vars
53
+ grep InstanceVars.new(@interrogatee, @no_user_opts, @opts, _pry_)
54
+ end
55
+
56
+ def local_names
57
+ grep LocalNames.new(@no_user_opts, @args, _pry_)
58
+ end
59
+
60
+ def local_vars
61
+ LocalVars.new(@opts, _pry_)
62
+ end
63
+
64
+ def entities
65
+ [globals, constants, methods, self_methods, instance_vars, local_names,
66
+ local_vars]
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,57 @@
1
+ require 'pry/commands/ls/methods_helper'
2
+ require 'pry/commands/ls/interrogatable'
3
+
4
+ class Pry
5
+ class Command::Ls < Pry::ClassCommand
6
+ class Methods < Pry::Command::Ls::Formatter
7
+
8
+ include Pry::Command::Ls::Interrogatable
9
+ include Pry::Command::Ls::MethodsHelper
10
+
11
+ def initialize(interrogatee, no_user_opts, opts, _pry_)
12
+ super(_pry_)
13
+ @interrogatee = interrogatee
14
+ @no_user_opts = no_user_opts
15
+ @default_switch = opts[:methods]
16
+ @instance_methods_switch = opts['instance-methods']
17
+ @ppp_switch = opts[:ppp]
18
+ @jruby_switch = opts['all-java']
19
+ @quiet_switch = opts[:quiet]
20
+ @verbose_switch = opts[:verbose]
21
+ end
22
+
23
+ def output_self
24
+ methods = all_methods.group_by(&:owner)
25
+ # Reverse the resolution order so that the most useful information
26
+ # appears right by the prompt.
27
+ resolution_order.take_while(&below_ceiling).reverse.map do |klass|
28
+ methods_here = (methods[klass] || []).select { |m| grep.regexp[m.name] }
29
+ heading = "#{ Pry::WrappedModule.new(klass).method_prefix }methods"
30
+ output_section(heading, format(methods_here))
31
+ end.join('')
32
+ end
33
+
34
+ private
35
+
36
+ def correct_opts?
37
+ super || @instance_methods_switch || @ppp_switch || @no_user_opts
38
+ end
39
+
40
+
41
+ # Get a lambda that can be used with `take_while` to prevent over-eager
42
+ # traversal of the Object's ancestry graph.
43
+ def below_ceiling
44
+ ceiling = if @quiet_switch
45
+ [Pry::Method.safe_send(interrogatee_mod, :ancestors)[1]] +
46
+ _pry_.config.ls.ceiling
47
+ elsif @verbose_switch
48
+ []
49
+ else
50
+ _pry_.config.ls.ceiling.dup
51
+ end
52
+ lambda { |klass| !ceiling.include?(klass) }
53
+ end
54
+
55
+ end
56
+ end
57
+ end