IRB konfigürasyonu ve ufak tefek ayarlar
IRB konfigüre edilebilen bir interaktif konsoldur. Aynı IPython gibi. Hem test yapmak, hem de günlük ihtiyaçları kullanmak için en sık başvurduğum tool’dur. Python’dan alıştığım Pretty Print beni IRB uzmanı olmaya yöneltti.
$HOME/.irbrc adlı dosya, kullanıcı bazında IRB konfigürasyon dosyasıdır.
İlk çalışma sırasında ne olacak? Hangi modüller default olarak yüklenmeli? Bu
ve buna benzer şeyler standart Ruby script’i şeklinde yazılır.
# encoding: utf-8
# http://pablotron.org/software/wirble/README
# required gems:
# wirble pri awesome_print ruby-duration
IRB_START_TIME = Time.now
require 'rubygems'
require "irb/completion"
require 'irb/ext/save-history'
EXISTING_GEMS = {
:RUBY_DURATION => { :exists => true, :file => 'ruby-duration' },
:WIRBLE => { :exists => true, :file => 'wirble' },
:ORI => { :exists => true, :file => 'ori' },
:AWESOME_PRINT => { :exists => true, :file => 'awesome_print' },
}
begin
require 'ruby-duration'
rescue LoadError
EXISTING_GEMS[:RUBY_DURATION][:exists] = false
end
begin
require 'wirble'
rescue LoadError
EXISTING_GEMS[:WIRBLE][:exists] = false
end
begin
# ori usage:
# "".ri
# "".ri :upcase
# Array.ri
# "".ri :pretty_print
require 'ori'
rescue LoadError
EXISTING_GEMS[:ORI][:exists] = false
end
begin
require 'awesome_print'
rescue LoadError
EXISTING_GEMS[:AWESOME_PRINT][:exists] = false
end
# ARGV.concat ["--readline", "--prompt-mode", "simple"]
# ARGV.concat ["--readline", "--noprompt"]
# Colors for prompt
# ----------------------------------------------------------------------------
ANSI = {}
ANSI[:RESET] = "\e[0m"
ANSI[:BOLD] = "\e[1m"
ANSI[:UNDERLINE] = "\e[4m"
ANSI[:LGRAY] = "\e[0;37m"
ANSI[:GRAY] = "\e[0;90m"
ANSI[:RED] = "\e[31m"
ANSI[:GREEN] = "\e[32m"
ANSI[:YELLOW] = "\e[33m"
ANSI[:BLUE] = "\e[34m"
ANSI[:MAGENTA] = "\e[35m"
ANSI[:CYAN] = "\e[36m"
ANSI[:WHITE] = "\e[37m"
# ----------------------------------------------------------------------------
# Colors for array, hash etc...
# ----------------------------------------------------------------------------
Wirble.init({
:skip_prompt => true,
:skip_history => true,
})
Wirble.colorize
# ----------------------------------------------------------------------------
# IRB configuration
# ----------------------------------------------------------------------------
MY_CUSTOM_PROMPT = "#{ANSI[:WHITE]}%03n#{ANSI[:RESET]}:#{ANSI[:YELLOW]}%i#{ANSI[:RESET]}"
IRB.conf[:SAVE_HISTORY] = 10000
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb_history"
IRB.conf[:USE_READLINE] = true
IRB.conf[:AUTO_INDENT] = true
IRB.conf[:PROMPT][:SIMPLE] = {
:PROMPT_I => "#{MY_CUSTOM_PROMPT} > ",
:PROMPT_N => "#{MY_CUSTOM_PROMPT} >> ",
:PROMPT_S => "#{MY_CUSTOM_PROMPT} #{ANSI[:MAGENTA]}%l#{ANSI[:RESET]} ",
:PROMPT_C => "#{MY_CUSTOM_PROMPT} #{ANSI[:WHITE]}*#{ANSI[:RESET]} ",
:RETURN => "#{ANSI[:GREEN]}=>#{ANSI[:RESET]} %s\n",
}
IRB.conf[:PROMPT_MODE] = :SIMPLE
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
EXISTING_GEMS.each { |g, p|
puts "need '#{ANSI[:RED]}#{p[:file]}#{ANSI[:RESET]}' gem" unless p[:exists]
}
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
at_exit {
if EXISTING_GEMS[:RUBY_DURATION][:exists]
delta = Duration.new(Time.now - IRB_START_TIME).format("#{ANSI[:WHITE]}%h#{ANSI[:RESET]} %~h, #{ANSI[:WHITE]}%m#{ANSI[:RESET]} %~m, #{ANSI[:WHITE]}%s#{ANSI[:RESET]} %~s")
puts "#{delta}"
end
}
# ----------------------------------------------------------------------------
Standart kütüphanede olmayan 4 adet modül kullanıyorum. (gem) Bunlar:
ruby-durationwirbleoriawesome_print
ruby-duration basit bir zaman hesabı işi için kullanılıyor. wirble
renklendirme için. ori ri dökümantasyonuna erişmek için. Konu ile ilgili
daha önce yazmıştım. awesome_print ise belkide içlerindeki
en süper gem. Hash Array ya da Class bu objeleri print etmek ve çıktıyı
anlamak awesome_print sayesinde çok kolay.
Modüller dışında, IRB’nin prompt’unu da değiştirdim. Hem renkli hem de daha anlaşılır oldu.
İlk çalışma anında gereken gem kontrolü yapılıp uyarı geliyor. Çıkışta da
geçen süre yazılıyor ekrana. En önemlisi, önceki diğer bir yazımda anlattığım
readline kütüphanesi yardımıyla, INPUTRC çalışıyor. Bu şu anlama geliyor;
HISTORY içinden otomatik tamamlama.