Class: PDK::Config::YAMLWithSchema
- Inherits:
-
JSONSchemaNamespace
- Object
- Namespace
- JSONSchemaNamespace
- PDK::Config::YAMLWithSchema
- Defined in:
- lib/pdk/config/yaml_with_schema.rb
Overview
Parses a YAML document with a JSON schema.
Instance Attribute Summary
Attributes inherited from Namespace
Instance Method Summary collapse
- #parse_file(filename) ⇒ Object
-
#serialize_data(data) ⇒ Object
Serializes object data into a YAML string.
Methods inherited from JSONSchemaNamespace
#empty_schema?, #initialize, #schema, #schema_property_names, #to_h, #validate_document!
Methods inherited from Namespace
#[], #[]=, #child_namespace?, #fetch, #include_in_parent?, #initialize, #mount, #namespace, #read_only!, #resolve, #setting, #to_h
Constructor Details
This class inherits a constructor from PDK::Config::JSONSchemaNamespace
Instance Method Details
#parse_file(filename) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/pdk/config/yaml_with_schema.rb', line 9 def parse_file(filename) raise unless block_given? data = load_data(filename) data = '' if data.nil? require 'yaml' require 'json-schema' @raw_data = ::YAML.safe_load(data, [Symbol], [], true) @raw_data = {} if @raw_data.nil? begin # Ensure the parsed document is actually valid validate_document!(@raw_data) rescue ::JSON::Schema::ValidationError => e raise PDK::Config::LoadError, format('The configuration file %{filename} is not valid: %{message}', filename: filename, message: e.) end require 'pdk/config/json_schema_setting' schema_property_names.each do |key| yield key, PDK::Config::JSONSchemaSetting.new(key, self, @raw_data[key]) end # Remove all of the "known" settings from the schema and # we're left with the settings that we don't manage. self.unmanaged_settings = @raw_data.reject { |k, _| schema_property_names.include?(k) } rescue Psych::SyntaxError => e raise PDK::Config::LoadError, format('Syntax error when loading %{file}: %{error}', file: filename, error: "#{e.problem} #{e.context}") rescue Psych::DisallowedClass => e raise PDK::Config::LoadError, format('Unsupported class in %{file}: %{error}', file: filename, error: e.) end |
#serialize_data(data) ⇒ Object
Serializes object data into a YAML string.
45 46 47 48 |
# File 'lib/pdk/config/yaml_with_schema.rb', line 45 def serialize_data(data) require 'yaml' ::YAML.dump(data) end |