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