Class: Capsium::Package::MergedView
- Inherits:
-
Object
- Object
- Capsium::Package::MergedView
- Defined in:
- lib/capsium/package/merged_view.rb,
sig/capsium/package/merged_view.rbs
Overview
The merged (overlay) view of a package's content, per ARCHITECTURE.md section 5a. Shared by Package (validation) and Reactor (serving).
Defined Under Namespace
Classes: Layer
Constant Summary collapse
- TOMBSTONE_FILE =
".capsium-tombstones"- CONTENT_PREFIX =
"#{Package::CONTENT_DIR}/".freeze
Instance Attribute Summary collapse
-
#dependency_views ⇒ Array[[String, MergedView]]
readonly
Returns the value of attribute dependency_views.
-
#layers ⇒ Array[Layer]
readonly
Returns the value of attribute layers.
-
#package_path ⇒ String
readonly
Returns the value of attribute package_path.
Instance Method Summary collapse
-
#dependency_pair_for(reference) ⇒ [String, MergedView]?
The [GUID, view] pair whose GUID prefixes the reference (longest GUID first, so nested GUIDs address the innermost dependency).
-
#initialize(package_path, storage:, manifest:, dependency_views: [], exported_only: false) ⇒ MergedView
constructor
A new instance of MergedView.
-
#resolve(reference) ⇒ String?
The absolute filesystem path serving a resource reference: a package-relative content path ("content/app.js"), or a dependency reference ("
/content/app.js").
Constructor Details
#initialize(package_path, storage:, manifest:, dependency_views: [], exported_only: false) ⇒ MergedView
Returns a new instance of MergedView.
47 48 49 50 51 52 53 54 55 |
# File 'lib/capsium/package/merged_view.rb', line 47 def initialize(package_path, storage:, manifest:, dependency_views: [], exported_only: false) @package_path = package_path @storage = storage @manifest = manifest @exported_only = exported_only @dependency_views = dependency_views @layers = build_layers end |
Instance Attribute Details
#dependency_views ⇒ Array[[String, MergedView]] (readonly)
Returns the value of attribute dependency_views.
45 46 47 |
# File 'lib/capsium/package/merged_view.rb', line 45 def dependency_views @dependency_views end |
#layers ⇒ Array[Layer] (readonly)
Returns the value of attribute layers.
45 46 47 |
# File 'lib/capsium/package/merged_view.rb', line 45 def layers @layers end |
#package_path ⇒ String (readonly)
Returns the value of attribute package_path.
45 46 47 |
# File 'lib/capsium/package/merged_view.rb', line 45 def package_path @package_path end |
Instance Method Details
#dependency_pair_for(reference) ⇒ [String, MergedView]?
The [GUID, view] pair whose GUID prefixes the reference (longest GUID first, so nested GUIDs address the innermost dependency).
85 86 87 88 89 |
# File 'lib/capsium/package/merged_view.rb', line 85 def dependency_pair_for(reference) @dependency_views .sort_by { |guid, _view| -guid.length } .find { |guid, _view| reference.start_with?("#{guid}/") } end |
#resolve(reference) ⇒ String?
The absolute filesystem path serving a resource reference: a
package-relative content path ("content/app.js"), or a dependency
reference ("
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/capsium/package/merged_view.rb', line 62 def resolve(reference) return unless reference.is_a?(String) if reference.include?("://") pair = dependency_pair_for(reference) return unless pair return pair[1].resolve(reference.delete_prefix("#{pair[0]}/")) end content_relative = content_relative(reference) return unless content_relative return if content_relative == TOMBSTONE_FILE result = resolve_own(content_relative) return if result == :tombstoned return result if result resolve_dependencies(reference) end |