Class: ActAsImportable::Importer

Inherits:
Object
  • Object
show all
Defined in:
lib/act_as_importable/importer.rb

Direct Known Subclasses

CSVImporter

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Importer

Returns a new instance of Importer.



4
5
6
7
8
# File 'lib/act_as_importable/importer.rb', line 4

def initialize(options = {})
  @default_options = options
  @imported_records = []
  @errors = []
end

Instance Method Details

#failed_importsObject



50
51
52
53
# File 'lib/act_as_importable/importer.rb', line 50

def failed_imports
  # Note: We don't want to re-validate the objects.
  imported_records.reject { |r| r.errors.empty? }
end

#filter_columns(row) ⇒ Object



59
60
61
62
63
64
65
# File 'lib/act_as_importable/importer.rb', line 59

def filter_columns(row)
  except = Array(options[:except]).map { |i| i.to_s }
  only = Array(options[:only]).map { |i| i.to_s }
  row.reject! { |key, value| except.include? key.to_s } if except.present?
  row.select! { |key, value| only.include? key.to_s } if only.present?
  row
end

#import_data(data) ⇒ Object



14
15
16
17
18
# File 'lib/act_as_importable/importer.rb', line 14

def import_data(data)
  data.map do |row|
    import_record(row)
  end
end

#import_record(row) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/act_as_importable/importer.rb', line 20

def import_record(row)
  row = prepare_row_for_import(row)
  record = find_or_create_record(row)
  record.update_attributes(row)
  record.save
  imported_records << record
  record
rescue Exception => e
  record = model_class.new
  # Assign the valid attributes (without saving)
  record.assign_attributes(row.select { |k,v| record.attributes.keys.include? k })
  record.errors.add :base, e.message
  record.import_data = row if record.respond_to? :import_data=
  imported_records << record
  record
end

#imported_recordsObject



41
42
43
# File 'lib/act_as_importable/importer.rb', line 41

def imported_records
  @imported_records ||= []
end

#missing_uid_values(row) ⇒ Object



37
38
39
# File 'lib/act_as_importable/importer.rb', line 37

def missing_uid_values(row)
  uid_values(row).select { |k, v| v.blank? }
end

#model_classObject



55
56
57
# File 'lib/act_as_importable/importer.rb', line 55

def model_class
  options[:model_class]
end

#optionsObject



10
11
12
# File 'lib/act_as_importable/importer.rb', line 10

def options
  @default_options
end

#successful_importsObject



45
46
47
48
# File 'lib/act_as_importable/importer.rb', line 45

def successful_imports
  # Note: We don't want to re-validate the objects.
  imported_records.select { |r| r.errors.empty? }
end