pry 0.9.7.4-i386-mingw32 → 0.9.8-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/.gitignore +2 -3
- data/CHANGELOG +43 -0
- data/README.markdown +3 -1
- data/Rakefile +51 -32
- data/bin/pry +2 -80
- data/lib/pry.rb +33 -26
- data/lib/pry/cli.rb +152 -0
- data/lib/pry/code.rb +351 -0
- data/lib/pry/command.rb +422 -0
- data/lib/pry/command_set.rb +259 -129
- data/lib/pry/commands.rb +0 -1
- data/lib/pry/config.rb +43 -9
- data/lib/pry/default_commands/context.rb +109 -92
- data/lib/pry/default_commands/documentation.rb +174 -63
- data/lib/pry/default_commands/easter_eggs.rb +26 -2
- data/lib/pry/default_commands/gems.rb +65 -37
- data/lib/pry/default_commands/input.rb +175 -243
- data/lib/pry/default_commands/introspection.rb +173 -112
- data/lib/pry/default_commands/ls.rb +96 -114
- data/lib/pry/default_commands/shell.rb +175 -70
- data/lib/pry/helpers/base_helpers.rb +7 -2
- data/lib/pry/helpers/command_helpers.rb +71 -77
- data/lib/pry/helpers/options_helpers.rb +10 -41
- data/lib/pry/helpers/text.rb +24 -4
- data/lib/pry/history.rb +55 -17
- data/lib/pry/history_array.rb +2 -0
- data/lib/pry/hooks.rb +252 -0
- data/lib/pry/indent.rb +9 -5
- data/lib/pry/method.rb +149 -50
- data/lib/pry/plugins.rb +12 -4
- data/lib/pry/pry_class.rb +69 -26
- data/lib/pry/pry_instance.rb +187 -115
- data/lib/pry/version.rb +1 -1
- data/lib/pry/wrapped_module.rb +73 -0
- data/man/pry.1 +195 -0
- data/man/pry.1.html +204 -0
- data/man/pry.1.ronn +141 -0
- data/pry.gemspec +29 -32
- data/test/helper.rb +32 -36
- data/test/test_cli.rb +78 -0
- data/test/test_code.rb +201 -0
- data/test/test_command.rb +327 -0
- data/test/test_command_integration.rb +512 -0
- data/test/test_command_set.rb +338 -12
- data/test/test_completion.rb +1 -1
- data/test/test_default_commands.rb +1 -2
- data/test/test_default_commands/test_context.rb +27 -5
- data/test/test_default_commands/test_documentation.rb +20 -8
- data/test/test_default_commands/test_input.rb +84 -45
- data/test/test_default_commands/test_introspection.rb +74 -17
- data/test/test_default_commands/test_ls.rb +9 -36
- data/test/test_default_commands/test_shell.rb +240 -13
- data/test/test_hooks.rb +490 -0
- data/test/test_indent.rb +2 -0
- data/test/test_method.rb +60 -0
- data/test/test_pry.rb +29 -904
- data/test/test_pry_defaults.rb +380 -0
- data/test/test_pry_history.rb +24 -24
- data/test/test_syntax_checking.rb +63 -0
- data/test/test_wrapped_module.rb +71 -0
- metadata +50 -39
- data/lib/pry/command_context.rb +0 -53
- data/lib/pry/command_processor.rb +0 -181
- data/lib/pry/extended_commands/user_command_api.rb +0 -65
- data/test/test_command_processor.rb +0 -176
    
        data/.gitignore
    CHANGED
    
    
    
        data/CHANGELOG
    CHANGED
    
    | @@ -1,3 +1,46 @@ | |
| 1 | 
            +
            X/X/2012 version 0.9.8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            MAJOR NEW FEATURES
         | 
| 4 | 
            +
            - upgraded command api, https://github.com/pry/pry/wiki/Custom-commands
         | 
| 5 | 
            +
            - added a system of hooks for customizing pry behaviour
         | 
| 6 | 
            +
            - changed syntax checking to use eval() for improved accuracy
         | 
| 7 | 
            +
            - added save-file command
         | 
| 8 | 
            +
            - added gist command (removed gist-method, new gist command is more general)
         | 
| 9 | 
            +
             | 
| 10 | 
            +
             | 
| 11 | 
            +
            complete CHANGELOG:
         | 
| 12 | 
            +
            * CommandError's no longer cause the current input to be disgarded
         | 
| 13 | 
            +
            * Better syntax highlighting for rbx code code
         | 
| 14 | 
            +
            * added cat --in to show pry input history
         | 
| 15 | 
            +
            * prefixed temporary file names with 'pry'
         | 
| 16 | 
            +
            * show-doc now supports -l and -b options (line numbers)
         | 
| 17 | 
            +
            * play now supports -i and -d options
         | 
| 18 | 
            +
            * moved UserCommandAPI command-set to pry-developer_tools plugin
         | 
| 19 | 
            +
            * added :when_started event for hooks, called in Pry.start
         | 
| 20 | 
            +
            * added a man page
         | 
| 21 | 
            +
            * added rename method to Pry::CommandSet (commands can be renamed)
         | 
| 22 | 
            +
            * added CommandSet#{before_command,after_command} for enhancing builtin commands
         | 
| 23 | 
            +
            * added checking for namespace collisions with pry commands, set Pry.config.collision_warning
         | 
| 24 | 
            +
            * work around namespace collisions by ensuring lines starting with a space are executed as
         | 
| 25 | 
            +
            * ruby.work around namespace collisions by prensuring lines starting with a space are executed as ruby
         | 
| 26 | 
            +
            * added handlers for Ctrl+C (SIGINT) on jruby, these are now caught as in other ruby versions
         | 
| 27 | 
            +
            * removed dependency on ruby_parser
         | 
| 28 | 
            +
            * prevented colours leaking across the pry prompt
         | 
| 29 | 
            +
            * fixed edge cases in Pry::Method, for methods with crazy names and methods that have been 'undef'd
         | 
| 30 | 
            +
            * refactored history handling code for clarity and correctness
         | 
| 31 | 
            +
            * added Pry::WrappedModule as a counterpart to Pry::Method
         | 
| 32 | 
            +
            * made a trailing , cause pry to wait for further input
         | 
| 33 | 
            +
            * removed gist-method command, added gist command
         | 
| 34 | 
            +
            * added pry-backtrace command to show history of current session
         | 
| 35 | 
            +
            * fixed whereami within 'super' methods
         | 
| 36 | 
            +
            * replaced inline version guards by Pry::Helpers::BaseHelpers.{rbx?,jruby?,windows?} etc.
         | 
| 37 | 
            +
            * removed the CommandProcessor, its functionality is part of the new Command class
         | 
| 38 | 
            +
            * changed cd .. at the top level so it doesn't quit pry.
         | 
| 39 | 
            +
            * changed edit-command to no-longer need a command set argument
         | 
| 40 | 
            +
            * fixed empty lines so that they don't replace _ by nil
         | 
| 41 | 
            +
            * fixed SyntaxErrors at the REPL level so they don't replace _ex_.
         | 
| 42 | 
            +
            <TODO: everything that happened after f3262e32700709a6998579a9f71cdc6b8f4a695e>
         | 
| 43 | 
            +
             | 
| 1 44 | 
             
            5/11/2011 version 0.9.7.4 hotfix
         | 
| 2 45 | 
             
            * ls -M now works in modules (bugfix)
         | 
| 3 46 | 
             
            * added exception msg for bad cd object/path
         | 
    
        data/README.markdown
    CHANGED
    
    
    
        data/Rakefile
    CHANGED
    
    | @@ -1,32 +1,41 @@ | |
| 1 1 | 
             
            require 'rake/clean'
         | 
| 2 | 
            -
            require ' | 
| 2 | 
            +
            require 'rubygems/package_task'
         | 
| 3 3 |  | 
| 4 4 | 
             
            $:.unshift 'lib'
         | 
| 5 5 | 
             
            require 'pry/version'
         | 
| 6 6 |  | 
| 7 | 
            -
            CLOBBER.include( | 
| 8 | 
            -
            CLEAN.include( | 
| 9 | 
            -
                          "**/*.rbc", "**/.#*.*")
         | 
| 7 | 
            +
            CLOBBER.include('**/*~', '**/*#*', '**/*.log')
         | 
| 8 | 
            +
            CLEAN.include('**/*#*', '**/*#*.*', '**/*_flymake*.*', '**/*_flymake', '**/*.rbc', '**/.#*.*')
         | 
| 10 9 |  | 
| 11 10 | 
             
            def apply_spec_defaults(s)
         | 
| 12 | 
            -
              s.name =  | 
| 11 | 
            +
              s.name = 'pry'
         | 
| 13 12 | 
             
              s.summary = "An IRB alternative and runtime developer console"
         | 
| 14 13 | 
             
              s.version = Pry::VERSION
         | 
| 15 14 | 
             
              s.date = Time.now.strftime '%Y-%m-%d'
         | 
| 16 15 | 
             
              s.author = "John Mair (banisterfiend)"
         | 
| 17 16 | 
             
              s.email = 'jrmair@gmail.com'
         | 
| 18 17 | 
             
              s.description = s.summary
         | 
| 19 | 
            -
              s.homepage =  | 
| 20 | 
            -
              s.executables = [ | 
| 18 | 
            +
              s.homepage = 'http://pry.github.com'
         | 
| 19 | 
            +
              s.executables = ['pry']
         | 
| 21 20 | 
             
              s.files = `git ls-files`.split("\n")
         | 
| 22 21 | 
             
              s.test_files = `git ls-files -- test/*`.split("\n")
         | 
| 23 | 
            -
              s.add_dependency( | 
| 24 | 
            -
              s.add_dependency( | 
| 25 | 
            -
              s.add_dependency( | 
| 26 | 
            -
              s. | 
| 27 | 
            -
              s.add_development_dependency( | 
| 28 | 
            -
              s.add_development_dependency( | 
| 29 | 
            -
             | 
| 22 | 
            +
              s.add_dependency('coderay', '~> 1.0.5')
         | 
| 23 | 
            +
              s.add_dependency('slop', ['>= 2.4.3', '< 3'])
         | 
| 24 | 
            +
              s.add_dependency('method_source','~> 0.7')
         | 
| 25 | 
            +
              s.add_development_dependency('bacon', '~> 1.1')
         | 
| 26 | 
            +
              s.add_development_dependency('open4', '~> 1.3')
         | 
| 27 | 
            +
              s.add_development_dependency('rake', '~> 0.9')
         | 
| 28 | 
            +
            end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            def check_dependencies
         | 
| 31 | 
            +
              require 'bundler'
         | 
| 32 | 
            +
              Bundler.definition.missing_specs
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              eval('nil', TOPLEVEL_BINDING, '<main>') # workaround for issue #395
         | 
| 35 | 
            +
            rescue LoadError
         | 
| 36 | 
            +
              # if Bundler isn't installed, we'll just assume your setup is ok.
         | 
| 37 | 
            +
            rescue Bundler::GemNotFound
         | 
| 38 | 
            +
              raise RuntimeError, "You're missing one or more required gems. Run `bundle install` first."
         | 
| 30 39 | 
             
            end
         | 
| 31 40 |  | 
| 32 41 | 
             
            desc "Set up and run tests"
         | 
| @@ -34,38 +43,42 @@ task :default => [:test] | |
| 34 43 |  | 
| 35 44 | 
             
            desc "Run tests"
         | 
| 36 45 | 
             
            task :test do
         | 
| 46 | 
            +
              check_dependencies unless ENV['SKIP_DEP_CHECK']
         | 
| 37 47 | 
             
              sh "bacon -Itest -rubygems -a -q"
         | 
| 38 48 | 
             
            end
         | 
| 39 49 |  | 
| 40 | 
            -
            desc " | 
| 41 | 
            -
            task :profile do
         | 
| 42 | 
            -
              require 'profile'
         | 
| 43 | 
            -
              require 'pry'
         | 
| 44 | 
            -
              Pry.start(TOPLEVEL_BINDING, :input => StringIO.new('exit'))
         | 
| 45 | 
            -
            end
         | 
| 46 | 
            -
             | 
| 47 | 
            -
            desc "run pry"
         | 
| 50 | 
            +
            desc "Run pry"
         | 
| 48 51 | 
             
            task :pry do
         | 
| 52 | 
            +
              check_dependencies unless ENV['SKIP_DEP_CHECK']
         | 
| 49 53 | 
             
              load 'bin/pry'
         | 
| 50 54 | 
             
            end
         | 
| 51 55 |  | 
| 52 | 
            -
            desc " | 
| 56 | 
            +
            desc "Show pry version"
         | 
| 53 57 | 
             
            task :version do
         | 
| 54 58 | 
             
              puts "Pry version: #{Pry::VERSION}"
         | 
| 55 59 | 
             
            end
         | 
| 56 60 |  | 
| 61 | 
            +
            desc "Profile pry's startup time"
         | 
| 62 | 
            +
            task :profile do
         | 
| 63 | 
            +
              require 'profile'
         | 
| 64 | 
            +
              require 'pry'
         | 
| 65 | 
            +
              Pry.start(TOPLEVEL_BINDING, :input => StringIO.new('exit'))
         | 
| 66 | 
            +
            end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            desc "Build the gemspec file"
         | 
| 69 | 
            +
            task :gemspec => "ruby:gemspec"
         | 
| 70 | 
            +
             | 
| 57 71 | 
             
            namespace :ruby do
         | 
| 58 72 | 
             
              spec = Gem::Specification.new do |s|
         | 
| 59 73 | 
             
                apply_spec_defaults(s)
         | 
| 60 74 | 
             
                s.platform = Gem::Platform::RUBY
         | 
| 61 75 | 
             
              end
         | 
| 62 76 |  | 
| 63 | 
            -
               | 
| 77 | 
            +
              Gem::PackageTask.new(spec) do |pkg|
         | 
| 64 78 | 
             
                pkg.need_zip = false
         | 
| 65 79 | 
             
                pkg.need_tar = false
         | 
| 66 80 | 
             
              end
         | 
| 67 81 |  | 
| 68 | 
            -
              desc  "Generate gemspec file"
         | 
| 69 82 | 
             
              task :gemspec do
         | 
| 70 83 | 
             
                File.open("#{spec.name}.gemspec", "w") do |f|
         | 
| 71 84 | 
             
                  f << spec.to_ruby
         | 
| @@ -76,11 +89,11 @@ end | |
| 76 89 | 
             
            namespace :jruby do
         | 
| 77 90 | 
             
              spec = Gem::Specification.new do |s|
         | 
| 78 91 | 
             
                apply_spec_defaults(s)
         | 
| 79 | 
            -
                s.add_dependency( | 
| 80 | 
            -
                s.platform =  | 
| 92 | 
            +
                s.add_dependency('spoon', '~> 0.0')
         | 
| 93 | 
            +
                s.platform = 'java'
         | 
| 81 94 | 
             
              end
         | 
| 82 95 |  | 
| 83 | 
            -
               | 
| 96 | 
            +
              Gem::PackageTask.new(spec) do |pkg|
         | 
| 84 97 | 
             
                pkg.need_zip = false
         | 
| 85 98 | 
             
                pkg.need_tar = false
         | 
| 86 99 | 
             
              end
         | 
| @@ -91,11 +104,11 @@ end | |
| 91 104 | 
             
              namespace v do
         | 
| 92 105 | 
             
                spec = Gem::Specification.new do |s|
         | 
| 93 106 | 
             
                  apply_spec_defaults(s)
         | 
| 94 | 
            -
                  s.add_dependency( | 
| 107 | 
            +
                  s.add_dependency('win32console', '~> 1.3')
         | 
| 95 108 | 
             
                  s.platform = "i386-#{v}"
         | 
| 96 109 | 
             
                end
         | 
| 97 110 |  | 
| 98 | 
            -
                 | 
| 111 | 
            +
                Gem::PackageTask.new(spec) do |pkg|
         | 
| 99 112 | 
             
                  pkg.need_zip = false
         | 
| 100 113 | 
             
                  pkg.need_tar = false
         | 
| 101 114 | 
             
                end
         | 
| @@ -103,10 +116,16 @@ end | |
| 103 116 | 
             
            end
         | 
| 104 117 |  | 
| 105 118 | 
             
            desc "build all platform gems at once"
         | 
| 106 | 
            -
            task :gems => [:clean, :rmgems,  | 
| 119 | 
            +
            task :gems => [:clean, :rmgems, 'ruby:gem', 'mswin32:gem', 'mingw32:gem', 'jruby:gem']
         | 
| 107 120 |  | 
| 108 121 | 
             
            desc "remove all platform gems"
         | 
| 109 | 
            -
            task :rmgems => [ | 
| 122 | 
            +
            task :rmgems => ['ruby:clobber_package']
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            desc "reinstall gem"
         | 
| 125 | 
            +
            task :reinstall => :gems do
         | 
| 126 | 
            +
              sh "gem uninstall pry" rescue nil
         | 
| 127 | 
            +
              sh "gem install #{File.dirname(__FILE__)}/pkg/pry-#{Pry::VERSION}.gem"
         | 
| 128 | 
            +
            end
         | 
| 110 129 |  | 
| 111 130 | 
             
            desc "build and push latest gems"
         | 
| 112 131 | 
             
            task :pushgems => :gems do
         | 
    
        data/bin/pry
    CHANGED
    
    | @@ -12,83 +12,5 @@ rescue LoadError | |
| 12 12 | 
             
              require 'pry'
         | 
| 13 13 | 
             
            end
         | 
| 14 14 |  | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
            Start a Pry session.
         | 
| 18 | 
            -
            See: `https://github.com/pry` for more information.
         | 
| 19 | 
            -
            Copyright (c) 2011 John Mair (banisterfiend)
         | 
| 20 | 
            -
            --
         | 
| 21 | 
            -
            }
         | 
| 22 | 
            -
             | 
| 23 | 
            -
              on :e, :exec, "A line of code to execute in context before the session starts", true
         | 
| 24 | 
            -
             | 
| 25 | 
            -
              on "no-pager", "Disable pager for long output" do
         | 
| 26 | 
            -
                Pry.config.pager = false
         | 
| 27 | 
            -
              end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
              on "no-history", "Disable history loading" do
         | 
| 30 | 
            -
                Pry.config.history.should_load = false
         | 
| 31 | 
            -
              end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
              on "no-color", "Disable syntax highlighting for session" do
         | 
| 34 | 
            -
                Pry.color = false
         | 
| 35 | 
            -
              end
         | 
| 36 | 
            -
             | 
| 37 | 
            -
              on :f, "Suppress loading of ~/.pryrc" do
         | 
| 38 | 
            -
                # load ~/.pryrc, if not suppressed with -f option
         | 
| 39 | 
            -
                Pry.config.should_load_rc = false
         | 
| 40 | 
            -
              end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
              on "no-plugins", "Suppress loading of plugins." do
         | 
| 43 | 
            -
                # suppress plugins if given --no-plugins optino
         | 
| 44 | 
            -
                Pry.config.plugins.enabled = false
         | 
| 45 | 
            -
              end
         | 
| 46 | 
            -
             | 
| 47 | 
            -
              on "installed-plugins", "List installed plugins." do
         | 
| 48 | 
            -
                puts "Installed Plugins:"
         | 
| 49 | 
            -
                puts "--"
         | 
| 50 | 
            -
                Pry.locate_plugins.each do |plugin|
         | 
| 51 | 
            -
                  puts "#{plugin.name}".ljust(18) + plugin.spec.summary
         | 
| 52 | 
            -
                end
         | 
| 53 | 
            -
                exit
         | 
| 54 | 
            -
              end
         | 
| 55 | 
            -
             | 
| 56 | 
            -
              on "simple-prompt", "Enable simple prompt mode" do
         | 
| 57 | 
            -
                Pry.prompt = Pry::SIMPLE_PROMPT
         | 
| 58 | 
            -
              end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
              on :r, :require, "`require` a Ruby script at startup", true do |file|
         | 
| 61 | 
            -
                Pry.config.requires << file
         | 
| 62 | 
            -
              end
         | 
| 63 | 
            -
             | 
| 64 | 
            -
              on :I, "Add a path to the $LOAD_PATH", true do |path|
         | 
| 65 | 
            -
                $LOAD_PATH << path
         | 
| 66 | 
            -
              end
         | 
| 67 | 
            -
             | 
| 68 | 
            -
              on :v, :version, "Display the Pry version" do
         | 
| 69 | 
            -
                puts "Pry version #{Pry::VERSION} on Ruby #{RUBY_VERSION}"
         | 
| 70 | 
            -
                exit
         | 
| 71 | 
            -
              end
         | 
| 72 | 
            -
             | 
| 73 | 
            -
              on(:c, :context,
         | 
| 74 | 
            -
                "Start the session in the specified context. Equivalent to `context.pry` in a session.",
         | 
| 75 | 
            -
                true,
         | 
| 76 | 
            -
                :default => "TOPLEVEL_BINDING"
         | 
| 77 | 
            -
                )
         | 
| 78 | 
            -
            end
         | 
| 79 | 
            -
             | 
| 80 | 
            -
            # invoked via cli
         | 
| 81 | 
            -
            Pry.cli = true
         | 
| 82 | 
            -
             | 
| 83 | 
            -
            # create the actual context
         | 
| 84 | 
            -
            context = Pry.binding_for(eval(opts[:context]))
         | 
| 85 | 
            -
             | 
| 86 | 
            -
            if opts[:exec]
         | 
| 87 | 
            -
              exec_string = opts[:exec] + "\n"
         | 
| 88 | 
            -
            else
         | 
| 89 | 
            -
              exec_string = ""
         | 
| 90 | 
            -
            end
         | 
| 91 | 
            -
             | 
| 92 | 
            -
            # Start the session (running any code passed with -e, if there is any)
         | 
| 93 | 
            -
            Pry.start(context, :input => StringIO.new(exec_string))
         | 
| 94 | 
            -
             | 
| 15 | 
            +
            # Process command line options and run Pry
         | 
| 16 | 
            +
            Pry::CLI.parse_options
         | 
    
        data/lib/pry.rb
    CHANGED
    
    | @@ -4,19 +4,19 @@ | |
| 4 4 |  | 
| 5 5 | 
             
            require 'pp'
         | 
| 6 6 | 
             
            require 'pry/helpers/base_helpers'
         | 
| 7 | 
            +
            require 'pry/hooks'
         | 
| 8 | 
            +
             | 
| 7 9 | 
             
            class Pry
         | 
| 8 10 | 
             
              # The default hooks - display messages when beginning and ending Pry sessions.
         | 
| 9 | 
            -
              DEFAULT_HOOKS =  | 
| 10 | 
            -
                 | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
                   | 
| 16 | 
            -
                    _pry_.process_line("whereami 5", "", target)
         | 
| 17 | 
            -
                  end
         | 
| 11 | 
            +
              DEFAULT_HOOKS = Pry::Hooks.new.add_hook(:before_session, :default) do |out, target, _pry_|
         | 
| 12 | 
            +
                # ensure we're actually in a method
         | 
| 13 | 
            +
                file = target.eval('__FILE__')
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                # /unknown/ for rbx
         | 
| 16 | 
            +
                if file !~ /(\(.*\))|<.*>/ && file !~ /__unknown__/ && file != "" && file != "-e"  || file == Pry.eval_path
         | 
| 17 | 
            +
                  _pry_.run_command("whereami 5", "", target)
         | 
| 18 18 | 
             
                end
         | 
| 19 | 
            -
               | 
| 19 | 
            +
              end
         | 
| 20 20 |  | 
| 21 21 | 
             
              # The default print
         | 
| 22 22 | 
             
              DEFAULT_PRINT = proc do |output, value|
         | 
| @@ -36,6 +36,9 @@ class Pry | |
| 36 36 |  | 
| 37 37 | 
             
                colorized = Helpers::BaseHelpers.colorize_code(stringified.gsub(/#</, "%<#{nonce}"))
         | 
| 38 38 |  | 
| 39 | 
            +
                # avoid colour-leak from CodeRay and any of the users' previous output
         | 
| 40 | 
            +
                colorized = colorized.sub(/(\n*)$/, "\e[0m\\1") if Pry.color
         | 
| 41 | 
            +
             | 
| 39 42 | 
             
                Helpers::BaseHelpers.stagger_output("=> #{colorized.gsub(/%<(.*?)#{nonce}/, '#<\1')}", output)
         | 
| 40 43 | 
             
              end
         | 
| 41 44 |  | 
| @@ -66,19 +69,11 @@ class Pry | |
| 66 69 | 
             
              # The default prompt; includes the target and nesting level
         | 
| 67 70 | 
             
              DEFAULT_PROMPT = [
         | 
| 68 71 | 
             
                                proc { |target_self, nest_level, pry|
         | 
| 69 | 
            -
                                   | 
| 70 | 
            -
                                    "[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)})> "
         | 
| 71 | 
            -
                                  else
         | 
| 72 | 
            -
                                    "[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)}):#{nest_level}> "
         | 
| 73 | 
            -
                                  end
         | 
| 72 | 
            +
                                  "[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}> "
         | 
| 74 73 | 
             
                                },
         | 
| 75 74 |  | 
| 76 75 | 
             
                                proc { |target_self, nest_level, pry|
         | 
| 77 | 
            -
                                   | 
| 78 | 
            -
                                    "[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)})* "
         | 
| 79 | 
            -
                                  else
         | 
| 80 | 
            -
                                    "[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)}):#{nest_level}* "
         | 
| 81 | 
            -
                                  end
         | 
| 76 | 
            +
                                  "[#{pry.input_array.size}] pry(#{Pry.view_clip(target_self)})#{":#{nest_level}" unless nest_level.zero?}* "
         | 
| 82 77 | 
             
                                }
         | 
| 83 78 | 
             
                               ]
         | 
| 84 79 |  | 
| @@ -151,7 +146,15 @@ class Pry | |
| 151 146 |  | 
| 152 147 | 
             
              # CommandErrors are caught by the REPL loop and displayed to the user. They
         | 
| 153 148 | 
             
              # indicate an exceptional condition that's fatal to the current command.
         | 
| 154 | 
            -
              class CommandError < StandardError
         | 
| 149 | 
            +
              class CommandError < StandardError; end
         | 
| 150 | 
            +
              class NonMethodContextError < CommandError; end
         | 
| 151 | 
            +
             | 
| 152 | 
            +
              # indicates obsolete API
         | 
| 153 | 
            +
              class ObsoleteError < StandardError; end
         | 
| 154 | 
            +
             | 
| 155 | 
            +
              # This is to keep from breaking under Rails 3.2 for people who are doing that
         | 
| 156 | 
            +
              # IRB = Pry thing.
         | 
| 157 | 
            +
              module ExtendCommandBundle
         | 
| 155 158 | 
             
              end
         | 
| 156 159 | 
             
            end
         | 
| 157 160 |  | 
| @@ -162,20 +165,21 @@ require "stringio" | |
| 162 165 | 
             
            require "coderay"
         | 
| 163 166 | 
             
            require "optparse"
         | 
| 164 167 | 
             
            require "slop"
         | 
| 168 | 
            +
            require "rbconfig"
         | 
| 165 169 |  | 
| 166 | 
            -
            if  | 
| 170 | 
            +
            if Pry::Helpers::BaseHelpers.jruby?
         | 
| 167 171 | 
             
              begin
         | 
| 168 172 | 
             
                require 'ffi'
         | 
| 169 173 | 
             
              rescue LoadError
         | 
| 170 | 
            -
                 | 
| 174 | 
            +
                warn "Need to `gem install ffi`"
         | 
| 171 175 | 
             
              end
         | 
| 172 176 | 
             
            end
         | 
| 173 177 |  | 
| 174 | 
            -
            if  | 
| 178 | 
            +
            if Pry::Helpers::BaseHelpers.windows?
         | 
| 175 179 | 
             
              begin
         | 
| 176 180 | 
             
                require 'win32console'
         | 
| 177 181 | 
             
              rescue LoadError
         | 
| 178 | 
            -
                 | 
| 182 | 
            +
                warn "Need to `gem install win32console`"
         | 
| 179 183 | 
             
                exit 1
         | 
| 180 184 | 
             
              end
         | 
| 181 185 | 
             
            end
         | 
| @@ -183,16 +187,19 @@ end | |
| 183 187 | 
             
            require "pry/version"
         | 
| 184 188 | 
             
            require "pry/rbx_method"
         | 
| 185 189 | 
             
            require "pry/rbx_path"
         | 
| 190 | 
            +
            require "pry/code"
         | 
| 186 191 | 
             
            require "pry/method"
         | 
| 192 | 
            +
            require "pry/wrapped_module"
         | 
| 187 193 | 
             
            require "pry/history_array"
         | 
| 188 194 | 
             
            require "pry/helpers"
         | 
| 189 195 | 
             
            require "pry/history"
         | 
| 196 | 
            +
            require "pry/command"
         | 
| 190 197 | 
             
            require "pry/command_set"
         | 
| 191 198 | 
             
            require "pry/commands"
         | 
| 192 | 
            -
            require "pry/command_context"
         | 
| 193 199 | 
             
            require "pry/custom_completions"
         | 
| 194 200 | 
             
            require "pry/completion"
         | 
| 195 201 | 
             
            require "pry/plugins"
         | 
| 196 202 | 
             
            require "pry/core_extensions"
         | 
| 197 203 | 
             
            require "pry/pry_class"
         | 
| 198 204 | 
             
            require "pry/pry_instance"
         | 
| 205 | 
            +
            require "pry/cli"
         | 
    
        data/lib/pry/cli.rb
    ADDED
    
    | @@ -0,0 +1,152 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            class Pry
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              # Manage the processing of command line options
         | 
| 5 | 
            +
              class CLI
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                NoOptionsError = Class.new(StandardError)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                class << self
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  # @return [Proc] The Proc defining the valid command line options.
         | 
| 12 | 
            +
                  attr_accessor :options
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  # @return [Array] The Procs that process the parsed options.
         | 
| 15 | 
            +
                  attr_accessor :option_processors
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  # Add another set of CLI options (a Slop block)
         | 
| 18 | 
            +
                  def add_options(&block)
         | 
| 19 | 
            +
                    if options
         | 
| 20 | 
            +
                      old_options = options
         | 
| 21 | 
            +
                      self.options = proc do
         | 
| 22 | 
            +
                        instance_exec(&old_options)
         | 
| 23 | 
            +
                        instance_exec(&block)
         | 
| 24 | 
            +
                      end
         | 
| 25 | 
            +
                    else
         | 
| 26 | 
            +
                      self.options = block
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    self
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  # Bring in options defined in plugins
         | 
| 33 | 
            +
                  def add_plugin_options
         | 
| 34 | 
            +
                    Pry.plugins.values.each do |plugin|
         | 
| 35 | 
            +
                      plugin.load_cli_options
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    self
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  # Add a block responsible for processing parsed options.
         | 
| 42 | 
            +
                  def process_options(&block)
         | 
| 43 | 
            +
                    self.option_processors ||= []
         | 
| 44 | 
            +
                    option_processors << block
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                    self
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  # Clear `options` and `option_processors`
         | 
| 50 | 
            +
                  def reset
         | 
| 51 | 
            +
                    self.options           = nil
         | 
| 52 | 
            +
                    self.option_processors = nil
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  def parse_options(args=ARGV)
         | 
| 56 | 
            +
                    raise NoOptionsError, "No command line options defined! Use Pry::CLI.add_options to add command line options." if !options
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                    opts = Slop.parse(args, :help => true, :multiple_switches => false, &options)
         | 
| 59 | 
            +
                    option_processors.each { |processor| processor.call(opts) } if option_processors # option processors are optional
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                    self
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                reset
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
            end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            # Bring in options defined by plugins
         | 
| 71 | 
            +
            Pry::CLI.add_plugin_options
         | 
| 72 | 
            +
             | 
| 73 | 
            +
            # The default Pry command line options (before plugin options are included)
         | 
| 74 | 
            +
            Pry::CLI.add_options do
         | 
| 75 | 
            +
              banner %{Usage: pry [OPTIONS]
         | 
| 76 | 
            +
            Start a Pry session.
         | 
| 77 | 
            +
            See: `https://github.com/pry` for more information.
         | 
| 78 | 
            +
            Copyright (c) 2011 John Mair (banisterfiend)
         | 
| 79 | 
            +
            --
         | 
| 80 | 
            +
            }
         | 
| 81 | 
            +
              on :e, :exec, "A line of code to execute in context before the session starts", true
         | 
| 82 | 
            +
             | 
| 83 | 
            +
              on "no-pager", "Disable pager for long output" do
         | 
| 84 | 
            +
                Pry.config.pager = false
         | 
| 85 | 
            +
              end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
              on "no-history", "Disable history loading" do
         | 
| 88 | 
            +
                Pry.config.history.should_load = false
         | 
| 89 | 
            +
              end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
              on "no-color", "Disable syntax highlighting for session" do
         | 
| 92 | 
            +
                Pry.color = false
         | 
| 93 | 
            +
              end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
              on :f, "Suppress loading of ~/.pryrc" do
         | 
| 96 | 
            +
                # load ~/.pryrc, if not suppressed with -f option
         | 
| 97 | 
            +
                Pry.config.should_load_rc = false
         | 
| 98 | 
            +
              end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
              on "no-plugins", "Suppress loading of plugins." do
         | 
| 101 | 
            +
                # suppress plugins if given --no-plugins optino
         | 
| 102 | 
            +
                Pry.config.plugins.enabled = false
         | 
| 103 | 
            +
              end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
              on "installed-plugins", "List installed plugins." do
         | 
| 106 | 
            +
                puts "Installed Plugins:"
         | 
| 107 | 
            +
                puts "--"
         | 
| 108 | 
            +
                Pry.locate_plugins.each do |plugin|
         | 
| 109 | 
            +
                  puts "#{plugin.name}".ljust(18) + plugin.spec.summary
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
                exit
         | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
              on "simple-prompt", "Enable simple prompt mode" do
         | 
| 115 | 
            +
                Pry.config.prompt = Pry::SIMPLE_PROMPT
         | 
| 116 | 
            +
              end
         | 
| 117 | 
            +
             | 
| 118 | 
            +
              on :r, :require, "`require` a Ruby script at startup", true do |file|
         | 
| 119 | 
            +
                Pry.config.requires << file
         | 
| 120 | 
            +
              end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
              on :I, "Add a path to the $LOAD_PATH", true do |path|
         | 
| 123 | 
            +
                $LOAD_PATH << path
         | 
| 124 | 
            +
              end
         | 
| 125 | 
            +
             | 
| 126 | 
            +
              on :v, :version, "Display the Pry version" do
         | 
| 127 | 
            +
                puts "Pry version #{Pry::VERSION} on Ruby #{RUBY_VERSION}"
         | 
| 128 | 
            +
                exit
         | 
| 129 | 
            +
              end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
              on(:c, :context,
         | 
| 132 | 
            +
                 "Start the session in the specified context. Equivalent to `context.pry` in a session.",
         | 
| 133 | 
            +
                 true,
         | 
| 134 | 
            +
                 :default => "TOPLEVEL_BINDING"
         | 
| 135 | 
            +
                 )
         | 
| 136 | 
            +
            end.process_options do |opts|
         | 
| 137 | 
            +
              # invoked via cli
         | 
| 138 | 
            +
              Pry.cli = true
         | 
| 139 | 
            +
             | 
| 140 | 
            +
              # create the actual context
         | 
| 141 | 
            +
              context = Pry.binding_for(eval(opts[:context]))
         | 
| 142 | 
            +
             | 
| 143 | 
            +
              if opts[:exec]
         | 
| 144 | 
            +
                exec_string = opts[:exec] + "\n"
         | 
| 145 | 
            +
              else
         | 
| 146 | 
            +
                exec_string = ""
         | 
| 147 | 
            +
              end
         | 
| 148 | 
            +
             | 
| 149 | 
            +
              # Start the session (running any code passed with -e, if there is any)
         | 
| 150 | 
            +
              Pry.start(context, :input => StringIO.new(exec_string))
         | 
| 151 | 
            +
            end
         | 
| 152 | 
            +
             |