module Pry::Helpers::BaseHelpers

Public Instance Methods

colorize_code(code) click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 58
def colorize_code(code)
  if Pry.color
    CodeRay.scan(code, :ruby).term
  else
    code
  end
end
command_dependencies_met?(options) click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 38
def command_dependencies_met?(options)
  return true if !options[:requires_gem]
  Array(options[:requires_gem]).all? do |g|
    Rubygem.installed?(g)
  end
end
context_from_object_path(arg_string, _pry_=nil, old_stack=[]) click to toggle source

@param [String] arg_string The object path expressed as a string. @param [Pry] pry The relevant Pry instance. @param [Array<Binding>] old_stack The state of the old binding stack @return [Array<Array<Binding>, Array<Binding>>] An array

containing two elements: The new `binding_stack` and the old `binding_stack`.
# File lib/pry/helpers/base_helpers.rb, line 137
def context_from_object_path(arg_string, _pry_=nil, old_stack=[])

  # Extract command arguments. Delete blank arguments like " ", but
  # don't delete empty strings like "".
  path      = arg_string.split(/\//).delete_if { |a| a =~ /\A\s+\z/ }
  stack     = _pry_.binding_stack.dup
  state_old_stack = old_stack

  # Special case when we only get a single "/", return to root.
  if path.empty?
    state_old_stack = stack.dup unless old_stack.empty?
    stack = [stack.first]
  end

  path.each_with_index do |context, i|
    begin
      case context.chomp
      when ""
        state_old_stack = stack.dup
        stack = [stack.first]
      when "::"
        state_old_stack = stack.dup
        stack.push(TOPLEVEL_BINDING)
      when "."
        next
      when ".."
        unless stack.size == 1
          # Don't rewrite old_stack if we're in complex expression
          # (e.g.: `cd 1/2/3/../4).
          state_old_stack = stack.dup if path.first == ".."
          stack.pop
        end
      when "-"
        unless old_stack.empty?
          # Interchange current stack and old stack with each other.
          stack, state_old_stack = state_old_stack, stack
        end
      else
        state_old_stack = stack.dup if i == 0
        stack.push(Pry.binding_for(stack.last.eval(context)))
      end

    rescue RescuableException => e
      # Restore old stack to its initial values.
      state_old_stack = old_stack

      msg = [
        "Bad object path: #{arg_string}.",
        "Failed trying to resolve: #{context}.",
        e.inspect
      ].join(' ')

      CommandError.new(msg).tap do |err|
        err.set_backtrace e.backtrace
        raise err
      end
    end
  end
  return stack, state_old_stack
end
find_command(name, set = Pry::Commands) click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 27
def find_command(name, set = Pry::Commands)
  command_match = set.find do |_, command|
    (listing = command.options[:listing]) == name && listing != nil
  end
  command_match.last if command_match
end
heading(text) click to toggle source

formatting

# File lib/pry/helpers/base_helpers.rb, line 71
def heading(text)
  text = "#{text}\n--"
  Pry.color ? "\e[1m#{text}\e[0m": text
end
highlight(string, regexp, highlight_color=:bright_yellow) click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 66
def highlight(string, regexp, highlight_color=:bright_yellow)
  string.gsub(regexp) { |match| "<#{highlight_color}>#{match}</#{highlight_color}>" }
end
jruby?() click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 86
def jruby?
  RbConfig::CONFIG['ruby_install_name'] == 'jruby'
end
jruby_19?() click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 90
def jruby_19?
  RbConfig::CONFIG['ruby_install_name'] == 'jruby' &&
    RbConfig::CONFIG['ruby_version'] == '1.9'
end
mri_18?() click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 99
def mri_18?
  RUBY_VERSION =~ /1.8/ && RbConfig::CONFIG['ruby_install_name'] == 'ruby'
end
mri_19?() click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 103
def mri_19?
  RUBY_VERSION =~ /1.9/ && RbConfig::CONFIG['ruby_install_name'] == 'ruby'
end
not_a_real_file?(file) click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 34
def not_a_real_file?(file)
  file =~ /(\(.*\))|<.*>/ || file =~ /__unknown__/ || file == "" || file == "-e"
end
rbx?() click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 95
def rbx?
  RbConfig::CONFIG['ruby_install_name'] == 'rbx'
end
safe_send(obj, method, *args, &block) click to toggle source

Acts like send but ignores any methods defined below Object or Class in the inheritance hierarchy. This is required to introspect methods on objects like Net::HTTP::Get that have overridden the `method` method.

# File lib/pry/helpers/base_helpers.rb, line 22
def safe_send(obj, method, *args, &block)
  (Module === obj ? Module : Object).instance_method(method).bind(obj).call(*args, &block)
end
set_file_and_dir_locals(file_name, _pry_=_pry_(), target=target()) click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 45
def set_file_and_dir_locals(file_name, _pry_=_pry_(), target=target())
  return if !target or !file_name
  _pry_.last_file = File.expand_path(file_name)
  _pry_.inject_local("_file_", _pry_.last_file, target)

  _pry_.last_dir = File.dirname(_pry_.last_file)
  _pry_.inject_local("_dir_", _pry_.last_dir, target)
end
silence_warnings() { || ... } click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 8
def silence_warnings
  old_verbose = $VERBOSE
  $VERBOSE = nil
  begin
    yield
  ensure
    $VERBOSE = old_verbose
  end
end
stagger_output(text, out = nil) click to toggle source

Try to use `less` for paging, if it fails then use simple_pager. Also do not page if Pry.pager is falsey

# File lib/pry/helpers/base_helpers.rb, line 109
def stagger_output(text, out = nil)
  out ||= case
          when respond_to?(:output)
            # Mixin.
            output
          when Pry.respond_to?(:output)
            # Parent.
            Pry.output
          else
            # Sys.
            $stdout
          end

  if text.lines.count < Pry::Pager.page_size || !Pry.pager
    out.puts text
  else
    Pry::Pager.page(text)
  end
rescue Errno::ENOENT
  Pry::Pager.page(text, :simple)
rescue Errno::EPIPE
end
use_ansi_codes?() click to toggle source
# File lib/pry/helpers/base_helpers.rb, line 54
def use_ansi_codes?
  windows_ansi? || ENV['TERM'] && ENV['TERM'] != "dumb"
end
windows?() click to toggle source

have fun on the Windows platform.

# File lib/pry/helpers/base_helpers.rb, line 77
def windows?
  RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
end
windows_ansi?() click to toggle source

are we able to use ansi on windows?

# File lib/pry/helpers/base_helpers.rb, line 82
def windows_ansi?
  defined?(Win32::Console) || ENV['ANSICON']
end