Class: ActAsImportable::Importer
- Inherits:
-
Object
- Object
- ActAsImportable::Importer
- Defined in:
- lib/act_as_importable/importer.rb
Direct Known Subclasses
Instance Method Summary collapse
- #failed_imports ⇒ Object
- #filter_columns(row) ⇒ Object
- #import_data(data) ⇒ Object
- #import_record(row) ⇒ Object
- #imported_records ⇒ Object
-
#initialize(options = {}) ⇒ Importer
constructor
A new instance of Importer.
- #missing_uid_values(row) ⇒ Object
- #model_class ⇒ Object
- #options ⇒ Object
- #successful_imports ⇒ Object
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( = {}) @default_options = @imported_records = [] @errors = [] end |
Instance Method Details
#failed_imports ⇒ Object
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([:except]).map { |i| i.to_s } only = Array([: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. record.import_data = row if record.respond_to? :import_data= imported_records << record record end |
#imported_records ⇒ Object
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_class ⇒ Object
55 56 57 |
# File 'lib/act_as_importable/importer.rb', line 55 def model_class [:model_class] end |
#options ⇒ Object
10 11 12 |
# File 'lib/act_as_importable/importer.rb', line 10 def @default_options end |
#successful_imports ⇒ Object
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 |