2011-10-24 13 views
7

La mia classe è:Aggiornamento di un file YAML in 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 

Utilizzando questa classe:

oj = Mycfg.new 
oj.init 

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

oj.save 

file YAML:

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

Come finisco il metodo save per aggiornare il file YAML se qualcosa è cambiato?

+1

È necessario memorizzare nella cache il valore originale dell'hash. Quindi, alla fine del programma, controlla se è uguale alle attuali opzioni @@. Se è così, cancella il vecchio file yaml e fai scrivere a ruby ​​l'hash to_yaml da zero. Se vuoi vedere questo come esempio, ti farei volentieri. –

+0

Potremmo aggiungere un @@ copy_options per questa classe per memorizzare nella cache la modifica, il punto è che non so come salvare i dati nel file yaml. – coolesting

risposta

11

È un solo rivestimento.

Il w+ tronca il file a 0 lunghezza e scrive come se fosse un nuovo file.

options_hash è il valore corrente di @@options.

Avrete bisogno di un getter/accessor per recuperare l'hash completo. Se hai effettuato @@options una variabile di istanza anziché una variabile di classe, puoi semplicemente fare un attr_accessor :options e recuperarlo con 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))} ' funziona per me, e non può trovare' options_hash' – coolesting