#!/usr/bin/env ruby # (C) John Mair (banisterfiend) # MIT license $0 = 'pry' begin require 'pry' rescue LoadError require 'rubygems' require 'pry' end opts = Slop.parse(:help => true, :multiple_switches => false) do banner %{Usage: pry [OPTIONS] Start a Pry session. See: `https://github.com/banister` for more information. -- } on :e, :exec, "A line of code to execute in context before the session starts", true on "no-pager", "Disable pager for long output" do Pry.pager = false end on "no-color", "Disable syntax highlighting for session" do Pry.color = false end on :f, "Suppress loading of ~/.pryrc" do # load ~/.pryrc, if not suppressed with -f option Pry.config.should_load_rc = false end on "no-plugins", "Suppress loading of plugins." do # suppress plugins if given --no-plugins optino Pry.config.plugins.enabled = false end on "installed-plugins", "List installed plugins." on "simple-prompt", "Enable simple prompt mode" do Pry.prompt = Pry::SIMPLE_PROMPT end on :r, :require, "`require` a Ruby script at startup", true do |file| Pry.config.requires << file end on :I, "Add a path to the $LOAD_PATH", true do |path| $LOAD_PATH << path end on :v, :version, "Display the Pry version" do puts "Pry version #{Pry::VERSION} on Ruby #{RUBY_VERSION}" exit end on(:c, :context, "Start the session in the specified context. Equivalent to `context.pry` in a session.", true, :default => "TOPLEVEL_BINDING" ) end if opts["installed-plugins"] puts "Installed Plugins:" puts "--" Pry.locate_plugins.each do |plugin| puts "#{plugin.name}".ljust(18) + plugin.spec.summary end exit end # invoked via cli Pry.cli = true # create the actual context context = Pry.binding_for(eval(opts[:context])) exec_string = opts[:exec] || "" # run code passed with `-e`, if there is any. Pry.start(context, :input => StringIO.new(exec_string + "\n"), :input_stack => [Readline])