class Capsium::Package
Constants
- AUTHENTICATION_FILE
- CONTENT_DIR
- DATA_DIR
- MANIFEST_FILE
- METADATA_FILE
- ROUTES_FILE
- ResolvedDependency
-
One resolved dependency: the declared GUID and range, the .cap it resolved to and the loaded package.
- SECURITY_FILE
- SIGNATURE_FILE
- STORAGE_FILE
Attributes
Symbol
String
String
Array[ResolvedDependency]
Public Class Methods
(String | Pathname path, ?load_type: Symbol? load_type, ?decryption_key: String? decryption_key, ?store: (Store | String)? store, ?registry: (Capsium::Registry | String)? registry, ?dependency_chain: Array[String] dependency_chain, ?bundle: Bundle? bundle) → void
Source
# File lib/capsium/package.rb, line 88 def initialize(path, load_type: nil, decryption_key: nil, store: nil, registry: nil, dependency_chain: [], bundle: nil) @decryption_key = decryption_key @original_path = Pathname.new(path).expand_path @path = prepare_package(@original_path).to_s @load_type = load_type || determine_load_type(path) create_package_structure load_package @name = metadata.name @resolved_dependencies = resolve_dependencies(store, registry, dependency_chain, bundle) validate_dependency_references! verify_integrity! verify_signature! end
Loads a package directory or .cap file. Composite packages (metadata.dependencies, ARCHITECTURE.md section 4a) resolve against the package store given as store (directory path or Store) or via CAPSIUM_STORE, falling back to the registry given as registry (Capsium::Registry or reference) or via CAPSIUM_REGISTRY when the store has no package for a dependency GUID. Dependencies bundled under packages/ (encapsulated packages, Capsium::Package::Bundle) resolve first, without any store or registry. dependency_chain is internal: the ancestor GUIDs used for circular-dependency detection during recursive resolution. bundle is internal too: the ancestor bundle serving re-declared transitive dependencies.
Public Instance Methods
() → String?
Source
# File lib/capsium/package.rb, line 151 def cap_file_path @original_path.to_s if load_type == :cap_file end
The .cap file this package was loaded from, or nil when loaded from a directory.
() → void
Source
# File lib/capsium/package.rb, line 122 def cleanup @resolved_dependencies.each { |dependency| dependency.package.cleanup } FileUtils.remove_entry(@path) if @path != @original_path.to_s && File.directory?(@path) end
() → Array[String]
Source
# File lib/capsium/package.rb, line 155 def content_files Dir.glob(File.join(content_path, "**", "*")).select { |file| File.file?(file) } end
() → void
Source
# File lib/capsium/package.rb, line 110 def load_package # Mandatory @metadata = Metadata.new(metadata_path) # Optional @manifest = Manifest.new(manifest_path) @storage = Storage.new(storage_path) @routes = Routes.new(routes_path, @manifest, @storage) @security = Security.new(security_path) @authentication = Authentication.new(authentication_path) end
(?exported_only: bool exported_only, ?extra_layers: Array[MergedView::Layer] extra_layers) → MergedView
Source
# File lib/capsium/package.rb, line 134 def merged_view(exported_only: false, extra_layers: []) unless extra_layers.empty? return MergedView.new(@path, storage: @storage, manifest: @manifest, dependency_views: dependency_views, exported_only: exported_only, extra_layers: extra_layers) end @merged_views ||= {} @merged_views[exported_only] ||= MergedView.new(@path, storage: @storage, manifest: @manifest, dependency_views: dependency_views, exported_only: exported_only) end
The merged content view across the storage layers (ARCHITECTURE.md section 5a); exported_only gives the dependent-package view (section 4a). Resolved dependencies act as read-only layers below all own layers. extra_layers stack above everything (the reactorโs writable overlay); views with extra layers are built fresh, not memoized.
() → void
Source
# File lib/capsium/package.rb, line 103 def solidify @manifest.save_to_file @metadata.save_to_file @routes.save_to_file @storage.save_to_file unless @storage.empty? end