class ActiveRecordImporter::DataProcessor

Public Instance Methods

process() click to toggle source
# File lib/active_record_importer/data_processor.rb, line 15
def process
  fetch_instance_attributes
  fetch_find_attributes
  create_instance
end

Private Instance Methods

append_errors(error, rollback = false) click to toggle source
# File lib/active_record_importer/data_processor.rb, line 97
def append_errors(error, rollback = false)
  return if error.blank?

  message = error.is_a?(Exception) ? error.message : error
  @row_errors = message
  fail ActiveRecord::Rollback if rollback
end
attributes_without_state_machine_attrs() click to toggle source
# File lib/active_record_importer/data_processor.rb, line 83
def attributes_without_state_machine_attrs
  instance_attrs.except(*state_machine_attr)
end
create_instance() click to toggle source
# File lib/active_record_importer/data_processor.rb, line 23
def create_instance
  ActiveRecord::Base.transaction do
    begin
      @instance =
        InstanceBuilder.new(
          importable: importable,
          insert_method: insert_method,
          find_attributes: find_attributes,
          instance_attrs: attributes_without_state_machine_attrs
        ).build

      methods_after_upsert
      true
    rescue => exception
      append_errors(exception, true)
    end
  end
end
fetch_find_attributes() click to toggle source
# File lib/active_record_importer/data_processor.rb, line 50
def fetch_find_attributes
  @find_attributes = Attribute::FindOptionsBuilder.new(
    importable: importable,
    find_options: find_options,
    attrs: instance_attrs
  ).build
rescue => exception
  append_errors(exception)
end
fetch_instance_attributes() click to toggle source
# File lib/active_record_importer/data_processor.rb, line 42
def fetch_instance_attributes
  @instance_attrs = Attribute::AttributesBuilder.new(
    importable, row_attrs
  ).build
rescue => exception
  append_errors(exception)
end
methods_after_upsert() click to toggle source
# File lib/active_record_importer/data_processor.rb, line 60
def methods_after_upsert
  return if instance.blank? || !instance.persisted?

  state_transitions
  run_after_save_callbacks
end
run_after_save_callbacks() click to toggle source
# File lib/active_record_importer/data_processor.rb, line 91
def run_after_save_callbacks
  return if skip_callbacks?

  ImportCallbacker.new(instance, after_save).call
end
set_find_options() click to toggle source
# File lib/active_record_importer/data_processor.rb, line 111
def set_find_options
  import.try(:find_options) || importer_options.find_options.join(',')
end
set_insert_method() click to toggle source
# File lib/active_record_importer/data_processor.rb, line 105
def set_insert_method
  @insert_method = import.try(:insert_method)
  @insert_method ||= importer_options.insert_method
  @insert_method ||= 'insert'
end
skip_callbacks?() click to toggle source
# File lib/active_record_importer/data_processor.rb, line 87
def skip_callbacks?
  after_save.blank? || instance.blank? || instance.new_record?
end
state_transitions() click to toggle source
# File lib/active_record_importer/data_processor.rb, line 73
def state_transitions
  return if state_machine_attr.blank?

  state_machine_attr.each do |attr|
    state = row_attrs[attr.to_sym]
    next if state.blank? || state == instance.send(attr)
    TransitionProcessor.new(instance, state, attr).transit
  end
end