Forum: Italian Ruby user group Trasformare un hash in opzioni per gsub

Posted by Andrea Ranaldi (mdrew)
on 2012-07-12 11:57
Ciao a tutti,

Per inviare delle email utilizzo gsub per modificarne il contenuto.
Attualmente utilizzo un set di variabili limitato e predefinito che
allego all'indirizzo (nome,cagnome,email,var1,var2,var3,var4,var5) e poi
effettuo la sostituzione con questo semplice helper:

def usertext(text, address)
    return
text.gsub(/({email}|{name}|{surname}|{var1}|{var2}|{var3}|{var4}|{var5})/,
"{email}" => address.email, "{name}" => address.name, "{surname}" =>
address.surname, "{var1}" => address.var1, "{var2}" => address.var2,
"{var3}" => address.var3, "{var4}" => address.var4, "{var5}" =>
address.var5)

end

La mia idea sarebbe di rendere le opzioni dinamiche mettendole in una
tabella collegata

address has_many options

La stringa di ricerca la genero facilmente con un metodo ad hoc nel
modello address ma non riesco a trovare una soluzione per le
sostituzioni o meglio: riesco ad ottenere un hash con le coppie chiave
valore  ( {"{var1}" => "val1", ..} )  ma gsub non mi accetta un hash
unico ne pretende vari separati e non capisco come farlo.....

Qualche idea?

Andrea
Posted by Simone Carletti (weppos)
on 2012-07-12 13:24
(Received via mailing list)
Usa l'interpolazione via hash.
http://ruby-doc.org/core-1.9.3/String.html#method-i-25

Usi %{foo} come placeholder, poi passi l'hash con i valori da 
sostituire.

-- Simone


2012/7/12 Andrea Ranaldi <andrea.ranaldi@gmail.com>

> "{email}" => address.email, "{name}" => address.name, "{surname}" =>
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> Ml mailing list
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml
>



--
Simone Carletti
Application Developer

Site & Blog: http://www.simonecarletti.com/
LinkedIn: http://linkedin.com/in/weppos
Skype: weppos
Posted by Andrea Ranaldi (mdrew)
on 2012-07-12 15:06
Risolto.....

Il problema non era nel hash: gsub interpreta indistintamente sia vari 
array separati da una virgola che un singolo array con tutto.

Es:

t.gsub(%r{reg}, "{uno}" => "value1", "{due}" => "value2") ==
t.gsub(%r{reg}, {"{uno}" => "value1", "{due}" => "value2"}) ==
t.gsub(%r{reg}, address.funzione_complessa_che_gerera_hash)

Posso quindi generarmi tranquillamente l'hash dal modello e passarglielo 
tutto insieme.

Alla fine era piu` facile del previsto....
grazie

P.S. X Simone, Non ho capito la storia dell'interpolazione.... Alla fine 
ottieni sempre una stringa no?
Posted by Simone Carletti (weppos)
on 2012-07-12 15:54
(Received via mailing list)
S, ma l'implementazione necessaria  molto pi ridotta.
Alla fine non ti serve gsub quando la funzionalit  presente di serie in
String.


2012/7/12 Andrea Ranaldi <andrea.ranaldi@gmail.com>

> P.S. X Simone, Non ho capito la storia dell'interpolazione.... Alla fine
> ottieni sempre una stringa no?
>



--
Simone Carletti
Application Developer

Site & Blog: http://www.simonecarletti.com/
LinkedIn: http://linkedin.com/in/weppos
Skype: weppos
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.