2011-10-24 10 views
7

Moja klasa jest:Aktualizowanie pliku YAML w Ruby

class Mycfg 
    @@options = {} 

    def init 
     @@options = YAML.load_file(Dir.pwd + PATH) 
    end 

    def set(key, val) 
     @@options[key] = val 
    end 

    def get(key) 
     @@options[key] 
    end 

    def save 
    end 
end 

Stosując tę ​​klasę:

oj = Mycfg.new 
oj.init 

if oj.get 'name' == 'tom' 
    oj.set 'changed', Data.now 
end 

oj.save 

plik YAML:

name : tom 
pawd : 123456 
version : 0.0.1 
created : 2011-10-24 
changed : 2011-10-24 

Jak skończę metodę save zaktualizować plik YAML, jeśli coś się zmieniło?

+1

Powinieneś buforować oryginalną wartość skrótu. Następnie na końcu programu sprawdź, czy jest równy aktualnym opcjom @@. Jeśli tak, skasuj stary plik yaml i wypisz ruby ​​od hasza to_yaml od zera. Jeśli chcesz zobaczyć to jako przykład, chętnie bym to zrobił. –

+0

Możemy dodać @@ copy_options dla tej klasy do pamięci podręcznej zmienionej, chodzi o to, że nie wiem jak zapisać dane do pliku yaml. – coolesting

Odpowiedz

11

To jedna liniowa.

w+ obcina plik do 0-długości i zapisuje jako nowy plik.

options_hash jest bieżąca wartość @@options.

Będziesz potrzebował gettera/akcesora do odzyskania pełnego skrótu. Jeśli wprowadziłeś @@options zmienną instancji zamiast zmiennej klasy, możesz po prostu wykonać attr_accessor :options, a następnie pobrać ją za pomocą oj.options.

File.open(Dir.pwd + PATH, 'w+') {|f| f.write(options_hash.to_yaml) } 
+1

'File.open (Dir.pwd + PATH, 'w +') {| f | f.write (YAML :: dump (@@ options))} ' działa dla mnie i nie może znaleźć' options_hash' – coolesting