Notes:
Your code looks pretty good, but I personally wouldn't have written it as a mixable module, this code seemps completely independent from
ActiveRecord
. I'd write aSpreadSheetReader
class and just use it from wherever you want (this way the code is more modular).Where is
import_from
called from? it seems some code is missing.This
vat_in
conditional seems too verbose. Which are the possible values ofrow[:client]
?
I'd write something like:
company = company_from_somewhere_i_dont_know
columns = [:name, :client, <other columns>...]
SpreadSheetReader.rows(:columns => columns).eachmap do |row|
invoice = company.invoices.find_or_initialize_by_name(row[:name].to_s)
vat_in = row[:client].is_a?(String) ? row[:client] : row[:client].to_i.to_s
client = company.clients.find_by_vat_in!(vat_in)
invoice.update_attributes!({
:pay_date => row[:pay_date],
:full_amount => row[:full_amount].to_i,
:paid_amount => row[:paid_amount].to_i,
})
invoice
end