1 2 3 4 5 6 7 8 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
require 'bundler'
require 'rake'
require 'rake/testtask'
Bundler::GemHelper.install_tasks
desc "Updates the json-schema common test suite to the latest version"
task :update_common_tests do
unless File.read(".git/config").include?('submodule "test/test-suite"')
sh "git submodule init"
end
puts "Updating json-schema common test suite..."
begin
sh "git submodule update --remote --quiet"
rescue StandardError
STDERR.puts "Failed to update common test suite."
end
end
desc "Update meta-schemas to the latest version"
task :update_meta_schemas do
puts "Updating meta-schemas..."
id_mappings = {
'http://json-schema.org/draft/schema#' => 'https://raw.githubusercontent.com/json-schema-org/json-schema-spec/master/schema.json'
}
require 'open-uri'
require 'thwait'
download_threads = Dir['resources/*.json'].map do |path|
schema_id = File.read(path)[/"\$?id"\s*:\s*"(.*?)"/, 1]
schema_uri = id_mappings[schema_id] || schema_id
Thread.new(schema_uri) do |uri|
Thread.current[:uri] = uri
begin
metaschema = URI(uri).read
File.write(path, metaschema)
rescue StandardError
false
end
end
end
ThreadsWait.all_waits(*download_threads) do |t|
if t.value
puts t[:uri]
else
STDERR.puts "Failed to update meta-schema #{t[:uri]}"
end
end
end
Rake::TestTask.new do |t|
t.libs << "."
t.warning = true
t.verbose = true
t.test_files = FileList.new('test/*_test.rb')
end
task update: [:update_common_tests, :update_meta_schemas]
task :default => :test
|