Method: CouchDiff#initialize
- Defined in:
- lib/couchdiff.rb
#initialize(src_docs, dst_docs, &changed) ⇒ CouchDiff
Returns a new instance of CouchDiff.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/couchdiff.rb', line 42 def initialize src_docs, dst_docs, &changed # default behavior is to compare all fields besides the _rev and revpos field changed ||= proc{ |doc1, doc2| doc1.diff(doc2, EXCLUDED_KEYS).size > 0 } @added, @updated, @deleted, @unchanged = [], [], [], [] dst_doc_map, src_doc_map = {}, {} # create hash maps for fast lookup src_docs.each {|doc| src_doc_map[doc['id']] = doc; assert_doc(doc)} dst_docs.each {|doc| dst_doc_map[doc['id']] = doc; assert_doc(doc)} # updated/added docs src_docs.each do |doc| id = doc['id'] if !(dst_doc = dst_doc_map[id]).nil? if changed.yield(doc['doc'], dst_doc['doc']) || (doc['doc'], dst_doc['doc']) @updated << [doc, dst_doc] else @unchanged << doc end else @added << doc end end # deleted docs dst_docs.each do |doc| id = doc['id'] @deleted << doc unless src_doc_map[id] end end |