class JekyllOpenSdgPlugins::ValidateIndicatorConfig

Public Instance Methods

generate(site) click to toggle source
# File lib/jekyll-open-sdg-plugins/validate_indicator_config.rb, line 11
def generate(site)

  schema_path = File.join(File.dirname(__FILE__), 'schema-indicator-config.json')
  json_from_file = File.read(schema_path)
  schema = JSON.parse(json_from_file)
  schemer = JSONSchemer.schema(schema)

  # Perform validation if the "validate_indicator_config" flag is true.
  if site.config.has_key?('validate_indicator_config') && site.config['validate_indicator_config']
    # We don't care too much what language we use, just get the first one.
    language = 'en'
    if site.config.has_key?('languages')
      language = site.config['languages'][0]
    end
    metadata = {}
    if opensdg_translated_builds(site)
      metadata = site.data[language]['meta']
    else
      metadata = site.data['meta']
    end
    # Loop through the indicators (using metadata as a list).
    validation_failed = false
    metadata.each do |inid, meta|
      unless schemer.valid?(meta)
        validation_failed = true
        opensdg_notice('Indicator ' + inid + ' configuration invalid:')
        errors = schemer.validate(meta).to_a
        errors.each { |error| opensdg_validation_error(error) }
      end
    end
    if validation_failed
      opensdg_notice "Some indicator configuration was not valid. See feedback above."
      raise "Invalid indicator configuration"
    end
  end

  # Regardless place the schema in site data so it can be used in Jekyll templates.
  site.data['schema-indicator-config'] = schema

end