class SeedGimmick::Seed::Difference

Attributes

changes[R]

Public Class Methods

extraction(seed) click to toggle source
# File lib/seed_gimmick/seed/difference.rb, line 15
def extraction(seed)
  pk = seed.model.primary_key
  database = seed.model.all.each_with_object({}) {|row, obj|
    obj[row.public_send(pk)] = row
  }
  seed_data = seed.seed_io.values.each_with_object({}) {|row, obj|
    obj[row[pk].to_i] = row
  }
  diff = []
  (database.keys - seed_data.keys).each do |id|
    diff << [Flag::DATABASE, id, database.delete(id), nil, nil]
  end
  (seed_data.keys - database.keys).each do |id|
    diff << [Flag::SEED, id, nil, seed_data.delete(id), nil]
  end
  database.each do |id, row|
    s_attrs = seed_data[id].dup
    s_attrs.delete(pk)
    row.assign_attributes(s_attrs)
    if row.changed?
      changes = row.changes
      changes.each {|k,(old,_)| row.public_send("#{k}=", old) }
      diff << [Flag::CHANGE, id, row, seed_data.delete(id), changes]
    end
  end
  new(diff)
end
new(diff) click to toggle source
# File lib/seed_gimmick/seed/difference.rb, line 44
def initialize(diff)
  @changes = diff.sort_by(&:second).map {|d| Change.new(*d) }
end

Public Instance Methods

changed?() click to toggle source
# File lib/seed_gimmick/seed/difference.rb, line 48
def changed?
  !@changes.empty?
end
each() { |change| ... } click to toggle source
# File lib/seed_gimmick/seed/difference.rb, line 52
def each
  @changes.each do |change|
    yield change
  end
end