module Grably::Digest

Set of utilities to digest products and stat product set changes

Public Class Methods

build_diff(new_map, old_map) click to toggle source
# File lib/grably/core/digest.rb, line 73
def build_diff(new_map, old_map)
  old_keys = old_map.keys.to_set
  new_keys = new_map.keys.to_set

  missing = old_keys - new_keys
  added = new_keys - old_keys

  updated = (old_keys & new_keys).reject do |product|
    old_map[product] == new_map[product]
  end

  [missing, added, updated]
end
diff_digests(old_products, new_products) click to toggle source

Given two lists of product digests find missing, changed, and added products @return [deleted, added, updated]

# File lib/grably/core/digest.rb, line 63
def diff_digests(old_products, new_products)
  # create maps of product sets
  old_map, new_map = [old_products, new_products].map do |products|
    return [] unless products
    Hash[*products.flat_map { |d| [d.product, d] }]
  end

  build_diff(new_map, old_map)
end
differ?(old_products, new_products) click to toggle source

Tells if two product digest lists are differ

# File lib/grably/core/digest.rb, line 88
def differ?(old_products, new_products)
  !diff_digests(old_products, new_products).flatten.empty?
end
digest(*products) click to toggle source
# File lib/grably/core/digest.rb, line 56
def digest(*products)
  products.map { |product| ProductDigest.of_product(product) }
end