You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							57 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							57 lines
						
					
					
						
							1.6 KiB
						
					
					
				require "json" | 
						|
require "json-schema" | 
						|
 | 
						|
def get_all_form_paths(directories) | 
						|
  form_paths = [] | 
						|
  directories.each do |directory| | 
						|
    Dir.glob("#{directory}/*.json").each do |form_path| | 
						|
      form_paths.push(form_path) | 
						|
    end | 
						|
  end | 
						|
  form_paths | 
						|
end | 
						|
 | 
						|
namespace :form_definition do | 
						|
  desc "Validate all JSON against Generic Form Schema" | 
						|
 | 
						|
  task validate_all: :environment do | 
						|
    directories = ["config/forms", "spec/fixtures/forms"] | 
						|
    paths = get_all_form_paths(directories) | 
						|
 | 
						|
    paths.each do |path| | 
						|
      Rake::Task["form_definition:validate"].reenable | 
						|
      Rake::Task["form_definition:validate"].invoke(path) | 
						|
    end | 
						|
  end | 
						|
 | 
						|
  desc "Validate Single JSON against Generic Form Schema" | 
						|
 | 
						|
  task :validate, %i[path] => :environment do |_task, args| | 
						|
    path = Rails.root.join("config/forms/schema/generic.json") | 
						|
    file = File.open(path) | 
						|
    schema = JSON.parse(file.read) | 
						|
    meta_schema = JSON::Validator.validator_for_name("draft4").metaschema | 
						|
 | 
						|
    puts path unless Rails.env.test? | 
						|
 | 
						|
    if JSON::Validator.validate(meta_schema, schema) | 
						|
      puts "Schema Definition is Valid" unless Rails.env.test? | 
						|
    else | 
						|
      puts "Schema Definition in #{path} is not valid against draft4 json schema." unless Rails.env.test? | 
						|
      next | 
						|
    end | 
						|
 | 
						|
    path = Rails.root.join(args.path) | 
						|
    file = File.open(path) | 
						|
    form_definition = JSON.parse(file.read) | 
						|
 | 
						|
    puts path unless Rails.env.test? | 
						|
    puts JSON::Validator.fully_validate(schema, form_definition, strict: true) unless Rails.env.test? | 
						|
 | 
						|
    begin | 
						|
      JSON::Validator.validate!(schema, form_definition) | 
						|
    rescue JSON::Schema::ValidationError => e | 
						|
      e.message | 
						|
    end | 
						|
  end | 
						|
end
 | 
						|
 |