lib/assimilate/batch.rb in assimilate-0.0.1 vs lib/assimilate/batch.rb in assimilate-0.0.2
- old
+ new
@@ -12,10 +12,11 @@
@noops = []
@changes = []
@adds = []
@deletes = []
+ @resolved = false
end
def load_baseline
stored_records = @catalog.catalog.find(@catalog.domainkey => @domain).to_a
@baseline = stored_records.each_with_object({}) do |rec, h|
@@ -50,27 +51,32 @@
end
# compute anything needed before we can write updates to permanent store
# * find records that have been deleted
def resolve
- @deleted_keys = @baseline.keys - @seen.keys
+ if !@resolved
+ @deleted_keys = @baseline.keys - @seen.keys
- @updated_field_counts = @changes.each_with_object(Hash.new(0)) do |rec,h|
- key = rec[idfield]
- diffs = rec.diff(stripped_record_for(key))
- diffs.keys.each do |f|
- h[f] += 1
+ @updated_field_counts = @changes.each_with_object(Hash.new(0)) do |rec,h|
+ key = rec[idfield]
+ diffs = rec.diff(stripped_record_for(key))
+ diffs.keys.each do |f|
+ h[f] += 1
+ end
end
+
+ @resolved = true
end
end
def stats
resolve
{
:baseline_count => @baseline.size,
:final_count => @baseline.size + @adds.count,
:adds_count => @adds.count,
+ :new_ids => @adds.map {|rec| rec[idfield]},
:deletes_count => @deleted_keys.count,
:updates_count => @changes.count,
:unchanged_count => @noops.count,
:updated_fields => @updated_field_counts
}
@@ -84,11 +90,13 @@
apply_inserts
apply_updates
end
def record_batch
- raise(Assimilate::DuplicateImportError, "duplicate batch") if @catalog.batches.find('domain' => @domain, 'datestamp' => @datestamp).to_a.any?
+ raise(Assimilate::DuplicateImportError, "duplicate batch for datestamp #{datestamp}") if @catalog.batches.find('domain' => @domain, 'datestamp' => @datestamp).to_a.any?
+ raise(Assimilate::DuplicateImportError, "duplicate batch for file #{@filename}") if @catalog.batches.find('domain' => @domain, 'filename' => @filename).to_a.any?
+
@catalog.batches.insert({
'domain' => @domain,
'datestamp' => @datestamp,
'filename' => @filename
})
@@ -134,6 +142,9 @@
end
end
end
class Assimilate::DuplicateImportError < StandardError
+end
+
+class Assimilate::CorruptDataError < StandardError
end