Sha256: 68d4328c0a6b7258a673d274a3a78040277203066885d7ec62830b1ee059a019

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

require "d2e/version"

class D2E
  def initialize(options)
    @key = options[:key]
  end

  def diff(prev, curr)
    events = []

    prev_ids = prev.map {|item| item[@key] }
    curr_ids = curr.map {|item| item[@key] }

    deleted = prev_ids - curr_ids
    created = curr_ids - prev_ids
    updated = prev_ids & curr_ids

    created.each do |id|
      item = curr.find {|item| item[@key] == id }
      events << {'type' => 'create', 'item' => item}
    end

    deleted.each do |id|
      item = prev.find {|item| item[@key] == id }
      events << {'type' => 'delete', 'item' => item}
    end

    updated.each do |id|
      diff = {}
      prev_item = prev.find {|item| item[@key] == id }
      curr_item = curr.find {|item| item[@key] == id }
      keys = prev_item.keys | curr_item.keys
      keys.each do |key|
        prev_value = prev_item[key]
        curr_value = curr_item[key]
        if prev_value != curr_value
          diff[key] = [prev_value, curr_value]
        end
      end
      if !diff.empty?
        events << {'type' => 'update', 'id' => id, 'diff' => diff}
      end
    end

    events
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
d2e-0.0.2 lib/d2e.rb