Module: Bparity::SpecBundle::Checksum

Defined in:
lib/bparity/spec_bundle.rb

Class Method Summary collapse

Class Method Details

.calculate(bundle) ⇒ Object



16
17
18
19
# File 'lib/bparity/spec_bundle.rb', line 16

def calculate(bundle)
  payload = deep_sort(bundle.reject { |key, _| key.to_s == "checksum" })
  "sha256:#{Digest::SHA256.hexdigest(JSON.generate(payload))}"
end

.deep_sort(value) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/bparity/spec_bundle.rb', line 21

def deep_sort(value)
  case value
  when Hash then value.sort_by { |key, _| key.to_s }.to_h { |key, item| [key.to_s, deep_sort(item)] }
  when Array then value.map { |item| deep_sort(item) }
  else value
  end
end