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