Obsługa YAML’a jest banalnie prosta i w zasadzie ogranicza się do wczytania lub zapisania danych.
Zapisujemy zawartość zmiennej config do pliku.
require 'yaml'
config = {
:max_users=>200,
:db=>
{:host=>"localhost",
:user_name=>"shop",
:db_name=>"shop",
:password=>"shop123"
},
:timeout=>10
}
File.open("config.yaml","w") { |file| YAML.dump(config,file) }
Dane można konwertować to formatu YAML również za pomocą metody to_yaml, która po załadowaniu biblioteki yaml jest dodawana do obiektów w programie.
Plik config.yaml:
---
:max_users: 200
:db:
:host: localhost
:user_name: shop
:db_name: shop
:password: shop123
:timeout: 10Jak widać format pliku jest bardzo czytelny i łatwy do edycji. Wczytywanie danych z pliku również jest proste.
require 'yaml'
config = YAML.load_file("config.yaml")
Warto wspomnieć że za pomocą YAML’a możemy zachować dane z dowolnego obiektu, a gdy zajdzie taka potrzeba zainicjować obiekt tymi danymi.
Kawałek przykładu:
require 'yaml'
class Student
def initialize(id,name,last_name)
@id, @name, @last_name = id, name,last_name
@marks = {}
end
def add_mark(subject,mark)
@marks[subject] = mark
end
end
o1 = Student.new(32124,"Tomek","Kowalski")
o1.add_mark("Matematyka",3)
o1.add_mark("Fizyka",4)
o1.add_mark("Biologia",5)
#zachowujemy zawartość obiektu
File.open("student.yaml","w") { |file| file.write(o1.to_yaml) }
#tworzymy nowy obiekt inicjalizując go zachowanymi danymi
o2 = YAML.load_file("student.yaml")
Chciałem wykorzystać YAMLa jako bazę (‘title’ => [‘genre’, ‘year’, ‘itd’]), ale ciągle coś bym dodawał, a YAML IMHO się do tego zbytnio nie nadaje. Moje pytanie: czy dobrym rozwiązaniem było by po prostu jako bazę mieć zwykły plik tekstowy, czy istnieje jakieś bardziej optymalne rozwiązanie? Baza będzie miała około 2-3 tysiąca tablic asocjacyjnych (w końcowej fazie) i będzie odpytywana w celu usunięcia duplikatów za każdym razem. Dzięki za ewentualne pomysły. Czytelnik czekający na kolejne wpisy :)
Nie spotkalem sie jeszcze z takimi bibliotekami ktore pozwalaja uzywac YAML’a jako baze. Nalezalo by sie zastanowic czy potrzebujesz latwo czytac te pliki ? (tzn tak za pomoca edytora) bo jesli nie to idealny wydaje sie sqlite
Zmylił mnie po prostu wpis sztywnego: http://www.stifflog.com/pl/index.php/2006/02/19/ruby-wprowadzenie-czesc-4-nareszcie-cos-powaznego/ YAML jako baza, bo czy spis wszystkich zadan uzytkownika nie sa w “bazie”?