blackoperat
3/25/2016 - 4:40 AM

.pryrc

require 'interactive_editor'
require 'gist'
# === EDITOR ===
Pry.editor = 'vim'

# == Pry-Nav - Using pry as a debugger ==
Pry.commands.alias_command 'c', 'continue'
Pry.commands.alias_command 's', 'step'
Pry.commands.alias_command 'n', 'next'
# Pry.commands.alias_command 'r!', 'reload!'

Pry.config.color = true
Pry.config.theme = 'solarized'

# === CUSTOM PROMPT ===
# This prompt shows the ruby version (useful for RVM)
Pry.prompt = [proc { |obj, nest_level, _| "#{RUBY_VERSION} (#{obj}):#{nest_level} > " }, proc { |obj, nest_level, _| "#{RUBY_VERSION} (#{obj}):#{nest_level} * " }]

# ==== PROMPT ====
# Plain prompt that just display's ruby>
# Pry.config.prompt = [proc {"ruby> "},
#  proc {"    | "}]
# === Listing config ===
# Better colors - by default the headings for methods are too
# similar to method name colors leading to a "soup"
# These colors are optimized for use with Solarized scheme
# for your terminal
Pry.config.ls.separator = "\n" # new lines between methods
Pry.config.ls.heading_color = :magenta
Pry.config.ls.public_method_color = :green
Pry.config.ls.protected_method_color = :yellow
Pry.config.ls.private_method_color = :bright_black

# == PLUGINS ===
# awesome_print gem: great syntax colorized printing
# look at ~/.aprc for more settings for awesome_print

begin
    require 'rubygems'
    require 'awesome_print'
    require 'awesome_print_colors'

    AwesomePrint.defaults = {
      theme: :solarized,
      indent: 2,
      sort_keys: true,
      color: {
        args: :greenish,
        array: :pale,
        bigdecimal: :blue,
        class: :yellow,
        date: :greenish,
        falseclass: :red,
        fixnum: :blue,
        float: :blue,
        hash: :pale,
        keyword: :cyan,
        method: :purpleish,
        nilclass: :red,
        string: :yellowish,
        struct: :pale,
        symbol: :cyanish,
        time: :greenish,
        trueclass: :green,
        variable: :cyanish
      }
    }

    AwesomePrint.pry!
    AwesomePrint.defaults = { theme: :solarized }

    begin
      require 'pry-clipboard'
      # aliases
      Pry.config.commands.alias_command 'ch', 'copy-history'
      Pry.config.commands.alias_command 'cr', 'copy-result'
    rescue LoadError => err
      puts err
      warn "can't load pry-clipboard"
      #       end'
    end

    # aliases
    #   Pry.config.commands.alias_command 'ch
    #     Pry.config.commands.alias_command 'cr'
    #     rescue LoadError => e
    #       warn "can'
    #       end'

    # The following line enables awesome_print for all pry output,
    # and it also enables paging
    Pry.config.print = proc { |output, value| Pry::Helpers::BaseHelpers.stagger_output("=> #{value.ai}", output) }

    # If you want awesome_print without automatic pagination, use the line below
    Pry.config.print = proc { |output, value| output.puts value.ai }
  rescue LoadError => err
    puts err
    puts 'gem install awesome_print  # <-- highly recommended'
  end



# === CUSTOM COMMANDS ===
default_command_set = Pry::CommandSet.new do
  command 'copy', 'Copy argument to the clip-board' do |str|
    IO.popen('pbcopy', 'w') { |f| f << str.to_s }
  end

  command 'clear' do
    system 'clear'
    # output.puts 'Rails Environment: ' + ENV['RAILS_ENV'] if ENV['RAILS_ENV']
  end

  # command 'sql', 'Send sql over AR.' do |query|
  #   if ENV['RAILS_ENV'] || defined?(Rails)
  #     pp ActiveRecord::Base.connection.select_all(query)
  #   else
  #     pp 'No rails env defined'
  #   end
  # end
  # command 'caller_method' do |depth|
  #   depth = depth.to_i || 1
  #   if /^(.+?):(\d+)(?::in `(.*)')?/ =~ caller(depth + 1).first
  #     file   = Regexp.last_match[1]
  #     line   = Regexp.last_match[2].to_i
  #     method = Regexp.last_match[3]
  #     output.puts [file, line, method]
  #   end
  # end
end

Pry.config.commands.import default_command_set

# === CONVENIENCE METHODS ===
# Stolen from https://gist.github.com/807492
# Use Array.toy or Hash.toy to get an array or hash to play with
class Array
  def self.toy(n = 10, &block)
    block_given? ? Array.new(n, &block) : Array.new(n) { |i| i + 1 }
  end
end

class Hash
  def self.toy(n = 10)
    Hash[Array.toy(n).zip(Array.toy(n) { |c| (96 + (c + 1)).chr })]
  end
end

# === COLOR CUSTOMIZATION ===
# Everything below this line is for customizing colors, you have to use the ugly
# color codes, but such is life.
CodeRay.scan('example', :ruby).term # just to load necessary files
# Token colors pulled from: https://github.com/rubychan/coderay/blob/master/lib/coderay/encoders/terminal.rb
TERM_TOKEN_COLORS = {
  attribute_name: '33',
  attribute_value: '31',
  binary: '1;35',
  char: {
    self: '36', delimiter: '34'
  },
  class: '1;35',
  class_variable: '36',
  color: '32',
  comment: '37',
  complex: '34',
  constant: %w(34 4),
  decoration: '35',
  definition: '1;32',
  directive: %w(32 4),
  doc: '46',
  doctype: '1;30',
  doc_string: %w(31 4),
  entity: '33',
  error: ['1;33', '41'],
  exception: '1;31',
  float: '1;35',
  function: '1;34',
  global_variable: '42',
  hex: '1;36',
  include: '33',
  integer: '1;34',
  key: '35',
  label: '1;15',
  local_variable: '33',
  octal: '1;35',
  operator_name: '1;29',
  predefined_constant: '1;36',
  predefined_type: '1;30',
  predefined: ['4', '1;34'],
  preprocessor: '36',
  pseudo_class: '34',
  regexp: {
    self: '31',
    content: '31',
    delimiter: '1;29',
    modifier: '35',
    function: '1;29'
  },
  reserved: '1;31',
  shell: {
    self: '42',
    content: '1;29',
    delimiter: '37'
  },
  string: {
    self: '36',
    modifier: '1;32',
    escape: '1;36',
    delimiter: '1;32'
  },
  symbol: '1;31',
  tag: '34',
  type: '1;34',
  value: '36',
  variable: '34',

  insert: '42',
  delete: '41',
  change: '44',
  head: '45'
}.freeze

module CodeRay
  module Encoders
    class Terminal < Encoder
      # override old colors
      TERM_TOKEN_COLORS.each_pair do |key, value|
        TOKEN_COLORS[key] = value
      end
    end
  end
end
# require 'jazz_hands']
# JazzHands.enable_syntax_highlighting_as_you_type