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.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir