class Vara::ProductMetadataProcessor
Constants
- EXCLUSIVE_KEYS
- REQUIRED_AWS_KEYS
- REQUIRED_RELEASE_KEYS
Attributes
external_release_paths[R]
product_dir[R]
versioner[R]
Public Class Methods
new(product_dir, versioner, external_release_paths: [])
click to toggle source
@param product_dir
[String] path to product directory root @param versioner [Vara::PrereleaseVersioner,Vara::StaticVersioner]
# File lib/vara/product_metadata_processor.rb, line 11 def initialize(product_dir, versioner, external_release_paths: []) @product_dir = product_dir @versioner = versioner @external_release_paths = external_release_paths end
Public Instance Methods
process()
click to toggle source
Composes metadata_parts/binaries.yml and metadata_parts/handcraft.yml into the properly named product metadata file under metadata/, expanding placeholders as necessary @return [String] The path to the generated metadata file
# File lib/vara/product_metadata_processor.rb, line 20 def process metadata = merged_metadata external_release_paths.each do |external_release_path| update_release(external_release_path, metadata) end processed = versioner.update_metadata(metadata) save_processed_metadata(processed) end
Private Instance Methods
merged_metadata()
click to toggle source
# File lib/vara/product_metadata_processor.rb, line 39 def merged_metadata binaries_path = File.join(product_dir, 'metadata_parts', 'binaries.yml') binaries = YAML.load_file(binaries_path) log.info("Composing metadata: loaded #{binaries_path}") handcraft_path = File.join(product_dir, 'metadata_parts', 'handcraft.yml') handcraft = YAML.load_file(handcraft_path) log.info("Composing metadata: loaded #{handcraft_path}") binaries.merge(handcraft) end
missing_aws_keys(external_release)
click to toggle source
# File lib/vara/product_metadata_processor.rb, line 94 def missing_aws_keys(external_release) REQUIRED_AWS_KEYS.select do |required_aws_key| !external_release['aws'].key?(required_aws_key) end end
save_processed_metadata(processed_metadata_hash)
click to toggle source
# File lib/vara/product_metadata_processor.rb, line 100 def save_processed_metadata(processed_metadata_hash) product_name = processed_metadata_hash.fetch('name').tr('-', '_') metadata_dir = File.join(product_dir, 'metadata') FileUtils.mkdir_p(metadata_dir) out_path = File.join(metadata_dir, "#{product_name}.yml") File.open(out_path, 'w') do |out| YAML.dump(processed_metadata_hash, out) end out_path end
update_release(external_release_path, metadata)
click to toggle source
# File lib/vara/product_metadata_processor.rb, line 51 def update_release(external_release_path, metadata) log.info("Updating metadata: using #{File.expand_path(external_release_path)}") external_releases = YAML.load_file(external_release_path) external_releases.each do |release| external_release = validate_release(release, external_release_path) replace = metadata['releases'].find_index do |r| r['name'] == external_release['name'] end raise "Specified release #{external_release['name']} does not exist in binaries.yml" unless replace metadata['releases'][replace] = external_release end end
validate_release(external_release, external_release_path)
click to toggle source
# File lib/vara/product_metadata_processor.rb, line 69 def validate_release(external_release, external_release_path) missing_keys = REQUIRED_RELEASE_KEYS - external_release.keys.to_a specified_release = "Specified release #{File.basename(external_release_path)} " raise specified_release + "is missing required keywords: #{missing_keys}" unless missing_keys.empty? exclusive_key_count = (EXCLUSIVE_KEYS - external_release.keys.to_a).length case when exclusive_key_count < 1 raise specified_release + "contains more than one of the following keys, but only one is allowed: #{EXCLUSIVE_KEYS}" when exclusive_key_count > 1 raise specified_release + "requires one of the following keys: #{EXCLUSIVE_KEYS}" end if external_release.key?('aws') missing_aws_keys = missing_aws_keys(external_release) raise specified_release + "is missing required aws hash keywords: #{missing_aws_keys}" unless missing_aws_keys.empty? end extra_keys = external_release.keys.to_a - REQUIRED_RELEASE_KEYS - EXCLUSIVE_KEYS raise specified_release + "has extra keywords: #{extra_keys}" unless extra_keys.empty? external_release end