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-duration
wirble
ori
awesome_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.