forked from voxpupuli/json-schema
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
68 lines (53 loc) · 1.55 KB
/
Rakefile
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