Class: Hash

Inherits:
Object
  • Object
show all
Defined in:
lib/hash/diff.rb

Overview

Copyright © 2017 Kenichi Kamiya

Constant Summary collapse

Diff =
Data.define(:old, :new, :dirty) do
  def self.generate(older:, newer:)
    old_hash = older.to_hash
    new_hash = newer.to_hash
    old_pairs = old_hash.to_a
    new_pairs = new_hash.to_a
    dirty = ((old_pairs - new_pairs) | (new_pairs - old_pairs)).to_h
    new(old: old_hash, new: new_hash, dirty:)
  end

  # @return [Hash]
  def deleted
    dirty.except(*new.keys)
  end

  # @return [Hash]
  def appended
    dirty.except(*old.keys)
  end

  # @return [Hash]
  def value_updated
    dirty.except(*deleted.keys).except(*appended.keys)
  end

  # @return [Hash]
  def kept
    new.except(*dirty.keys)
  end
end

Class Method Summary collapse

Class Method Details

.Diff(older, newer) ⇒ Hash::Diff

Parameters:

Returns:



9
10
11
# File 'lib/hash/diff.rb', line 9

def self.Diff(older, newer)
  Diff.generate(older:, newer:)
end