Extender clase nativa Ruby

Va una pregunta fácil, disculpen la trivialidad.
Quiero extender la clase 'float ’ para agregarle un metodo ‘to_money’
para mostrar el contenido de un float ya formateado como dinero

Ej.

f = 1000.3

f.to_money(’$’)
$1,000.30

De esta manera podré poner en la vista

<%= @client.balance.to_money %>

lo prefiero a usar un helper

<%= to_money(@client.balance) %>

El codigo de to_money ya lo tengo escrito, lo que no se es como y donde
extender la clase float.
Mi app no es ni financiera ni contable asi que no me preocupo por los
redondeos de float, todos las sumas salen de queries como

select sum(monto) as suma
from transacciones
where …

Gracias de Antemano.

Creo (no puedo confirmarlo ahora mismo) que cualquier fichero .rb que
sueltes
en lib/ será evaluado automáticamente, así que ese parece un buen lugar.

config/environment.rb se lee cada vez que se levante el web server,
simplemente le agregué este codigo al final

extender la clase Float

class Float
def to_money(sign=’’)

end
end

También recordá que existe el helper number_to_currency.

(no sé si es 100% correcto extender la clase por un tema de
presentación… pero bueno, ActiveSupport extiende Array para ponerle
to_sentence y es lo más cómodo que existe)

Uno nunca extiende clases por temas de presentacion, lo hace por
temas de programacion… y de estetica y sensibilidad y comodidad y
hasta por flojera. :slight_smile:

Ahora, donde puede haber equivocacion es que cual clase extender.
En este caso en particular, creo que extender Float es ser demasiado
especifico. Porque no hacerlo en Numeric? y asi incluir a los pobres
enteros que tambien tienen derechos?

También recordá que existe el helper number_to_currency.

Muy buen helper, es lo que yo digo, que el Rails fue hecho pensando en
todas las necesidades del desarrollo Web

(no sé si es 100% correcto extender la clase por un tema de
presentación…

Para serte sincero yo tampoco sé si es lo correcto, aunque me parece lo
más natural, los datos almacenados en formato binario no nos sirve de
nada a nosotros los humanos, habría que esperar si en la siguiente
revolución tecnológica nos conectan un decodificador binario en nuestra
corteza cerebral, así la capa de presentación será cosa del pasado. Para
mi es claro que un objecto tenga un interface público para mostar su
contenido en un modo legible por nosotros. :wink:

Aqui un ejemplo del API de Ruby
http://corelib.rubyonrails.org/classes/Time.html#M000264

En este caso en particular, creo que extender Float es ser demasiado
especifico. Porque no hacerlo en Numeric? y asi incluir a los pobres
enteros que tambien tienen derechos?

No lo consideré necesario, “to_s” ya hace un buen trabajo