class CarefulImport::Importer

Constants

INVALID_ARGUMENT_MESSAGE

Public Class Methods

new(resource_class) click to toggle source
# File lib/careful_import/importer.rb, line 11
def initialize(resource_class)
  @resource_class = resource_class
  @primary_key = resource_class.primary_key
end

Public Instance Methods

import(*args) click to toggle source

github.com/zdennis/activerecord-import/blob/v0.20.2/lib/activerecord-import/import.rb#L174 Potential Args:

Model.import array_of_models
Model.import column_names, array_of_models
Model.import array_of_hash_objects
Model.import column_names, array_of_hash_objects
Model.import column_names, array_of_values
Model.import column_names, array_of_values, options
# File lib/careful_import/importer.rb, line 25
def import(*args)
  options = args.extract_options!
  validated_args = build_validated_args(*args)

  @resource_class.__private_import_helper__(*validated_args, options)
end

Private Instance Methods

build_validated_args(*args) click to toggle source
# File lib/careful_import/importer.rb, line 38
def build_validated_args(*args)
  return args if args.first.is_a?(Array) && args.first.empty?

  if args.first.is_a?(Array) && (args.first.first.is_a?(ActiveRecord::Base) || args.first.first.is_a?(Hash))
    records = validate_and_remove_primary_key(args.first)
    [records]
  elsif args.first.is_a?(Array) && args.second.is_a?(Array)
    # the first arg will be a list of column names and the second arg will be the values. Check for column name 'id'
    check_columns_for_primary_key(args.first)
    args
  else
    # if the above conditions aren't met then the args are not correct so we will raise an error here.
    raise ImportArgumentError.new("Invalid arguments!")
  end
end
check_columns_for_primary_key(columns) click to toggle source
# File lib/careful_import/importer.rb, line 73
def check_columns_for_primary_key(columns)
  raise_usage_error(columns) if columns.include?(@primary_key.to_sym) || columns.include?(@primary_key)
end
raise_usage_error(arg) click to toggle source
# File lib/careful_import/importer.rb, line 34
def raise_usage_error(arg)
  raise ImportArgumentError.new("#{INVALID_ARGUMENT_MESSAGE} Invalid argument: #{arg.inspect}")
end
validate_and_remove_primary_key(records) click to toggle source
# File lib/careful_import/importer.rb, line 54
def validate_and_remove_primary_key(records)
  return records if records.empty?

  records.map do |record|
    if record.is_a?(ActiveRecord::Base)
      # if the record id is nil it is a new record and we will instead convert this record to a hash without id key
      raise_usage_error(record) unless record.public_send(@primary_key).nil?

      record.attributes.except(@primary_key)
    elsif record.is_a?(Hash)
      raise_usage_error(record) if record[@primary_key].present?

      record.except(@primary_key)
    else
      raise ImportArgumentError.new("Invalid argument: #{record}")
    end
  end
end