kwalify_to_json_schema 0.2.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/kwalify_to_json_schema.rb +2 -0
- data/lib/kwalify_to_json_schema/cli.rb +8 -5
- data/lib/kwalify_to_json_schema/converter.rb +43 -20
- data/lib/kwalify_to_json_schema/issue.rb +16 -0
- data/lib/kwalify_to_json_schema/issues.rb +10 -0
- data/lib/kwalify_to_json_schema/kwalify_to_json_schema.rb +12 -2
- data/lib/kwalify_to_json_schema/limitations.rb +2 -1
- data/lib/kwalify_to_json_schema/options.rb +14 -4
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bbbe823e0df66f54b21956a628b2a08dad03190f4d2884ee05abe1c6362fba8
|
4
|
+
data.tar.gz: ef883dfea6e9cebcee6c0bd95d7470db46d428734dac428cd52f65230af7666a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 237ff9995ed857260b71851e3499640af68deafcbb65c8103d6e7227ce1a0c774b06d8b3d4cab7ed1f0f54bf74e4122e6dcfe543515db2dc70a2dc971e10e8a0
|
7
|
+
data.tar.gz: d30502c9942dd6039c074b3c227b3829fa8624dca103541572487659eda84386ba91f7583742183dbe1f1d8ca6e79f74b8aadfc461e65a1aac07ac576742b0e2
|
@@ -6,6 +6,8 @@ require_relative "kwalify_to_json_schema/kwalify_to_json_schema"
|
|
6
6
|
require_relative "kwalify_to_json_schema/serialization"
|
7
7
|
require_relative "kwalify_to_json_schema/options"
|
8
8
|
require_relative "kwalify_to_json_schema/limitations"
|
9
|
+
require_relative "kwalify_to_json_schema/issue"
|
10
|
+
require_relative "kwalify_to_json_schema/issues"
|
9
11
|
require_relative "kwalify_to_json_schema/converter"
|
10
12
|
require_relative "kwalify_to_json_schema/custom_processing"
|
11
13
|
require_relative "kwalify_to_json_schema/cli"
|
@@ -29,6 +29,9 @@ module KwalifyToJsonSchema
|
|
29
29
|
option(*Options.cli_option(Options::TITLE))
|
30
30
|
option(*Options.cli_option(Options::DESCRIPTION))
|
31
31
|
option(*Options.cli_option(Options::ISSUES_TO_DESCRIPTION))
|
32
|
+
option(*Options.cli_option(Options::ISSUES_TO_STDERR))
|
33
|
+
option(*Options.cli_option(Options::SCHEMA_VERSION))
|
34
|
+
option(*Options.cli_option(Options::VERBOSE))
|
32
35
|
option Options::CUSTOM_PROCESSING,
|
33
36
|
:type => :string,
|
34
37
|
:desc => <<~DESC
|
@@ -58,6 +61,8 @@ module KwalifyToJsonSchema
|
|
58
61
|
:default => false,
|
59
62
|
:desc => "Process files recursively",
|
60
63
|
:long_desc => ""
|
64
|
+
option(*Options.cli_option(Options::SCHEMA_VERSION))
|
65
|
+
option(*Options.cli_option(Options::VERBOSE))
|
61
66
|
option Options::CUSTOM_PROCESSING,
|
62
67
|
:type => :string,
|
63
68
|
:desc => <<~DESC
|
@@ -67,11 +72,9 @@ module KwalifyToJsonSchema
|
|
67
72
|
DESC
|
68
73
|
|
69
74
|
def convert_dir(kwalify_schema_dir, result_dir)
|
70
|
-
opts =
|
71
|
-
|
72
|
-
|
73
|
-
}
|
74
|
-
|
75
|
+
opts = options.dup
|
76
|
+
opts[Options::CUSTOM_PROCESSING] = custom_processing(options)
|
77
|
+
|
75
78
|
path = [kwalify_schema_dir, options["recursive"] ? "**" : nil, "*.yaml"].compact
|
76
79
|
Dir.glob(File.join(*path)).each { |kwalify_schema_file|
|
77
80
|
result_file = File.join(result_dir, File.basename(kwalify_schema_file, File.extname(kwalify_schema_file))) + ".#{options["format"]}"
|
@@ -11,7 +11,7 @@ module KwalifyToJsonSchema
|
|
11
11
|
#
|
12
12
|
# File.write("json_schema.json", JSON.pretty_generate(json_schema))
|
13
13
|
class Converter
|
14
|
-
SCHEMA = "http://json-schema.org/
|
14
|
+
SCHEMA = "http://json-schema.org/%s/schema#"
|
15
15
|
|
16
16
|
# The options given used to initialized the converter
|
17
17
|
attr_reader :options
|
@@ -24,12 +24,16 @@ module KwalifyToJsonSchema
|
|
24
24
|
# | :id | string | nil | The JSON schema identifier |
|
25
25
|
# | :title | string | nil | The JSON schema title |
|
26
26
|
# | :description | string | nil | The JSON schema description. If not given the Kwalify description will be used if present|
|
27
|
-
# | :issues_to_description| boolean| false | To append the
|
27
|
+
# | :issues_to_description| boolean| false | To append the issues to the JSON schema description |
|
28
|
+
# | :issues_to_stderr | boolean| false | To write the issues to standard error output |
|
28
29
|
# | :custom_processing | object | nil | To customize the conversion |
|
30
|
+
# | :schema_version | string | "draft-04" | JSON schema version. Changing this value only change the value of $schema field |
|
31
|
+
# | :verbose | boolean| false | To be verbose when converting |
|
29
32
|
# --
|
30
|
-
|
31
|
-
|
32
|
-
@
|
33
|
+
# @param options {Options} or {Hash}
|
34
|
+
def initialize(options = {})
|
35
|
+
@options = Options.new(options)
|
36
|
+
@issues = Issues.new
|
33
37
|
end
|
34
38
|
|
35
39
|
# Execute the conversion process
|
@@ -43,11 +47,12 @@ module KwalifyToJsonSchema
|
|
43
47
|
if issues.any? && options.issues_to_description?
|
44
48
|
description = json_schema["description"] ||= ""
|
45
49
|
description << "Issues when converting from Kwalify:\n"
|
46
|
-
description << issues.map { |
|
50
|
+
description << issues.descriptions_uniq.map { |description| "* #{description}" }.join("\n")
|
47
51
|
end
|
48
52
|
|
49
53
|
# Override description if given in option
|
50
54
|
json_schema["description"] = options.description if options.description
|
55
|
+
STDERR.puts issues if options.issues_to_stderr?
|
51
56
|
|
52
57
|
postprocess(json_schema)
|
53
58
|
end
|
@@ -56,20 +61,22 @@ module KwalifyToJsonSchema
|
|
56
61
|
|
57
62
|
def root
|
58
63
|
{
|
59
|
-
"$schema" => SCHEMA,
|
60
|
-
"
|
64
|
+
"$schema" => SCHEMA % options.schema_version,
|
65
|
+
"id" => options.id,
|
61
66
|
"title" => options.title,
|
62
67
|
}.reject { |k, v| v.nil? }
|
63
68
|
end
|
64
69
|
|
65
70
|
# @param target Json schema target
|
66
71
|
# @param kelem Kwalify element
|
67
|
-
def process(target, kelem)
|
72
|
+
def process(target, kelem, path = [])
|
68
73
|
|
69
74
|
# Add description if available
|
70
75
|
target["description"] = kelem["desc"] if kelem["desc"]
|
76
|
+
ktype = kelem["type"]
|
77
|
+
path += [ktype] if ktype
|
71
78
|
|
72
|
-
case ktype
|
79
|
+
case ktype
|
73
80
|
when "map"
|
74
81
|
target["type"] = "object"
|
75
82
|
target["additionalProperties"] = false
|
@@ -78,8 +85,18 @@ module KwalifyToJsonSchema
|
|
78
85
|
if mapping.is_a? Hash
|
79
86
|
properties = target["properties"] = {}
|
80
87
|
mapping.each_pair { |name, e|
|
81
|
-
|
82
|
-
|
88
|
+
# Handle partial support of mapping default value
|
89
|
+
# Only default rule is supported (see http://www.kuwata-lab.com/kwalify/ruby/users-guide.02.html#tips-default)
|
90
|
+
if name == "="
|
91
|
+
if e.is_a?(Hash)
|
92
|
+
process(target["additionalProperties"] = {}, e, path)
|
93
|
+
else
|
94
|
+
new_issue path, Limitations::ONLY_DEFAULT_RULE_SUPPORTED_FOR_DEFAULT_MAPPING
|
95
|
+
end
|
96
|
+
else
|
97
|
+
process(properties[name] = {}, e, path + [name])
|
98
|
+
required << name if e["required"] == true
|
99
|
+
end
|
83
100
|
}
|
84
101
|
target["required"] = required unless required.empty?
|
85
102
|
end
|
@@ -87,7 +104,13 @@ module KwalifyToJsonSchema
|
|
87
104
|
target["type"] = "array"
|
88
105
|
sequence = kelem["sequence"]
|
89
106
|
if sequence.is_a? Array
|
90
|
-
|
107
|
+
rule = sequence.first
|
108
|
+
if rule["unique"]
|
109
|
+
target["uniqueItems"] = true
|
110
|
+
rule = rule.dup
|
111
|
+
rule.delete("unique")
|
112
|
+
end
|
113
|
+
process(target["items"] = {}, rule)
|
91
114
|
end
|
92
115
|
when "str"
|
93
116
|
target["type"] = "string"
|
@@ -105,13 +128,13 @@ module KwalifyToJsonSchema
|
|
105
128
|
target["type"] = "boolean"
|
106
129
|
when "date"
|
107
130
|
# TODO
|
108
|
-
new_issue Limitations::DATE_TYPE_NOT_IMPLEMENTED
|
131
|
+
new_issue path, Limitations::DATE_TYPE_NOT_IMPLEMENTED
|
109
132
|
when "time"
|
110
133
|
# TODO
|
111
|
-
new_issue Limitations::TIME_TYPE_NOT_IMPLEMENTED
|
134
|
+
new_issue path, Limitations::TIME_TYPE_NOT_IMPLEMENTED
|
112
135
|
when "timestamp"
|
113
136
|
# TODO
|
114
|
-
new_issue Limitations::TIMESTAMP_TYPE_NOT_IMPLEMENTED
|
137
|
+
new_issue path, Limitations::TIMESTAMP_TYPE_NOT_IMPLEMENTED
|
115
138
|
when "scalar"
|
116
139
|
# Use one of
|
117
140
|
target["oneOf"] = [
|
@@ -123,7 +146,7 @@ module KwalifyToJsonSchema
|
|
123
146
|
when "any"
|
124
147
|
# Don't put type
|
125
148
|
else
|
126
|
-
new_issue("Unknown Kwalify type #{ktype}")
|
149
|
+
new_issue(path, "Unknown Kwalify type #{ktype}")
|
127
150
|
end
|
128
151
|
|
129
152
|
target["enum"] = kelem["enum"] if kelem["enum"]
|
@@ -154,7 +177,7 @@ module KwalifyToJsonSchema
|
|
154
177
|
end
|
155
178
|
end
|
156
179
|
|
157
|
-
new_issue Limitations::
|
180
|
+
new_issue path, Limitations::UNIQUE_NOT_SUPPORTED_WITHIN_MAPPING if kelem["unique"]
|
158
181
|
|
159
182
|
target
|
160
183
|
end
|
@@ -171,8 +194,8 @@ module KwalifyToJsonSchema
|
|
171
194
|
ep.postprocess(json_schema)
|
172
195
|
end
|
173
196
|
|
174
|
-
def new_issue(description)
|
175
|
-
@issues << description
|
197
|
+
def new_issue(path, description)
|
198
|
+
@issues << Issue.new(path, description)
|
176
199
|
end
|
177
200
|
end
|
178
201
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module KwalifyToJsonSchema
|
2
|
+
# Used to represent issues encoutered while converting
|
3
|
+
class Issue
|
4
|
+
attr_reader :path
|
5
|
+
attr_reader :description
|
6
|
+
|
7
|
+
def initialize(path, description)
|
8
|
+
@path = path
|
9
|
+
@description = description
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
"Issue #{path.join "/"}: #{description}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -10,12 +10,18 @@ module KwalifyToJsonSchema
|
|
10
10
|
# | :id | string | nil | The JSON schema identifier |
|
11
11
|
# | :title | string | nil | The JSON schema title |
|
12
12
|
# | :description | string | nil | The JSON schema description. If not given the Kwalify description will be used if present|
|
13
|
-
# | :issues_to_description| boolean| false | To append the
|
13
|
+
# | :issues_to_description| boolean| false | To append the issues to the JSON schema description |
|
14
|
+
# | :issues_to_stderr | boolean| false | To write the issues to standard error output |
|
14
15
|
# | :custom_processing | object | nil | To customize the conversion |
|
16
|
+
# | :schema_version | string | "draft-04" | JSON schema version. Changing this value only change the value of $schema field |
|
17
|
+
# | :verbose | boolean| false | To be verbose when converting |
|
15
18
|
# --
|
16
19
|
# @param source Path to Kwalify YAML schema
|
17
20
|
# @param dest Path to resulting JSON schema
|
18
21
|
def self.convert_file(source, dest, options = {})
|
22
|
+
options = Options.new(options)
|
23
|
+
puts "Converting file://#{File.expand_path source } to file://#{File.expand_path dest}" if options.verbose?
|
24
|
+
|
19
25
|
# Get a converter
|
20
26
|
converter = Converter.new(options)
|
21
27
|
# Convert
|
@@ -33,14 +39,18 @@ module KwalifyToJsonSchema
|
|
33
39
|
# | :id | string | nil | The JSON schema identifier |
|
34
40
|
# | :title | string | nil | The JSON schema title |
|
35
41
|
# | :description | string | nil | The JSON schema description. If not given the Kwalify description will be used if present|
|
36
|
-
# | :issues_to_description| boolean| false | To append the
|
42
|
+
# | :issues_to_description| boolean| false | To append the issues to the JSON schema description |
|
43
|
+
# | :issues_to_stderr | boolean| false | To write the issues to standard error output |
|
37
44
|
# | :custom_processing | object | nil | To customize the conversion |
|
45
|
+
# | :schema_version | string | "draft-04" | JSON schema version. Changing this value only change the value of $schema field |
|
46
|
+
# | :verbose | boolean| false | To be verbose when converting |
|
38
47
|
# --
|
39
48
|
# @param kwalify_schema Kwalify schema as YAML or JSON
|
40
49
|
# @param source_format format of the source schema
|
41
50
|
# @param dest_format format of the destination schema
|
42
51
|
# @param options
|
43
52
|
def self.convert_string(kwalify_schema, source_format = "yaml", dest_format = "json", options = {})
|
53
|
+
options = Options.new(options)
|
44
54
|
# Get a converter
|
45
55
|
converter = Converter.new(options)
|
46
56
|
# Convert
|
@@ -4,6 +4,7 @@ module KwalifyToJsonSchema
|
|
4
4
|
DATE_TYPE_NOT_IMPLEMENTED = "Kwalify 'date' type is not supported and is ignored"
|
5
5
|
TIME_TYPE_NOT_IMPLEMENTED = "Kwalify 'time' type is not supported and is ignored"
|
6
6
|
TIMESTAMP_TYPE_NOT_IMPLEMENTED = "Kwalify 'timestamp' type is not supported and is ignored"
|
7
|
-
|
7
|
+
UNIQUE_NOT_SUPPORTED_WITHIN_MAPPING = "Kwalify 'unique' within a mapping is not supported by JSON Schema and is ignored"
|
8
|
+
ONLY_DEFAULT_RULE_SUPPORTED_FOR_DEFAULT_MAPPING = "Kwalify mapping default value is not supported by JSON Schema and is ignored. Only default rule is supported"
|
8
9
|
end
|
9
10
|
end
|
@@ -7,22 +7,32 @@ module KwalifyToJsonSchema
|
|
7
7
|
# | :id | string | nil | The JSON schema identifier |
|
8
8
|
# | :title | string | nil | The JSON schema title |
|
9
9
|
# | :description | string | nil | The JSON schema description. If not given the Kwalify description will be used if present|
|
10
|
-
# | :issues_to_description| boolean| false | To append the
|
10
|
+
# | :issues_to_description| boolean| false | To append the issues to the JSON schema description |
|
11
|
+
# | :issues_to_stderr | boolean| false | To write the issues to standard error output |
|
11
12
|
# | :custom_processing | object | nil | To customize the conversion |
|
13
|
+
# | :schema_version | string | "draft-04" | JSON schema version. Changing this value only change the value of $schema field |
|
14
|
+
# | :verbose | boolean| false | To be verbose when converting |
|
12
15
|
# --
|
13
16
|
DECLARATION = %q(
|
14
17
|
ID # The JSON schema identifier [string] (nil)
|
15
18
|
TITLE # The JSON schema title [string] (nil)
|
16
19
|
DESCRIPTION # The JSON schema description. If not given the Kwalify description will be used if present [string] (nil)
|
17
|
-
ISSUES_TO_DESCRIPTION # To append the
|
20
|
+
ISSUES_TO_DESCRIPTION # To append the issues to the JSON schema description [boolean] (false)
|
21
|
+
ISSUES_TO_STDERR # To write the issues to standard error output [boolean] (false)
|
18
22
|
CUSTOM_PROCESSING # To customize the conversion [object] (nil)
|
23
|
+
SCHEMA_VERSION # JSON schema version. Changing this value only change the value of $schema field[string] ("draft-04")
|
24
|
+
VERBOSE # To be verbose when converting [boolean] (false)
|
19
25
|
)
|
20
26
|
|
21
27
|
# The options as Hash
|
22
28
|
attr_reader :options_hash
|
23
29
|
|
24
|
-
def initialize(
|
25
|
-
@options_hash = options_hash
|
30
|
+
def initialize(options)
|
31
|
+
@options_hash = options.is_a?(Options) ? options.options_hash : options
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
YAML.dump("Options" => options_hash)
|
26
36
|
end
|
27
37
|
|
28
38
|
# Parse options declaration text and give an array of Hash
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kwalify_to_json_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Gamot
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 12.3.0
|
83
|
-
description: Allows to convert Kwalify schemas to JSON schemas
|
83
|
+
description: Allows to convert Kwalify schemas to JSON schemas
|
84
84
|
email: ''
|
85
85
|
executables:
|
86
86
|
- kwalify_to_json_schema
|
@@ -92,6 +92,8 @@ files:
|
|
92
92
|
- lib/kwalify_to_json_schema/cli.rb
|
93
93
|
- lib/kwalify_to_json_schema/converter.rb
|
94
94
|
- lib/kwalify_to_json_schema/custom_processing.rb
|
95
|
+
- lib/kwalify_to_json_schema/issue.rb
|
96
|
+
- lib/kwalify_to_json_schema/issues.rb
|
95
97
|
- lib/kwalify_to_json_schema/kwalify_to_json_schema.rb
|
96
98
|
- lib/kwalify_to_json_schema/limitations.rb
|
97
99
|
- lib/kwalify_to_json_schema/options.rb
|