module DifferenceUpdateSeed

Constants

VERSION

Public Instance Methods

seed(*keys, &block) click to toggle source
# File lib/difference_update_seed.rb, line 5
def seed(*keys, &block)
  unknown_columns = keys.to_a.map(&:to_s) - column_names
  unless unknown_columns.empty?
    fail ArgumentError, "Unknown columns: #{unknown_columns.join(',')}. Valid columns: #{column_names.join(',')}"
  end

  new_record = new(&block)
  record = find_or_initialize_by(new_record.attributes.slice(*keys.map(&:to_s)))
  record.tap(&block)

  if record.new_record?
    record.save!
    puts "Insert new record #{record.attributes.to_s}"
  else
    if record.changed?
      puts "Update record. ID: #{record.id},  #{record.changes}"
      record.save!
    else
      puts "Do nothing. ID #{record.id}"
    end
  end
end