Tintin81
Tintin81

Reputation: 10207

How to DRY up two functions in Ruby?

Is there a way to DRY up these two Ruby functions by moving the three lines that both functions share to another function?

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

Thanks for any help?

Upvotes: 1

Views: 63

Answers (2)

Alexander Kireyev
Alexander Kireyev

Reputation: 10825

As taro suggests, it will be:

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

Upvotes: 2

usha
usha

Reputation: 29349

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

Upvotes: 2

Related Questions