Ruby ile konfigürasyon dosyaları (YAML)

Merhabalar arkadaşlar,

Bugünkü yazımızda ‘.yaml’ (YAML A’int Markup Language) uzantılı dosyalar nasıl okunur, nasıl işlenir gibi konuları ele alacağız. Bir Önceki Ruby Zip Kütüphanesi adlı yazıda belirttiğim Ruby Backup (Rackup) uygulaması için gerekli bir konu olduğu için Öncelikle bu konuyu inceleyeceğiz.

Peki YAML dosyalarına neden ihtiyacımız var. XML ile bu işlem yapılamaz mı ? Elbette yapılabilir. Ama Ruby on Rails’de (RoR) veri tabanı bağlantılarını kontrol eden dosya bir yaml dosyası ‘database.yaml‘. Neden ? Cevap; Okunabilirlik.

XML dosyalarına gÖre YAML dosyalarını değiştirmek, bazı durumlarda, çok daha kolay ve hızlı olabiliyor. Elbetteki bunun tersi durumlarda sÖz konusu fakat Önemli olan alternatif olması ve bazı durumlarda da avantajının olduğunun bilincine vararak kullanmak. Özellikle bir sonraki yazımda yazmayı planladığım Ruby Backup projesinde kullanıcıların fazladan herhangi bir bilgiye ihtiyaç duymadan bazı ayarları değiştirmeleri ve/veya eklemeleri gerektiğinde kullanılabilirliği XML’den fazla olduğu bir gerçek. Neyse lafı fazla uzatmadan hemen konumuza geçelim;

Kuruluma ihtiyacı yoktur. Ruby’nin çekirdek sınıfı içerisinde yer alır. Öncelikle YAML dosyaları neye benzer bir Örneğini verelim;

# Standart yorum satırı
kaynak:
  dizin: c:\Document And Settings
  alt_dizinler: yes
  dosya_uzantılari: doc,xls,txt,msg,html

hedef:
  dizin: c:\Backup
  Ön_ek: Document
  son_ek: Office

GÖrüldüğü gibi türkçe karakterleri kullandık.. :) Yukarıda belirtiğimiz dosyayı ‘config.yaml’ olarak bir dizine kayıt ettikten sonra, aynı dizinde

$stdout.sync = true
require 'yaml'

# 'config.yaml' dosyası açılıyor.
config = YAML::load("config.yaml"))

# 'kaynak:' bÖlümü 'source' adlı değişkene alınıyor.
source = config["kaynak"]
source_folder = source["dizin"]
source_include_sub_folders = (["true", "yes", "evet", "yeah", "y", "e", "1"].include?(source["alt_dizinler"].to_s) ? true : false)

# 'dosya_uzantıları' eğer dolu ise, girilen bilgiyi kullanır
# eğer boş işe, "*" bilgisi kullanılır.
source_file_extension = source["dosya_uzantıları"] || "*"

target = config["hedef"]
target_folder = target["dizin"]
target_prefix = target["Ön_ek"]
target_postfix = target["son_ek"]

puts "Source dir is #{source_folder}"
puts "Target dir is #{target_folder}"
puts "File type is #{source_file_extension.to_s}"

şeklindeki bir Ruby programı ile config.yaml içerisinde yer alan tüm Özellikler ruby içerisine rahatlıkla aktarılabilir ve kullanılabilir.

Share