Method: PDK::Config::JSONWithSchema#parse_file

Defined in:
lib/pdk/config/json_with_schema.rb

#parse_file(filename) ⇒ Object

Parses a JSON document with a schema.

See Also:

  • Namespace.parse_file


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
# File 'lib/pdk/config/json_with_schema.rb', line 9

def parse_file(filename)
  raise unless block_given?
  data = load_data(filename)
  data = '{}' if data.nil? || data.empty?
  require 'json'

  @raw_data = ::JSON.parse(data)
  @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, _('The configuration file %{filename} is not valid: %{message}') % {
      filename: filename,
      message:  e.message,
    }
  end

  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 ::JSON::ParserError => e
  raise PDK::Config::LoadError, e.message
end