# Trasformare un hash in opzioni per gsub

**URL:** <https://www.ruby-forum.com/t/trasformare-un-hash-in-opzioni-per-gsub/221388>\
**Category:** IT\
**Created:** [July 12, 2012, 11:57am UTC](https://www.ruby-forum.com/t/trasformare-un-hash-in-opzioni-per-gsub/221388 "2012-07-12T11:57:22Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![aris](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/258eb7/32.png) [@aris](https://www.ruby-forum.com/u/aris)\
**Post date:** [July 12, 2012, 11:57am UTC](https://www.ruby-forum.com/t/trasformare-un-hash-in-opzioni-per-gsub/221388/1 "2012-07-12T11:57:22Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![reis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f1d935/32.png) [@reis](https://www.ruby-forum.com/u/reis)\
**Post date:** [July 12, 2012, 1:24pm UTC](https://www.ruby-forum.com/t/trasformare-un-hash-in-opzioni-per-gsub/221388/2 "2012-07-12T13:24:10Z")

</div>

Usa l’interpolazione via hash.

> **[Public Instance Methods - Class: String (Ruby 1.9.3)](http://ruby-doc.org/core-1.9.3/String.html#method-i-25)**
>
> Format—Uses str as a format specification, and returns the result of applying it to arg. If the format specification contains more than one substitution, then arg must be an Array or Hash containing the values to be substituted. See Kernel::sprintf...

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

– Simone

2012/7/12 Andrea R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

> “{email}” =\> address.email, “{name}” =\> address.name, “{surname}” =\>
> 
> –  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
> 
> * * *
> 
> Ml mailing list  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> [http://lists.ruby-it.org/mailman/listinfo/ml](http://lists.ruby-it.org/mailman/listinfo/ml)

–  
Simone C.  
Application Developer

Site & Blog: [http://www.simonecarletti.com/](http://www.simonecarletti.com/)  
LinkedIn: [http://linkedin.com/in/weppos](http://linkedin.com/in/weppos)  
Skype: weppos

---

<div class="post-metadata">

**Author:** ![reis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f1d935/32.png) [@reis](https://www.ruby-forum.com/u/reis)\
**Post date:** [July 12, 2012, 3:06pm UTC](https://www.ruby-forum.com/t/trasformare-un-hash-in-opzioni-per-gsub/221388/3 "2012-07-12T15:06:18Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![reis](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f1d935/32.png) [@reis](https://www.ruby-forum.com/u/reis)\
**Post date:** [July 12, 2012, 3:54pm UTC](https://www.ruby-forum.com/t/trasformare-un-hash-in-opzioni-per-gsub/221388/4 "2012-07-12T15:54:20Z")

</div>

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 R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

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

–  
Simone C.  
Application Developer

Site & Blog: [http://www.simonecarletti.com/](http://www.simonecarletti.com/)  
LinkedIn: [http://linkedin.com/in/weppos](http://linkedin.com/in/weppos)  
Skype: weppos
