Sha256: ee20054118e1d7c7fe3ed7cd34dc6102739c69cd5679c0b993ec295298f64d29

Contents?: true

Size: 849 Bytes

Versions: 1

Compression:

Stored size: 849 Bytes

Contents

require "difference_update_seed/version"

module DifferenceUpdateSeed
  refine ActiveRecord::Base.singleton_class do
    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
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
difference_update_seed-0.0.1 lib/difference_update_seed.rb