Publicamos Acts As Decimal
Últimamente hemos estado trabajando en algunos proyectos con Rails 3 donde necesitábamos tratar con precios. Puesto que los precios son naturalmente variables de punto flotante (12.95, 297.50...) entendíamos que debían ser tratados como tales, pero sin embargo, para evitar pérdidas de precisión (¡los precios son sensibles, ya se sabe!), queríamos guardarlos como enteros en la base de datos.
Por qué no hacemos una simple gema entonces?
Entonces se nos ocurrió hacer esta pequeña gema, y nos enorgullece presentarla a nuestros lectores. Quizás hasta hace un poco más llevaderas vuestras vidas de desarrollador :)
La gema está alojada en Github y publicada también en Gemcutter, de modo que es muy fácil de instalar y usar. Depende sólamente de ActiveRecord 3.0.0.
En vuestro Gemfile:
gem 'acts_as_decimal'
Entonces, en vuestro modelo:
class Product < ActiveRecord::Base
acts_as_decimal :price # Defaults to 2 decimals, or...
acts_as_decimal :price, :decimals => 5 # ... as you wish!
end
Ahora podéis guardar valores en :price y recuperarlos como punto flotante:
product = Product.new
product.price = 12.30
product.price # => 12.30
Pero tenéis también acceso a los datos en entero de la base de datos a través de :price_raw:
product.price_raw # => 1230
product.price_raw = 4309 # => product.price == 43.09
Además, está disponible también un humanizador para el atributo. Tened en cuenta que devuelve una cadena, no un punto flotante.
product = Product.new
product.price = 3900400.40
product.humanized_price
# => "3.900.400,40"
product.humanized_price(:thousand_delimiters => false)
# => "3900400.40"
Estamos pensando también en desarrollar algunos matchers para Remarkable enseguida que podamos!
Y eso es todo. Esperamos que lo encontréis útil, y si consideráis que le falta alguna funcionalidad interesante, os animamos a contribuir! :)