def import( *args )
@logger = Logger.new(STDOUT)
@logger.level = Logger::DEBUG
options = { :validate=>true, :timestamps=>true }
options.merge!( args.pop ) if args.last.is_a? Hash
if args.last.is_a?( Array ) and args.last.first.is_a? ActiveRecord::Base
if args.length == 2
models = args.last
column_names = args.first
else
models = args.first
column_names = self.column_names.dup
end
array_of_attributes = []
models.each do |model|
attributes = []
column_names.each do |name|
attributes << model.send( "#{name}_before_type_cast" )
end
array_of_attributes << attributes
end
elsif args.size == 2 and args.first.is_a?( Array ) and args.last.is_a?( Array )
column_names, array_of_attributes = args
else
raise ArgumentError.new( "Invalid arguments!" )
end
if !column_names.include?(primary_key) && sequence_name && connection.prefetch_primary_key?
column_names << primary_key
array_of_attributes.each { |a| a << nil }
end
is_validating = options.delete( :validate )
array_of_attributes = array_of_attributes.dup
if record_timestamps && options.delete( :timestamps )
add_special_rails_stamps column_names, array_of_attributes, options
end
return_obj = if is_validating
import_with_validations( column_names, array_of_attributes, options )
else
num_inserts = import_without_validations_or_callbacks( column_names, array_of_attributes, options )
OpenStruct.new :failed_instances=>[], :num_inserts=>num_inserts
end
if options[:synchronize]
synchronize( options[:synchronize] )
end
return_obj.num_inserts = 0 if return_obj.num_inserts.nil?
return_obj
end