Class: Gemvault::Manifest
- Inherits:
-
Object
- Object
- Gemvault::Manifest
- Defined in:
- lib/gemvault/manifest.rb
Overview
The manifest.json 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.
Defined Under Namespace
Classes: StoredGem
Constant Summary collapse
- FILENAME =
"manifest.json".freeze
- FORMAT_VERSION =
2
Class Method Summary collapse
Instance Method Summary collapse
- #find(entry) ⇒ Object
- #gem_entries ⇒ Object
-
#initialize(created_at:, records:, format_version: FORMAT_VERSION) ⇒ Manifest
constructor
A new instance of Manifest.
- #matching(reference) ⇒ Object
- #size ⇒ Object
- #to_h ⇒ Object
- #to_json(*_args) ⇒ Object
- #with_record(record) ⇒ Object
- #without(dropped) ⇒ Object
Constructor Details
#initialize(created_at:, records:, format_version: FORMAT_VERSION) ⇒ Manifest
Returns a new instance of Manifest.
45 46 47 |
# File 'lib/gemvault/manifest.rb', line 45 def initialize(created_at:, records:, format_version: FORMAT_VERSION) super end |
Class Method Details
.digest(bytes) ⇒ Object
34 |
# File 'lib/gemvault/manifest.rb', line 34 def self.digest(bytes) = Digest::SHA256.hexdigest(bytes) |
.empty(created_at:) ⇒ Object
36 |
# File 'lib/gemvault/manifest.rb', line 36 def self.empty(created_at:) = new(created_at:, records: []) |
.parse(json) ⇒ Object
38 39 40 41 42 43 |
# File 'lib/gemvault/manifest.rb', line 38 def self.parse(json) data = JSON.parse(json, symbolize_names: true) records = data.fetch(:gems, []).map { |gem| StoredGem.from_h(gem) } format_version = (data[:vault_version] || FORMAT_VERSION).to_i new(created_at: data[:created_at], records:, format_version:) end |
Instance Method Details
#find(entry) ⇒ Object
53 54 55 |
# File 'lib/gemvault/manifest.rb', line 53 def find(entry) records.find { |record| record.gem.same_identity_as?(entry) } end |
#gem_entries ⇒ Object
63 64 65 |
# File 'lib/gemvault/manifest.rb', line 63 def gem_entries records.map(&:gem).sort_by { |gem| [gem.name, gem.version] } end |
#matching(reference) ⇒ Object
57 58 59 |
# File 'lib/gemvault/manifest.rb', line 57 def matching(reference) records.select { |record| reference.matches?(record.gem) } end |
#size ⇒ Object
61 |
# File 'lib/gemvault/manifest.rb', line 61 def size = records.size |
#to_h ⇒ Object
67 68 69 70 71 72 73 74 |
# File 'lib/gemvault/manifest.rb', line 67 def to_h { vault_version: FORMAT_VERSION, format: "tarvault", created_at:, gems: records.map(&:to_h), } end |
#to_json(*_args) ⇒ Object
76 |
# File 'lib/gemvault/manifest.rb', line 76 def to_json(*_args) = JSON.pretty_generate(to_h) |
#with_record(record) ⇒ Object
49 |
# File 'lib/gemvault/manifest.rb', line 49 def with_record(record) = with(records: records + [record]) |
#without(dropped) ⇒ Object
51 |
# File 'lib/gemvault/manifest.rb', line 51 def without(dropped) = with(records: records - dropped) |