Class: Gemvault::Manifest

Inherits:
Object
  • Object
show all
Defined in:
lib/gemvault/manifest.rb

Overview

The index stored as the first entry of a Tarvault. Records each gem's identity, timestamp, and SHA256 digest so listing and integrity checks never require reading every gem blob. Its on-disk notation belongs to Gemvault::ManifestText.

Defined Under Namespace

Classes: StoredGem

Constant Summary collapse

FORMAT_VERSION =
3

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(created_at:, records:, format_version: FORMAT_VERSION) ⇒ Manifest

Returns a new instance of Manifest.



24
25
26
# File 'lib/gemvault/manifest.rb', line 24

def initialize(created_at:, records:, format_version: FORMAT_VERSION)
  super
end

Class Method Details

.digest(bytes) ⇒ Object



20
# File 'lib/gemvault/manifest.rb', line 20

def self.digest(bytes) = Digest::SHA256.hexdigest(bytes)

.empty(created_at:) ⇒ Object



22
# File 'lib/gemvault/manifest.rb', line 22

def self.empty(created_at:) = new(created_at:, records: [])

Instance Method Details

#find(entry) ⇒ Object



32
33
34
# File 'lib/gemvault/manifest.rb', line 32

def find(entry)
  records.find { |record| record.gem.same_identity_as?(entry) }
end

#gem_entriesObject



42
43
44
# File 'lib/gemvault/manifest.rb', line 42

def gem_entries
  records.map(&:gem).sort_by { |gem| [gem.name, gem.version] }
end

#matching(reference) ⇒ Object



36
37
38
# File 'lib/gemvault/manifest.rb', line 36

def matching(reference)
  records.select { |record| reference.matches?(record.gem) }
end

#sizeObject



40
# File 'lib/gemvault/manifest.rb', line 40

def size = records.size

#with_record(record) ⇒ Object



28
# File 'lib/gemvault/manifest.rb', line 28

def with_record(record) = with(records: records + [record])

#without(dropped) ⇒ Object



30
# File 'lib/gemvault/manifest.rb', line 30

def without(dropped) = with(records: records - dropped)