Как удалить две функции в Ruby?

#ruby #ruby-on-rails-3

#ruby #ruby-on-rails-3

Вопрос:

Есть ли способ УДАЛИТЬ эти две функции Ruby, переместив три строки, которые разделяют обе функции, в другую функцию?

 def format_currency(number)
  number_to_currency(number, 
    :unit       => current_user.currency_unit, 
    :delimiter  => current_user.currency_delimiter, 
    :separator  => current_user.currency_separator, 
    :format     => current_user.currency_format
  )
end

def format_currency_for_pdf(number, invoice)    
  number_to_currency(number / invoice.exchange_rate, 
    :unit       => CURRENCIES[invoice.currency]
    :delimiter  => current_user.currency_delimiter, 
    :separator  => current_user.currency_separator, 
    :format     => current_user.currency_format
  )
end
  

Спасибо за любую помощь?

Комментарии:

1. вы можете объединить хэш в другую, если это того стоит.

Ответ №1:

Как предполагает Таро, это будет:

 def format_currency(number)
  number_to_currency(number,
    currency_hash(current_user.currency_unit)
  )
end

def format_currency_for_pdf(number, invoice)
  number_to_currency(number / invoice.exchange_rate,
    currency_hash(CURRENCIES[invoice.currency])
  )
end

def currency_hash unit
  {
    :unit       => unit,
    :delimiter  => current_user.currency_delimiter,
    :separator  => current_user.currency_separator,
    :format     => current_user.currency_format
  }
end
  

Ответ №2:

 def format_currency(number)
  number_to_currency(number, 
    currency_hash(current_user.currency_unit) 
  )
end

def format_currency_for_pdf(number, invoice)    
  number_to_currency(number / invoice.exchange_rate, 
    currency_hash(CURRENCIES[invoice.currency])
  )
end

def currency_hash(unit)
  {
    :unit       => unit,
    :delimiter  => current_user.currency_delimiter, 
    :separator  => current_user.currency_separator, 
    :format     => current_user.currency_format
  }
end
  

Комментарии:

1. ахаха, то же самое решение, даже название метода.

2. Спасибо, что указали на это. Я думал о другом решении, передав format, но в итоге получил другое решение и забыл удалить format

3. Большое спасибо вам обоим. Я бросил монетку, а затем отметил ответ зише как правильный.