pry 0.9.10pre1-i386-mingw32 → 0.9.11-i386-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +3 -1
 - data/CHANGELOG +63 -2
 - data/CONTRIBUTORS +43 -25
 - data/Gemfile +7 -0
 - data/Guardfile +62 -0
 - data/README.markdown +4 -4
 - data/Rakefile +34 -35
 - data/lib/pry.rb +107 -54
 - data/lib/pry/cli.rb +34 -11
 - data/lib/pry/code.rb +165 -182
 - data/lib/pry/code/code_range.rb +70 -0
 - data/lib/pry/code/loc.rb +92 -0
 - data/lib/pry/code_object.rb +153 -0
 - data/lib/pry/command.rb +160 -22
 - data/lib/pry/command_set.rb +37 -26
 - data/lib/pry/commands.rb +4 -27
 - data/lib/pry/commands/amend_line.rb +99 -0
 - data/lib/pry/commands/bang.rb +20 -0
 - data/lib/pry/commands/bang_pry.rb +17 -0
 - data/lib/pry/commands/cat.rb +53 -0
 - data/lib/pry/commands/cat/abstract_formatter.rb +27 -0
 - data/lib/pry/commands/cat/exception_formatter.rb +78 -0
 - data/lib/pry/commands/cat/file_formatter.rb +84 -0
 - data/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
 - data/lib/pry/commands/cd.rb +30 -0
 - data/lib/pry/commands/code_collector.rb +165 -0
 - data/lib/pry/commands/deprecated_commands.rb +2 -0
 - data/lib/pry/commands/disable_pry.rb +27 -0
 - data/lib/pry/commands/easter_eggs.rb +112 -0
 - data/lib/pry/commands/edit.rb +206 -0
 - data/lib/pry/commands/edit/exception_patcher.rb +25 -0
 - data/lib/pry/commands/edit/file_and_line_locator.rb +38 -0
 - data/lib/pry/commands/edit/method_patcher.rb +122 -0
 - data/lib/pry/commands/exit.rb +42 -0
 - data/lib/pry/commands/exit_all.rb +29 -0
 - data/lib/pry/commands/exit_program.rb +24 -0
 - data/lib/pry/commands/find_method.rb +199 -0
 - data/lib/pry/commands/fix_indent.rb +19 -0
 - data/lib/pry/commands/gem_cd.rb +26 -0
 - data/lib/pry/commands/gem_install.rb +29 -0
 - data/lib/pry/commands/gem_list.rb +33 -0
 - data/lib/pry/commands/gem_open.rb +29 -0
 - data/lib/pry/commands/gist.rb +95 -0
 - data/lib/pry/commands/help.rb +164 -0
 - data/lib/pry/commands/hist.rb +161 -0
 - data/lib/pry/commands/import_set.rb +22 -0
 - data/lib/pry/commands/install_command.rb +51 -0
 - data/lib/pry/commands/jump_to.rb +29 -0
 - data/lib/pry/commands/ls.rb +339 -0
 - data/lib/pry/commands/nesting.rb +25 -0
 - data/lib/pry/commands/play.rb +69 -0
 - data/lib/pry/commands/pry_backtrace.rb +26 -0
 - data/lib/pry/commands/pry_version.rb +17 -0
 - data/lib/pry/commands/raise_up.rb +32 -0
 - data/lib/pry/commands/reload_code.rb +39 -0
 - data/lib/pry/commands/reset.rb +18 -0
 - data/lib/pry/commands/ri.rb +56 -0
 - data/lib/pry/commands/save_file.rb +61 -0
 - data/lib/pry/commands/shell_command.rb +43 -0
 - data/lib/pry/commands/shell_mode.rb +27 -0
 - data/lib/pry/commands/show_doc.rb +78 -0
 - data/lib/pry/commands/show_info.rb +139 -0
 - data/lib/pry/commands/show_input.rb +17 -0
 - data/lib/pry/commands/show_source.rb +37 -0
 - data/lib/pry/commands/simple_prompt.rb +22 -0
 - data/lib/pry/commands/stat.rb +40 -0
 - data/lib/pry/commands/switch_to.rb +23 -0
 - data/lib/pry/commands/toggle_color.rb +20 -0
 - data/lib/pry/commands/whereami.rb +114 -0
 - data/lib/pry/commands/wtf.rb +57 -0
 - data/lib/pry/completion.rb +120 -46
 - data/lib/pry/config.rb +11 -0
 - data/lib/pry/core_extensions.rb +30 -19
 - data/lib/pry/editor.rb +129 -0
 - data/lib/pry/helpers.rb +1 -0
 - data/lib/pry/helpers/base_helpers.rb +89 -119
 - data/lib/pry/helpers/command_helpers.rb +7 -122
 - data/lib/pry/helpers/table.rb +100 -0
 - data/lib/pry/helpers/text.rb +4 -4
 - data/lib/pry/history_array.rb +5 -0
 - data/lib/pry/hooks.rb +1 -3
 - data/lib/pry/indent.rb +104 -30
 - data/lib/pry/method.rb +66 -22
 - data/lib/pry/module_candidate.rb +26 -15
 - data/lib/pry/pager.rb +70 -0
 - data/lib/pry/plugins.rb +1 -2
 - data/lib/pry/pry_class.rb +63 -22
 - data/lib/pry/pry_instance.rb +58 -37
 - data/lib/pry/rubygem.rb +74 -0
 - data/lib/pry/terminal_info.rb +43 -0
 - data/lib/pry/test/helper.rb +185 -0
 - data/lib/pry/version.rb +1 -1
 - data/lib/pry/wrapped_module.rb +58 -24
 - data/pry.gemspec +21 -37
 - data/{test/test_cli.rb → spec/cli_spec.rb} +0 -0
 - data/spec/code_object_spec.rb +277 -0
 - data/{test/test_code.rb → spec/code_spec.rb} +19 -1
 - data/{test/test_command_helpers.rb → spec/command_helpers_spec.rb} +0 -0
 - data/{test/test_command_integration.rb → spec/command_integration_spec.rb} +38 -46
 - data/{test/test_command_set.rb → spec/command_set_spec.rb} +18 -1
 - data/{test/test_command.rb → spec/command_spec.rb} +250 -149
 - data/spec/commands/amend_line_spec.rb +247 -0
 - data/spec/commands/bang_spec.rb +19 -0
 - data/spec/commands/cat_spec.rb +164 -0
 - data/spec/commands/cd_spec.rb +250 -0
 - data/spec/commands/disable_pry_spec.rb +25 -0
 - data/spec/commands/edit_spec.rb +727 -0
 - data/spec/commands/exit_all_spec.rb +34 -0
 - data/spec/commands/exit_program_spec.rb +19 -0
 - data/spec/commands/exit_spec.rb +34 -0
 - data/{test/test_default_commands/test_find_method.rb → spec/commands/find_method_spec.rb} +27 -7
 - data/spec/commands/gem_list_spec.rb +26 -0
 - data/spec/commands/gist_spec.rb +75 -0
 - data/{test/test_default_commands/test_help.rb → spec/commands/help_spec.rb} +8 -9
 - data/spec/commands/hist_spec.rb +181 -0
 - data/spec/commands/jump_to_spec.rb +15 -0
 - data/spec/commands/ls_spec.rb +177 -0
 - data/spec/commands/play_spec.rb +140 -0
 - data/spec/commands/raise_up_spec.rb +56 -0
 - data/spec/commands/save_file_spec.rb +177 -0
 - data/spec/commands/show_doc_spec.rb +378 -0
 - data/spec/commands/show_input_spec.rb +17 -0
 - data/spec/commands/show_source_spec.rb +597 -0
 - data/spec/commands/whereami_spec.rb +154 -0
 - data/spec/completion_spec.rb +233 -0
 - data/spec/control_d_handler_spec.rb +58 -0
 - data/spec/editor_spec.rb +79 -0
 - data/{test/test_exception_whitelist.rb → spec/exception_whitelist_spec.rb} +0 -0
 - data/{test → spec/fixtures}/candidate_helper1.rb +0 -0
 - data/{test → spec/fixtures}/candidate_helper2.rb +0 -0
 - data/{test/test_default_commands → spec/fixtures}/example.erb +0 -0
 - data/spec/fixtures/example_nesting.rb +33 -0
 - data/spec/fixtures/show_source_doc_examples.rb +15 -0
 - data/{test → spec/fixtures}/testrc +0 -0
 - data/{test → spec/fixtures}/testrcbad +0 -0
 - data/spec/helper.rb +34 -0
 - data/spec/helpers/bacon.rb +86 -0
 - data/spec/helpers/mock_pry.rb +43 -0
 - data/spec/helpers/table_spec.rb +83 -0
 - data/{test/test_history_array.rb → spec/history_array_spec.rb} +21 -19
 - data/{test/test_hooks.rb → spec/hooks_spec.rb} +0 -0
 - data/{test/test_indent.rb → spec/indent_spec.rb} +24 -0
 - data/{test/test_input_stack.rb → spec/input_stack_spec.rb} +4 -0
 - data/{test/test_method.rb → spec/method_spec.rb} +65 -1
 - data/{test/test_prompt.rb → spec/prompt_spec.rb} +0 -0
 - data/{test/test_pry_defaults.rb → spec/pry_defaults_spec.rb} +14 -14
 - data/{test/test_pry_history.rb → spec/pry_history_spec.rb} +15 -0
 - data/spec/pry_output_spec.rb +95 -0
 - data/{test/test_pry.rb → spec/pry_spec.rb} +74 -32
 - data/{test/test_sticky_locals.rb → spec/sticky_locals_spec.rb} +27 -25
 - data/{test/test_syntax_checking.rb → spec/syntax_checking_spec.rb} +17 -1
 - data/{test/test_wrapped_module.rb → spec/wrapped_module_spec.rb} +92 -5
 - metadata +239 -115
 - data/examples/example_basic.rb +0 -15
 - data/examples/example_command_override.rb +0 -32
 - data/examples/example_commands.rb +0 -36
 - data/examples/example_hooks.rb +0 -9
 - data/examples/example_image_edit.rb +0 -67
 - data/examples/example_input.rb +0 -7
 - data/examples/example_input2.rb +0 -29
 - data/examples/example_output.rb +0 -11
 - data/examples/example_print.rb +0 -6
 - data/examples/example_prompt.rb +0 -9
 - data/examples/helper.rb +0 -6
 - data/lib/pry/default_commands/cd.rb +0 -81
 - data/lib/pry/default_commands/commands.rb +0 -62
 - data/lib/pry/default_commands/context.rb +0 -98
 - data/lib/pry/default_commands/easter_eggs.rb +0 -95
 - data/lib/pry/default_commands/editing.rb +0 -420
 - data/lib/pry/default_commands/find_method.rb +0 -169
 - data/lib/pry/default_commands/gems.rb +0 -84
 - data/lib/pry/default_commands/gist.rb +0 -187
 - data/lib/pry/default_commands/help.rb +0 -127
 - data/lib/pry/default_commands/hist.rb +0 -120
 - data/lib/pry/default_commands/input_and_output.rb +0 -306
 - data/lib/pry/default_commands/introspection.rb +0 -410
 - data/lib/pry/default_commands/ls.rb +0 -272
 - data/lib/pry/default_commands/misc.rb +0 -38
 - data/lib/pry/default_commands/navigating_pry.rb +0 -110
 - data/lib/pry/default_commands/whereami.rb +0 -92
 - data/lib/pry/extended_commands/experimental.rb +0 -7
 - data/test/helper.rb +0 -223
 - data/test/test_completion.rb +0 -62
 - data/test/test_control_d_handler.rb +0 -45
 - data/test/test_default_commands/test_cd.rb +0 -321
 - data/test/test_default_commands/test_context.rb +0 -288
 - data/test/test_default_commands/test_documentation.rb +0 -315
 - data/test/test_default_commands/test_gems.rb +0 -18
 - data/test/test_default_commands/test_input.rb +0 -428
 - data/test/test_default_commands/test_introspection.rb +0 -511
 - data/test/test_default_commands/test_ls.rb +0 -151
 - data/test/test_default_commands/test_shell.rb +0 -343
 - data/test/test_default_commands/test_show_source.rb +0 -432
 - data/test/test_pry_output.rb +0 -41
 
| 
         @@ -0,0 +1,139 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Pry
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Command::ShowInfo < Pry::ClassCommand
         
     | 
| 
      
 3 
     | 
    
         
            +
                extend Pry::Helpers::BaseHelpers
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                command_options :shellwords => false
         
     | 
| 
      
 6 
     | 
    
         
            +
                command_options :requires_gem => "ruby18_source_location" if mri_18?
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                def setup
         
     | 
| 
      
 9 
     | 
    
         
            +
                  require 'ruby18_source_location' if mri_18?
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def options(opt)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  opt.on :s, :super, "Select the 'super' method. Can be repeated to traverse the ancestors", :as => :count
         
     | 
| 
      
 14 
     | 
    
         
            +
                  opt.on :l, "line-numbers", "Show line numbers"
         
     | 
| 
      
 15 
     | 
    
         
            +
                  opt.on :b, "base-one", "Show line numbers but start numbering at 1 (useful for `amend-line` and `play` commands)"
         
     | 
| 
      
 16 
     | 
    
         
            +
                  opt.on :f, :flood, "Do not use a pager to view text longer than one screen"
         
     | 
| 
      
 17 
     | 
    
         
            +
                  opt.on :a, :all,   "Show all definitions and monkeypatches of the module/class"
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                def process
         
     | 
| 
      
 21 
     | 
    
         
            +
                  code_object = Pry::CodeObject.lookup(obj_name, _pry_, :super => opts[:super])
         
     | 
| 
      
 22 
     | 
    
         
            +
                  raise Pry::CommandError, "Couldn't locate #{obj_name}!" if !code_object
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  if show_all_modules?(code_object)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    # show all monkey patches for a module
         
     | 
| 
      
 26 
     | 
    
         
            +
                    result = content_and_headers_for_all_module_candidates(code_object)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  else
         
     | 
| 
      
 28 
     | 
    
         
            +
                    # show a specific code object
         
     | 
| 
      
 29 
     | 
    
         
            +
                    result = content_and_header_for_code_object(code_object)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  set_file_and_dir_locals(code_object.source_file)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  stagger_output result
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def content_and_header_for_code_object(code_object)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  header(code_object) << content_for(code_object)
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                def content_and_headers_for_all_module_candidates(mod)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  result = "Found #{mod.number_of_candidates} candidates for `#{mod.name}` definition:\n"
         
     | 
| 
      
 42 
     | 
    
         
            +
                  mod.number_of_candidates.times do |v|
         
     | 
| 
      
 43 
     | 
    
         
            +
                    candidate = mod.candidate(v)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 45 
     | 
    
         
            +
                      result << "\nCandidate #{v+1}/#{mod.number_of_candidates}: #{candidate.source_file} @ line #{candidate.source_line}:\n"
         
     | 
| 
      
 46 
     | 
    
         
            +
                      content = content_for(candidate)
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                      result << "Number of lines: #{content.lines.count}\n\n" << content
         
     | 
| 
      
 49 
     | 
    
         
            +
                    rescue Pry::RescuableException
         
     | 
| 
      
 50 
     | 
    
         
            +
                      result << "\nNo content found.\n"
         
     | 
| 
      
 51 
     | 
    
         
            +
                      next
         
     | 
| 
      
 52 
     | 
    
         
            +
                    end
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
                  result
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                # Generate a header (meta-data information) for all the code
         
     | 
| 
      
 58 
     | 
    
         
            +
                # object types: methods, modules, commands, procs...
         
     | 
| 
      
 59 
     | 
    
         
            +
                def header(code_object)
         
     | 
| 
      
 60 
     | 
    
         
            +
                  file_name, line_num = file_and_line_for(code_object)
         
     | 
| 
      
 61 
     | 
    
         
            +
                  h = "\n#{Pry::Helpers::Text.bold('From:')} #{file_name} "
         
     | 
| 
      
 62 
     | 
    
         
            +
                  h << method_header(code_object, line_num) if code_object.real_method_object?
         
     | 
| 
      
 63 
     | 
    
         
            +
                  h << "\n#{Pry::Helpers::Text.bold('Number of lines:')} " <<
         
     | 
| 
      
 64 
     | 
    
         
            +
                    "#{content_for(code_object).lines.count}\n\n"
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                def method_header(code_object, line_num)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  h = ""
         
     | 
| 
      
 69 
     | 
    
         
            +
                  h << (code_object.c_method? ? "(C Method):" : "@ line #{line_num}:")
         
     | 
| 
      
 70 
     | 
    
         
            +
                  h << method_sections(code_object)[:owner]
         
     | 
| 
      
 71 
     | 
    
         
            +
                  h << method_sections(code_object)[:visibility]
         
     | 
| 
      
 72 
     | 
    
         
            +
                  h << method_sections(code_object)[:signature]
         
     | 
| 
      
 73 
     | 
    
         
            +
                  h
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                def method_sections(code_object)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  {
         
     | 
| 
      
 78 
     | 
    
         
            +
                    :owner => "\n#{text.bold("Owner:")} #{code_object.owner || "N/A"}\n",
         
     | 
| 
      
 79 
     | 
    
         
            +
                    :visibility => "#{text.bold("Visibility:")} #{code_object.visibility}",
         
     | 
| 
      
 80 
     | 
    
         
            +
                    :signature => "\n#{text.bold("Signature:")} #{code_object.signature}"
         
     | 
| 
      
 81 
     | 
    
         
            +
                  }.merge(header_options) { |key, old, new| (new && old).to_s }
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                def header_options
         
     | 
| 
      
 85 
     | 
    
         
            +
                  {
         
     | 
| 
      
 86 
     | 
    
         
            +
                    :owner => true,
         
     | 
| 
      
 87 
     | 
    
         
            +
                    :visibility => true,
         
     | 
| 
      
 88 
     | 
    
         
            +
                    :signature => nil
         
     | 
| 
      
 89 
     | 
    
         
            +
                  }
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                def show_all_modules?(code_object)
         
     | 
| 
      
 93 
     | 
    
         
            +
                  code_object.is_a?(Pry::WrappedModule) && opts.present?(:all)
         
     | 
| 
      
 94 
     | 
    
         
            +
                end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                def obj_name
         
     | 
| 
      
 97 
     | 
    
         
            +
                  @obj_name ||= args.empty? ? nil : args.join(" ")
         
     | 
| 
      
 98 
     | 
    
         
            +
                end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                def use_line_numbers?
         
     | 
| 
      
 101 
     | 
    
         
            +
                  opts.present?(:b) || opts.present?(:l)
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                def start_line_for(code_object)
         
     | 
| 
      
 105 
     | 
    
         
            +
                  if opts.present?(:'base-one')
         
     | 
| 
      
 106 
     | 
    
         
            +
                    1
         
     | 
| 
      
 107 
     | 
    
         
            +
                  else
         
     | 
| 
      
 108 
     | 
    
         
            +
                    code_object.source_line || 1
         
     | 
| 
      
 109 
     | 
    
         
            +
                  end
         
     | 
| 
      
 110 
     | 
    
         
            +
                end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                # takes into account possible yard docs, and returns yard_file / yard_line
         
     | 
| 
      
 113 
     | 
    
         
            +
                # Also adjusts for start line of comments (using start_line_for), which it has to infer
         
     | 
| 
      
 114 
     | 
    
         
            +
                # by subtracting number of lines of comment from start line of code_object
         
     | 
| 
      
 115 
     | 
    
         
            +
                def file_and_line_for(code_object)
         
     | 
| 
      
 116 
     | 
    
         
            +
                  if code_object.module_with_yard_docs?
         
     | 
| 
      
 117 
     | 
    
         
            +
                    [code_object.yard_file, code_object.yard_line]
         
     | 
| 
      
 118 
     | 
    
         
            +
                  else
         
     | 
| 
      
 119 
     | 
    
         
            +
                    [code_object.source_file, start_line_for(code_object)]
         
     | 
| 
      
 120 
     | 
    
         
            +
                  end
         
     | 
| 
      
 121 
     | 
    
         
            +
                end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                def complete(input)
         
     | 
| 
      
 124 
     | 
    
         
            +
                  if input =~ /([^ ]*)#([a-z0-9_]*)\z/
         
     | 
| 
      
 125 
     | 
    
         
            +
                    prefix, search = [$1, $2]
         
     | 
| 
      
 126 
     | 
    
         
            +
                    methods = begin
         
     | 
| 
      
 127 
     | 
    
         
            +
                                Pry::Method.all_from_class(binding.eval(prefix))
         
     | 
| 
      
 128 
     | 
    
         
            +
                              rescue RescuableException => e
         
     | 
| 
      
 129 
     | 
    
         
            +
                                return super
         
     | 
| 
      
 130 
     | 
    
         
            +
                              end
         
     | 
| 
      
 131 
     | 
    
         
            +
                    methods.map do |method|
         
     | 
| 
      
 132 
     | 
    
         
            +
                      [prefix, method.name].join('#') if method.name.start_with?(search)
         
     | 
| 
      
 133 
     | 
    
         
            +
                    end.compact
         
     | 
| 
      
 134 
     | 
    
         
            +
                  else
         
     | 
| 
      
 135 
     | 
    
         
            +
                    super
         
     | 
| 
      
 136 
     | 
    
         
            +
                  end
         
     | 
| 
      
 137 
     | 
    
         
            +
                end
         
     | 
| 
      
 138 
     | 
    
         
            +
              end
         
     | 
| 
      
 139 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Pry
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Command::ShowInput < Pry::ClassCommand
         
     | 
| 
      
 3 
     | 
    
         
            +
                match 'show-input'
         
     | 
| 
      
 4 
     | 
    
         
            +
                group 'Editing'
         
     | 
| 
      
 5 
     | 
    
         
            +
                description 'Show the contents of the input buffer for the current multi-line expression.'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                banner <<-'BANNER'
         
     | 
| 
      
 8 
     | 
    
         
            +
                  Show the contents of the input buffer for the current multi-line expression.
         
     | 
| 
      
 9 
     | 
    
         
            +
                BANNER
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def process
         
     | 
| 
      
 12 
     | 
    
         
            +
                  output.puts Code.new(eval_string).with_line_numbers
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              Pry::Commands.add_command(Pry::Command::ShowInput)
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'pry/commands/show_info'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class Pry
         
     | 
| 
      
 4 
     | 
    
         
            +
              class Command::ShowSource < Command::ShowInfo
         
     | 
| 
      
 5 
     | 
    
         
            +
                match 'show-source'
         
     | 
| 
      
 6 
     | 
    
         
            +
                group 'Introspection'
         
     | 
| 
      
 7 
     | 
    
         
            +
                description 'Show the source for a method or class.'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                banner <<-'BANNER'
         
     | 
| 
      
 10 
     | 
    
         
            +
                  Usage:   show-source [OPTIONS] [METH|CLASS]
         
     | 
| 
      
 11 
     | 
    
         
            +
                  Aliases: $, show-method
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  Show the source for a method or class. Tries instance methods first and then
         
     | 
| 
      
 14 
     | 
    
         
            +
                  methods by default.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  show-source hi_method
         
     | 
| 
      
 17 
     | 
    
         
            +
                  show-source hi_method
         
     | 
| 
      
 18 
     | 
    
         
            +
                  show-source Pry#rep     # source for Pry#rep method
         
     | 
| 
      
 19 
     | 
    
         
            +
                  show-source Pry         # for Pry class
         
     | 
| 
      
 20 
     | 
    
         
            +
                  show-source Pry -a      # for all Pry class definitions (all monkey patches)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  show-source Pry --super # for superclass of Pry (Object class)
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  https://github.com/pry/pry/wiki/Source-browsing#wiki-Show_method
         
     | 
| 
      
 24 
     | 
    
         
            +
                BANNER
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                # The source for code_object prepared for display.
         
     | 
| 
      
 27 
     | 
    
         
            +
                def content_for(code_object)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  raise CommandError, "Cannot locate source!" if !code_object.source
         
     | 
| 
      
 29 
     | 
    
         
            +
                  Code.new(code_object.source, start_line_for(code_object)).
         
     | 
| 
      
 30 
     | 
    
         
            +
                    with_line_numbers(use_line_numbers?).to_s
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              Pry::Commands.add_command(Pry::Command::ShowSource)
         
     | 
| 
      
 35 
     | 
    
         
            +
              Pry::Commands.alias_command 'show-method', 'show-source'
         
     | 
| 
      
 36 
     | 
    
         
            +
              Pry::Commands.alias_command '$', 'show-source'
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Pry
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Command::SimplePrompt < Pry::ClassCommand
         
     | 
| 
      
 3 
     | 
    
         
            +
                match 'simple-prompt'
         
     | 
| 
      
 4 
     | 
    
         
            +
                group 'Misc'
         
     | 
| 
      
 5 
     | 
    
         
            +
                description 'Toggle the simple prompt.'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                banner <<-'BANNER'
         
     | 
| 
      
 8 
     | 
    
         
            +
                  Toggle the simple prompt.
         
     | 
| 
      
 9 
     | 
    
         
            +
                BANNER
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def process
         
     | 
| 
      
 12 
     | 
    
         
            +
                  case _pry_.prompt
         
     | 
| 
      
 13 
     | 
    
         
            +
                  when Pry::SIMPLE_PROMPT
         
     | 
| 
      
 14 
     | 
    
         
            +
                    _pry_.pop_prompt
         
     | 
| 
      
 15 
     | 
    
         
            +
                  else
         
     | 
| 
      
 16 
     | 
    
         
            +
                    _pry_.push_prompt Pry::SIMPLE_PROMPT
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              Pry::Commands.add_command(Pry::Command::SimplePrompt)
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Pry
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Command::Stat < Pry::ClassCommand
         
     | 
| 
      
 3 
     | 
    
         
            +
                match 'stat'
         
     | 
| 
      
 4 
     | 
    
         
            +
                group 'Introspection'
         
     | 
| 
      
 5 
     | 
    
         
            +
                description 'View method information and set _file_ and _dir_ locals.'
         
     | 
| 
      
 6 
     | 
    
         
            +
                command_options :shellwords => false
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                banner <<-'BANNER'
         
     | 
| 
      
 9 
     | 
    
         
            +
                    Usage: stat [OPTIONS] [METH]
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    Show method information for method METH and set _file_ and _dir_ locals.
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    stat hello_method
         
     | 
| 
      
 14 
     | 
    
         
            +
                BANNER
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def options(opt)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  method_options(opt)
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                def process
         
     | 
| 
      
 21 
     | 
    
         
            +
                  meth = method_object
         
     | 
| 
      
 22 
     | 
    
         
            +
                  aliases = meth.aliases
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  output.puts unindent <<-EOS
         
     | 
| 
      
 25 
     | 
    
         
            +
                    Method Information:
         
     | 
| 
      
 26 
     | 
    
         
            +
                    --
         
     | 
| 
      
 27 
     | 
    
         
            +
                    Name: #{meth.name}
         
     | 
| 
      
 28 
     | 
    
         
            +
                    Alias#{ "es" if aliases.length > 1 }: #{ aliases.any? ? aliases.join(", ") : "None." }
         
     | 
| 
      
 29 
     | 
    
         
            +
                    Owner: #{meth.owner ? meth.owner : "Unknown"}
         
     | 
| 
      
 30 
     | 
    
         
            +
                    Visibility: #{meth.visibility}
         
     | 
| 
      
 31 
     | 
    
         
            +
                    Type: #{meth.is_a?(::Method) ? "Bound" : "Unbound"}
         
     | 
| 
      
 32 
     | 
    
         
            +
                    Arity: #{meth.arity}
         
     | 
| 
      
 33 
     | 
    
         
            +
                    Method Signature: #{meth.signature}
         
     | 
| 
      
 34 
     | 
    
         
            +
                    Source Location: #{meth.source_location ? meth.source_location.join(":") : "Not found."}
         
     | 
| 
      
 35 
     | 
    
         
            +
                  EOS
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              Pry::Commands.add_command(Pry::Command::Stat)
         
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Pry
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Command::SwitchTo < Pry::ClassCommand
         
     | 
| 
      
 3 
     | 
    
         
            +
                match 'switch-to'
         
     | 
| 
      
 4 
     | 
    
         
            +
                group 'Navigating Pry'
         
     | 
| 
      
 5 
     | 
    
         
            +
                description 'Start a new subsession on a binding in the current stack.'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                banner <<-'BANNER'
         
     | 
| 
      
 8 
     | 
    
         
            +
                  Start a new subsession on a binding in the current stack (numbered by nesting).
         
     | 
| 
      
 9 
     | 
    
         
            +
                BANNER
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def process(selection)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  selection = selection.to_i
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  if selection < 0 || selection > _pry_.binding_stack.size - 1
         
     | 
| 
      
 15 
     | 
    
         
            +
                    raise CommandError, "Invalid binding index #{selection} - use `nesting` command to view valid indices."
         
     | 
| 
      
 16 
     | 
    
         
            +
                  else
         
     | 
| 
      
 17 
     | 
    
         
            +
                    Pry.start(_pry_.binding_stack[selection])
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              Pry::Commands.add_command(Pry::Command::SwitchTo)
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Pry
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Command::ToggleColor < Pry::ClassCommand
         
     | 
| 
      
 3 
     | 
    
         
            +
                match 'toggle-color'
         
     | 
| 
      
 4 
     | 
    
         
            +
                group 'Misc'
         
     | 
| 
      
 5 
     | 
    
         
            +
                description 'Toggle syntax highlighting.'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                banner <<-'BANNER'
         
     | 
| 
      
 8 
     | 
    
         
            +
                  Usage: toggle-color
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  Toggle syntax highlighting.
         
     | 
| 
      
 11 
     | 
    
         
            +
                BANNER
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def process
         
     | 
| 
      
 14 
     | 
    
         
            +
                  Pry.color = !Pry.color
         
     | 
| 
      
 15 
     | 
    
         
            +
                  output.puts "Syntax highlighting #{Pry.color ? "on" : "off"}"
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              Pry::Commands.add_command(Pry::Command::ToggleColor)
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,114 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Pry
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Command::Whereami < Pry::ClassCommand
         
     | 
| 
      
 3 
     | 
    
         
            +
                match 'whereami'
         
     | 
| 
      
 4 
     | 
    
         
            +
                description 'Show code surrounding the current context.'
         
     | 
| 
      
 5 
     | 
    
         
            +
                group 'Context'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                banner <<-'BANNER'
         
     | 
| 
      
 8 
     | 
    
         
            +
                  Usage: whereami [-qn] [N]
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  Describe the current location. If you use `binding.pry` inside a method then
         
     | 
| 
      
 11 
     | 
    
         
            +
                  whereami will print out the source for that method.
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  If a number is passed, then N lines before and after the current line will be
         
     | 
| 
      
 14 
     | 
    
         
            +
                  shown instead of the method itself.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  The `-q` flag can be used to suppress error messages in the case that there's
         
     | 
| 
      
 17 
     | 
    
         
            +
                  no code to show. This is used by pry in the default before_session hook to show
         
     | 
| 
      
 18 
     | 
    
         
            +
                  you when you arrive at a `binding.pry`.
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  The `-n` flag can be used to hide line numbers so that code can be copy/pasted
         
     | 
| 
      
 21 
     | 
    
         
            +
                  effectively.
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  When pry was started on an Object and there is no associated method, whereami
         
     | 
| 
      
 24 
     | 
    
         
            +
                  will instead output a brief description of the current object.
         
     | 
| 
      
 25 
     | 
    
         
            +
                BANNER
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                def setup
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @method = Pry::Method.from_binding(target)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @file = target.eval('__FILE__')
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @line = target.eval('__LINE__')
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def options(opt)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  opt.on :q, :quiet,             "Don't display anything in case of an error"
         
     | 
| 
      
 35 
     | 
    
         
            +
                  opt.on :n, :"no-line-numbers", "Do not display line numbers"
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                def code
         
     | 
| 
      
 39 
     | 
    
         
            +
                  @code ||= if show_method?
         
     | 
| 
      
 40 
     | 
    
         
            +
                              Pry::Code.from_method(@method)
         
     | 
| 
      
 41 
     | 
    
         
            +
                            else
         
     | 
| 
      
 42 
     | 
    
         
            +
                              Pry::Code.from_file(@file).around(@line, window_size)
         
     | 
| 
      
 43 
     | 
    
         
            +
                            end
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                def location
         
     | 
| 
      
 47 
     | 
    
         
            +
                  "#{@file} @ line #{@line} #{@method && @method.name_with_owner}"
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                def process
         
     | 
| 
      
 51 
     | 
    
         
            +
                  if nothing_to_do?
         
     | 
| 
      
 52 
     | 
    
         
            +
                    return
         
     | 
| 
      
 53 
     | 
    
         
            +
                  elsif internal_binding?(target)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    handle_internal_binding
         
     | 
| 
      
 55 
     | 
    
         
            +
                    return
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                  set_file_and_dir_locals(@file)
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  output.puts "\n#{text.bold('From:')} #{location}:\n\n"
         
     | 
| 
      
 61 
     | 
    
         
            +
                  output.puts code.with_line_numbers(use_line_numbers?).with_marker(marker)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  output.puts
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                private
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                def nothing_to_do?
         
     | 
| 
      
 68 
     | 
    
         
            +
                  opts.quiet? && (internal_binding?(target) || !code?)
         
     | 
| 
      
 69 
     | 
    
         
            +
                end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                def use_line_numbers?
         
     | 
| 
      
 72 
     | 
    
         
            +
                  !opts.present?(:n)
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                def marker
         
     | 
| 
      
 76 
     | 
    
         
            +
                  !opts.present?(:n) && @line
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                def top_level?
         
     | 
| 
      
 80 
     | 
    
         
            +
                  target_self == TOPLEVEL_BINDING.eval("self")
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                def handle_internal_binding
         
     | 
| 
      
 84 
     | 
    
         
            +
                  if top_level?
         
     | 
| 
      
 85 
     | 
    
         
            +
                    output.puts "At the top level."
         
     | 
| 
      
 86 
     | 
    
         
            +
                  else
         
     | 
| 
      
 87 
     | 
    
         
            +
                    output.puts "Inside #{Pry.view_clip(target_self)}."
         
     | 
| 
      
 88 
     | 
    
         
            +
                  end
         
     | 
| 
      
 89 
     | 
    
         
            +
                end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                def show_method?
         
     | 
| 
      
 92 
     | 
    
         
            +
                  args.empty? && @method && @method.source? && @method.source_range.count < 20 &&
         
     | 
| 
      
 93 
     | 
    
         
            +
                  # These checks are needed in case of an eval with a binding and file/line
         
     | 
| 
      
 94 
     | 
    
         
            +
                  # numbers set to outside the function. As in rails' use of ERB.
         
     | 
| 
      
 95 
     | 
    
         
            +
                  @method.source_file == @file && @method.source_range.include?(@line)
         
     | 
| 
      
 96 
     | 
    
         
            +
                end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                def code?
         
     | 
| 
      
 99 
     | 
    
         
            +
                  !!code
         
     | 
| 
      
 100 
     | 
    
         
            +
                rescue MethodSource::SourceNotFoundError
         
     | 
| 
      
 101 
     | 
    
         
            +
                  false
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                def window_size
         
     | 
| 
      
 105 
     | 
    
         
            +
                  if args.empty?
         
     | 
| 
      
 106 
     | 
    
         
            +
                    Pry.config.default_window_size
         
     | 
| 
      
 107 
     | 
    
         
            +
                  else
         
     | 
| 
      
 108 
     | 
    
         
            +
                    args.first.to_i
         
     | 
| 
      
 109 
     | 
    
         
            +
                  end
         
     | 
| 
      
 110 
     | 
    
         
            +
                end
         
     | 
| 
      
 111 
     | 
    
         
            +
              end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
              Pry::Commands.add_command(Pry::Command::Whereami)
         
     | 
| 
      
 114 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,57 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Pry
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Command::Wtf < Pry::ClassCommand
         
     | 
| 
      
 3 
     | 
    
         
            +
                match /wtf([?!]*)/
         
     | 
| 
      
 4 
     | 
    
         
            +
                group 'Context'
         
     | 
| 
      
 5 
     | 
    
         
            +
                description 'Show the backtrace of the most recent exception.'
         
     | 
| 
      
 6 
     | 
    
         
            +
                options :listing => 'wtf?'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                banner <<-'BANNER'
         
     | 
| 
      
 9 
     | 
    
         
            +
                  Usage: wtf[?|!]
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  Show's a few lines of the backtrace of the most recent exception (also available
         
     | 
| 
      
 12 
     | 
    
         
            +
                  as `_ex_.backtrace`). If you want to see more lines, add more question marks or
         
     | 
| 
      
 13 
     | 
    
         
            +
                  exclamation marks.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  wtf?
         
     | 
| 
      
 16 
     | 
    
         
            +
                  wtf?!???!?!?
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  # To see the entire backtrace, pass the `-v` or `--verbose` flag.
         
     | 
| 
      
 19 
     | 
    
         
            +
                  wtf -v
         
     | 
| 
      
 20 
     | 
    
         
            +
                BANNER
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def options(opt)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  opt.on :v, :verbose, "Show the full backtrace"
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                def process
         
     | 
| 
      
 27 
     | 
    
         
            +
                  raise Pry::CommandError, "No most-recent exception" unless exception
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  output.puts "#{text.bold('Exception:')} #{exception.class}: #{exception}\n--"
         
     | 
| 
      
 30 
     | 
    
         
            +
                  if opts.verbose?
         
     | 
| 
      
 31 
     | 
    
         
            +
                    output.puts with_line_numbers(backtrace)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  else
         
     | 
| 
      
 33 
     | 
    
         
            +
                    output.puts with_line_numbers(backtrace.first(size_of_backtrace))
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                private
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def exception
         
     | 
| 
      
 40 
     | 
    
         
            +
                  _pry_.last_exception
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def with_line_numbers(bt)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  Pry::Code.new(bt, 0, :text).with_line_numbers.to_s
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                def backtrace
         
     | 
| 
      
 48 
     | 
    
         
            +
                  exception.backtrace
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                def size_of_backtrace
         
     | 
| 
      
 52 
     | 
    
         
            +
                  [captures[0].size, 0.5].max * 10
         
     | 
| 
      
 53 
     | 
    
         
            +
              end
         
     | 
| 
      
 54 
     | 
    
         
            +
            end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            Pry::Commands.add_command(Pry::Command::Wtf)
         
     | 
| 
      
 57 
     | 
    
         
            +
            end
         
     |