class Lexicon::Common::Package::DirectoryPackageLoader
Attributes
root_dir[R]
@return [Pathname]
Public Class Methods
new(root_dir, schema_validator:)
click to toggle source
@param [Pathname] root_dir
@param [JSONSchemer::Schema::Base] schema_validator
# File lib/lexicon/common/package/directory_package_loader.rb, line 14 def initialize(root_dir, schema_validator:) @root_dir = root_dir @schema_validator = schema_validator end
Public Instance Methods
load_package(name)
click to toggle source
@param [String] name @return [Package::Package, nil]
# File lib/lexicon/common/package/directory_package_loader.rb, line 21 def load_package(name) package_dir = root_dir.join(name.to_s) if package_dir.directory? load_from_dir(package_dir) else nil end end
Protected Instance Methods
load_from_dir(dir)
click to toggle source
# File lib/lexicon/common/package/directory_package_loader.rb, line 33 def load_from_dir(dir) # @type [Pathname] spec_file = dir.join(Package::SPEC_FILE_NAME) # @type [Pathname] checksum_file = dir.join(Package::CHECKSUM_FILE_NAME) if spec_file.exist? && checksum_file.exist? json = JSON.parse(spec_file.read) if @schema_validator.valid?(json) package_version = json.fetch('schema_version', 1) case package_version when 1 load_v1(dir: dir, spec_file: spec_file, checksum_file: checksum_file, json: json) when 2 load_v2(dir: dir, spec_file: spec_file, checksum_file: checksum_file, json: json) else log("Package version #{package_version} is not supported") nil end else log("Package at path #{dir} has invalid manifest") nil end else nil end end
load_v1(dir:, spec_file:, checksum_file:, json:)
click to toggle source
@param [Pathname] checksum_file @param [Pathname] dir @param [Hash] json @param [Pathname] spec_file @return [V1::Package]
# File lib/lexicon/common/package/directory_package_loader.rb, line 69 def load_v1(dir:, spec_file:, checksum_file:, json:) version = Semantic::Version.new(json.fetch('version')) file_sets = json.fetch('content').map do |id, values| V1::SourceFileSet.new( id: id, name: values.fetch('name'), structure: values.fetch('structure'), data: values.fetch('data', nil), tables: values.fetch('tables', []) ) end V1::Package.new(file_sets: file_sets, version: version, dir: dir, checksum_file: checksum_file, spec_file: spec_file) end
load_v2(dir:, spec_file:, checksum_file:, json:)
click to toggle source
@param [Pathname] checksum_file @param [Pathname] dir @param [Hash] json @param [Pathname] spec_file @return [V2::Package]
# File lib/lexicon/common/package/directory_package_loader.rb, line 89 def load_v2(dir:, spec_file:, checksum_file:, json:) version = Semantic::Version.new(json.fetch('version')) file_sets = json.fetch('content').map do |id, values| V2::SourceFileSet.new( id: id, name: values.fetch('name'), structure: values.fetch('structure'), tables: values.fetch('tables', {}) ) end V2::Package.new( file_sets: file_sets, version: version, dir: dir, checksum_file: checksum_file, spec_file: spec_file ) end