Как упростить мой модуль конвертации денег Rails?

58
6

Просто из любопытства:

Есть ли способ упростить такой файл:

module Converter

def hourly_rate
hourly_rate_in_cents.to_d / 100 if hourly_rate_in_cents
end

def hourly_rate=(number)
self.hourly_rate_in_cents = number.to_d * 100 if number.present?
end

def price
price_in_cents.to_d / 100 if price_in_cents
end

def price=(number)
self.price_in_cents = number.to_d * 100 if number.present?
end

def amount
amount_in_cents.to_d / 100 if amount_in_cents
end

def amount=(number)
self.amount_in_cents = number.to_d * 100 if number.present?
end

end

Я использую эту функцию, потому что мне нужно хранить все значения, связанные с деньгами, как integers в моей базе данных, но мне не нравится повторная передача в моем коде.

спросил(а) 2013-05-14T17:21:00+04:00 7 лет, 6 месяцев назад
1
Решение
58

Вы могли бы сделать что-то вроде этого

module Converter

def self.def_converter(name)
define_method(name) do
value_in_cents = send("#{name}_in_cents")
value_in_cents.to_d / 100 if value_in_cents.present?
end

define_method("#{name}=") do |number|
send("#{name}_in_cents=", number.to_d * 100) if number.present?
end
end

def_converter(:hourly_rate)
def_converter(:price)
def_converter(:amount)

end

ответил(а) 2013-05-14T17:43:00+04:00 7 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема