Budur...

Böyle bazı “budur"ma anları var ("kudur"ma değil "budur"ma efendim): "İşte budur be!” dersiniz. Dersiniz demesine de sabahın şu sağır saatlerinde kim duyar? “Heyhat!” demeyeceğiz, oturup böyle yazacağız…

Ders sunumları başta gelmek üzere bilumum prezant ihtiyaçlarını karşılayacak bir araç olarak Landslide üzerinde çalışıyorum. Bu kapsamda, bir dizin ağacında bulunan Markdown sunum kaynaklarını derleyen ve etiketleyen bir Rakefile ihtiyacı hasıl oldu. Problem: bir alt dizinde göreceli olarak bilinen bir dosya yolunu, bir başka dizinde göreceli hale nasıl çevirirsiniz? (Kitaplık dokümantasyonuna başvurmanız kaydıyla) triviri (“trivial” olarak okuyun) bir problem.

burada_ora = Pathname.new(
  File.expand_path(ora)      # "ora"yı mutlak yap
).relative_path_from(        # sonra göreceli yap, nereye göreceli?
  Pathname.new(Pathname.pwd) # "mutlak bura"ya
).to_s

Ama keyfe keder iki sorun var:

İşte “budur” dedirten çözüm, biraz maymunluk yeterli (“monkey patching”):

class File
  @@absolute_here_path = Pathname.new(Pathname.pwd)
  def self.herepath(path)
    Pathname.new(File.expand_path(path)).relative_path_from(@@absolute_here_path).to_s
  end
end

Artık File sınıfımızda herepath isimli bir sınıf metodumuz var, yukarıda listelenen her iki koşulu da sağlıyor. Neden?

Bunu nasıl tüketiriz? Şöyle bir örnek:

# "oraya" göreceli yolları "buraya" göreceli yap
yollar.map! { |p| File.herepath(p) }

İşte budur! Bendenizi “kudur"tan dil pek çok, "budur"tan ise çok az. Ruby'yi seviyorum.

Hadi bakalım biraz Tarkan: Metamorfoz'dan "Pare Pare”…

P.S. Dursun Can'a etimolojik bir not: bak bu “pare” Farsça olup, “parça” manasında. “para” da bu kökten mi gelir? İngilizce'de “pare” var, bir şeyin kabuğunu soymak anlamında; bununla ilişkili midir? Bak bunun varyasyonları da ne güzel: yek-pare “tek parça”; mah-pare (yani bildiğin bayan ismi: Mehpare) “ay parçası”. Budur!