Ho creato la mia prima gemma e volevo un parere dai piuesperti e se c'era qualche "paziente" che avesse voglia di testarlo su i rails piu
vecchi.
la gemma si chiama “yesno” e si occupa di trasformare i valori booleani
in stringhe es: si/no, vero/false, maschio/femmina ecc.
La trasformazione avviene sfruttando I18n.
Ovviamente non eniente di rivoluzionario ma e un helper che mi
portavo sempre appresso, avevo voglia di provare a creare una gemma e
magari puo` fare comodo a qualcuno…
Aggiungendo il maschile ed il femminile si arriva ad otto possibili
declinazioni per ogni tipo di booleano, alias tre if per ogni utilizzo
se maschile
se plurale
se vero
Probabilmente dovrei cambiare approccio e fare una classe strutturata…
yesno(tipo, variabile).pluralize.femminalize
Anche se perderei l’occasione di fare il monorigone
Mi ha convinto per le opzioni!
Ho modificato la classe in questo modo:
def yesno(to_validate, options = {})
defaults = {
:type => “default”,
:pluralize => false,
:female => false
}
options = defaults.merge(options)
if options[:pluralize] == false
if options[:female] == false
return to_validate ? I18n.t(“yesno.#{options[:type]}.smt”) :
I18n.t(“yesno.#{options[:type]}.smf”)
else
return to_validate ? I18n.t(“yesno.#{options[:type]}.sft”) :
I18n.t(“yesno.#{options[:type]}.sff”)
end
else
if options[:female] == false
return to_validate ? I18n.t(“yesno.#{options[:type]}.pmt”) :
I18n.t(“yesno.#{options[:type]}.pmf”)
else
return to_validate ? I18n.t(“yesno.#{options[:type]}.pft”) :
I18n.t(“yesno.#{options[:type]}.pff”)
end
end
end
Poi visto che mi rimaneva l’ansia dei quattro if (le tre opzioni piu` il
test per la risposta) ne ho creata anche una fast in cui le impostazioni
si passano, in caso, manualmente tramite stringa.
def fyesno(to_validate, type = “default”, options = “sm”)
return to_validate ? I18n.t(“yesno.#{type}.#{options}t”) :
I18n.t(“yesno.#{type}.#{options}f”)
end
in questo modo non fai altro che passargli la strada verso la risposta.
Grazie per i suggerimenti
Andrea
P.S.
Nelle opzioni ho perso mezzora a cercare di capire percheme ne accettava tre e non quattro. Poi mi sono accorto che mi ero dimenticato un else...... Anche oggi il computer ha certificato la mia stupidita.
I metodi sono fighi ma trovo che i parametri siano più funzionali ma ti
consiglierei di usare un unico hash che migliora la comprensione del
codice ed agevola gli utilizzatori:
def yes_no(options={})
return unless options[:type] #imposti i tuoi valori di default
options = {:pluralize => nil, :femminalize => nil}.merge(options)
…
end