kwalify_to_json_schema 0.1.2 → 0.4.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/cli.rb +12 -15
- data/lib/kwalify_to_json_schema/converter.rb +16 -14
- data/lib/kwalify_to_json_schema/kwalify_to_json_schema.rb +16 -14
- data/lib/kwalify_to_json_schema/limitations.rb +2 -1
- data/lib/kwalify_to_json_schema/options.rb +27 -14
- data/lib/kwalify_to_json_schema/serialization.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '06494f442be72dab717741fd0515c09e57541add4d42fd0740fd6ec475d18e08'
|
4
|
+
data.tar.gz: 0e3969aae90bda694a8beae488ecabfce80ee15ec381eca3f050456a1b7d4d45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5f7763ebef99718db807a839965f2118be48abe005616147a2a3c038adeb37a82564448faf52e35e6d782ce0666fad36902ed1e3832be8f7c67a7150471dc09
|
7
|
+
data.tar.gz: 5f690c9b95207db9329056ecaf74896beca736c634bf67659e16220613fa6cd5368dcc8160bd2b739262acc78026d09aed406853c025d0789509c2f4a6a95d4d
|
@@ -25,11 +25,12 @@ module KwalifyToJsonSchema
|
|
25
25
|
|
26
26
|
desc "convert KWALIFY_SCHEMA_FILE, RESULT_FILE",
|
27
27
|
"Convert a Kwalify schema file to a JSON schema file. The result file extension will decide the format: .json or .yaml"
|
28
|
-
option
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
option
|
28
|
+
option(*Options.cli_option(Options::ID))
|
29
|
+
option(*Options.cli_option(Options::TITLE))
|
30
|
+
option(*Options.cli_option(Options::DESCRIPTION))
|
31
|
+
option(*Options.cli_option(Options::ISSUES_TO_DESCRIPTION))
|
32
|
+
option(*Options.cli_option(Options::SCHEMA_VERSION))
|
33
|
+
option Options::CUSTOM_PROCESSING,
|
33
34
|
:type => :string,
|
34
35
|
:desc => <<~DESC
|
35
36
|
Allows to provide a pre/post processing file on handled schemas.
|
@@ -38,10 +39,8 @@ module KwalifyToJsonSchema
|
|
38
39
|
DESC
|
39
40
|
|
40
41
|
def convert(kwalify_schema_file, result_file)
|
41
|
-
opts =
|
42
|
-
|
43
|
-
Options::CUSTOM_PROCESSING => custom_processing(options),
|
44
|
-
}
|
42
|
+
opts = options.dup
|
43
|
+
opts[Options::CUSTOM_PROCESSING] = custom_processing(options)
|
45
44
|
KwalifyToJsonSchema.convert_file(kwalify_schema_file, result_file, opts)
|
46
45
|
end
|
47
46
|
|
@@ -49,10 +48,7 @@ module KwalifyToJsonSchema
|
|
49
48
|
|
50
49
|
desc "convert_dir KWALIFY_SCHEMA_DIR, RESULT_DIR",
|
51
50
|
"Convert all the Kwalify schema from a directory to a JSON schema"
|
52
|
-
option
|
53
|
-
:type => :boolean,
|
54
|
-
:default => false,
|
55
|
-
:desc => "Will append any conversion issue to the schema description"
|
51
|
+
option(*Options.cli_option(:issues_to_description))
|
56
52
|
option :format,
|
57
53
|
:type => :string,
|
58
54
|
:enum => ["json", "yaml"],
|
@@ -63,7 +59,8 @@ module KwalifyToJsonSchema
|
|
63
59
|
:default => false,
|
64
60
|
:desc => "Process files recursively",
|
65
61
|
:long_desc => ""
|
66
|
-
option
|
62
|
+
option(*Options.cli_option(Options::SCHEMA_VERSION))
|
63
|
+
option Options::CUSTOM_PROCESSING,
|
67
64
|
:type => :string,
|
68
65
|
:desc => <<~DESC
|
69
66
|
Allows to provide a pre/post processing file on handled schemas.
|
@@ -98,7 +95,7 @@ module KwalifyToJsonSchema
|
|
98
95
|
begin
|
99
96
|
processing_class = Object.const_get :CustomProcessing
|
100
97
|
custom_processing = processing_class.new
|
101
|
-
rescue NameError
|
98
|
+
rescue NameError
|
102
99
|
raise "The 'CustomProcessing' module must be defined in #{pf}"
|
103
100
|
end
|
104
101
|
end
|
@@ -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
|
@@ -19,13 +19,14 @@ module KwalifyToJsonSchema
|
|
19
19
|
attr_reader :issues
|
20
20
|
|
21
21
|
# Converter options:
|
22
|
-
# | Name | Type | Default value| Description
|
23
|
-
#
|
24
|
-
# | :id |
|
25
|
-
# | :title |
|
26
|
-
# | :description |
|
27
|
-
# | :issues_to_description|
|
28
|
-
# | :custom_processing |
|
22
|
+
# | Name | Type | Default value| Description |
|
23
|
+
# |-----------------------|--------|--------------|------------------------------------------------------------------------------------------|
|
24
|
+
# | :id | string | nil | The JSON schema identifier |
|
25
|
+
# | :title | string | nil | The JSON schema title |
|
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 issuses to the JSON schema description |
|
28
|
+
# | :custom_processing | object | nil | To customize the conversion |
|
29
|
+
# | :schema_version | string | "draft-04" | JSON schema version. Changing this value only change the value of $schema field |
|
29
30
|
# --
|
30
31
|
def initialize(options_hash = {})
|
31
32
|
@options = Options.new(options_hash)
|
@@ -46,6 +47,9 @@ module KwalifyToJsonSchema
|
|
46
47
|
description << issues.map { |issue| "* #{issue}" }.join("\n")
|
47
48
|
end
|
48
49
|
|
50
|
+
# Override description if given in option
|
51
|
+
json_schema["description"] = options.description if options.description
|
52
|
+
|
49
53
|
postprocess(json_schema)
|
50
54
|
end
|
51
55
|
|
@@ -53,10 +57,9 @@ module KwalifyToJsonSchema
|
|
53
57
|
|
54
58
|
def root
|
55
59
|
{
|
56
|
-
"$schema" => SCHEMA,
|
57
|
-
"
|
60
|
+
"$schema" => SCHEMA % options.schema_version,
|
61
|
+
"id" => options.id,
|
58
62
|
"title" => options.title,
|
59
|
-
"description" => options.description,
|
60
63
|
}.reject { |k, v| v.nil? }
|
61
64
|
end
|
62
65
|
|
@@ -76,6 +79,7 @@ module KwalifyToJsonSchema
|
|
76
79
|
if mapping.is_a? Hash
|
77
80
|
properties = target["properties"] = {}
|
78
81
|
mapping.each_pair { |name, e|
|
82
|
+
next if name == "=" # Ignore mapping default value
|
79
83
|
process(properties[name] = {}, e)
|
80
84
|
required << name if e["required"] == true
|
81
85
|
}
|
@@ -152,7 +156,7 @@ module KwalifyToJsonSchema
|
|
152
156
|
end
|
153
157
|
end
|
154
158
|
|
155
|
-
new_issue
|
159
|
+
new_issue Limitations::UNIQUE_NOT_SUPPORTED if kelem["unique"]
|
156
160
|
|
157
161
|
target
|
158
162
|
end
|
@@ -173,6 +177,4 @@ module KwalifyToJsonSchema
|
|
173
177
|
@issues << description
|
174
178
|
end
|
175
179
|
end
|
176
|
-
|
177
|
-
|
178
180
|
end
|
@@ -5,13 +5,14 @@ module KwalifyToJsonSchema
|
|
5
5
|
# The file extension is used to select the format: .json or .yaml.
|
6
6
|
# Other extension will fallback to JSON.
|
7
7
|
# Converter options:
|
8
|
-
# | Name | Type | Default value| Description
|
9
|
-
#
|
10
|
-
# | :id |
|
11
|
-
# | :title |
|
12
|
-
# | :description |
|
13
|
-
# | :issues_to_description|
|
14
|
-
# | :custom_processing |
|
8
|
+
# | Name | Type | Default value| Description |
|
9
|
+
# |-----------------------|--------|--------------|------------------------------------------------------------------------------------------|
|
10
|
+
# | :id | string | nil | The JSON schema identifier |
|
11
|
+
# | :title | string | nil | The JSON schema title |
|
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 issuses to the JSON schema description |
|
14
|
+
# | :custom_processing | object | nil | To customize the conversion |
|
15
|
+
# | :schema_version | string | "draft-04" | JSON schema version. Changing this value only change the value of $schema field |
|
15
16
|
# --
|
16
17
|
# @param source Path to Kwalify YAML schema
|
17
18
|
# @param dest Path to resulting JSON schema
|
@@ -28,13 +29,14 @@ module KwalifyToJsonSchema
|
|
28
29
|
# The source and destination strings can be JSON or YAML.
|
29
30
|
# Other extension will fallback to JSON.
|
30
31
|
# Converter options:
|
31
|
-
# | Name | Type | Default value| Description
|
32
|
-
#
|
33
|
-
# | :id |
|
34
|
-
# | :title |
|
35
|
-
# | :description |
|
36
|
-
# | :issues_to_description|
|
37
|
-
# | :custom_processing |
|
32
|
+
# | Name | Type | Default value| Description |
|
33
|
+
# |-----------------------|--------|--------------|------------------------------------------------------------------------------------------|
|
34
|
+
# | :id | string | nil | The JSON schema identifier |
|
35
|
+
# | :title | string | nil | The JSON schema title |
|
36
|
+
# | :description | string | nil | The JSON schema description. If not given the Kwalify description will be used if present|
|
37
|
+
# | :issues_to_description| boolean| false | To append the issuses to the JSON schema description |
|
38
|
+
# | :custom_processing | object | nil | To customize the conversion |
|
39
|
+
# | :schema_version | string | "draft-04" | JSON schema version. Changing this value only change the value of $schema field |
|
38
40
|
# --
|
39
41
|
# @param kwalify_schema Kwalify schema as YAML or JSON
|
40
42
|
# @param source_format format of the source schema
|
@@ -1,8 +1,9 @@
|
|
1
1
|
module KwalifyToJsonSchema
|
2
|
-
# Enumeration of known implementation
|
2
|
+
# Enumeration of known implementation limitations
|
3
3
|
module Limitations
|
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
|
+
UNIQUE_NOT_SUPPORTED = "Kwalify 'unique' is not supported by JSON Schema and is ignored"
|
7
8
|
end
|
8
9
|
end
|
@@ -2,20 +2,22 @@ module KwalifyToJsonSchema
|
|
2
2
|
# The possible options for the conversion and the associated accessors
|
3
3
|
class Options
|
4
4
|
# Converter options:
|
5
|
-
# | Name | Type | Default value| Description
|
6
|
-
#
|
7
|
-
# | :id |
|
8
|
-
# | :title |
|
9
|
-
# | :description |
|
10
|
-
# | :issues_to_description|
|
11
|
-
# | :custom_processing |
|
5
|
+
# | Name | Type | Default value| Description |
|
6
|
+
# |-----------------------|--------|--------------|------------------------------------------------------------------------------------------|
|
7
|
+
# | :id | string | nil | The JSON schema identifier |
|
8
|
+
# | :title | string | nil | The JSON schema title |
|
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 issuses to the JSON schema description |
|
11
|
+
# | :custom_processing | object | nil | To customize the conversion |
|
12
|
+
# | :schema_version | string | "draft-04" | JSON schema version. Changing this value only change the value of $schema field |
|
12
13
|
# --
|
13
14
|
DECLARATION = %q(
|
14
|
-
ID # The JSON schema identifier [
|
15
|
-
TITLE # The JSON schema title [
|
16
|
-
DESCRIPTION # The JSON schema description [
|
17
|
-
ISSUES_TO_DESCRIPTION # To append the issuses to the JSON schema description [
|
18
|
-
CUSTOM_PROCESSING # To customize the conversion [
|
15
|
+
ID # The JSON schema identifier [string] (nil)
|
16
|
+
TITLE # The JSON schema title [string] (nil)
|
17
|
+
DESCRIPTION # The JSON schema description. If not given the Kwalify description will be used if present [string] (nil)
|
18
|
+
ISSUES_TO_DESCRIPTION # To append the issuses to the JSON schema description [boolean] (false)
|
19
|
+
CUSTOM_PROCESSING # To customize the conversion [object] (nil)
|
20
|
+
SCHEMA_VERSION # JSON schema version. Changing this value only change the value of $schema field[string] ("draft-04")
|
19
21
|
)
|
20
22
|
|
21
23
|
# The options as Hash
|
@@ -40,13 +42,13 @@ module KwalifyToJsonSchema
|
|
40
42
|
default_value = eval(default_value)
|
41
43
|
|
42
44
|
# Create read accessor
|
43
|
-
attr_reader_name = "#{name}#{type == "
|
45
|
+
attr_reader_name = "#{name}#{type == "boolean" ? "?" : ""}"
|
44
46
|
|
45
47
|
# Array entry as Hash for the option
|
46
48
|
{
|
47
49
|
const_name: const_name,
|
48
50
|
const_name_full: "#{Options.name}::#{const_name}",
|
49
|
-
name: name,
|
51
|
+
name: name.to_sym,
|
50
52
|
description: description,
|
51
53
|
type: type,
|
52
54
|
default_value: default_value,
|
@@ -55,6 +57,11 @@ module KwalifyToJsonSchema
|
|
55
57
|
}.compact
|
56
58
|
end
|
57
59
|
|
60
|
+
# Same as :parse but give a Hash with the name as key
|
61
|
+
def self.parse_hash
|
62
|
+
parse.map { |e| [e[:name], e] }.to_h
|
63
|
+
end
|
64
|
+
|
58
65
|
# Setup the constants and methods for the options
|
59
66
|
# Example: ID will lead to get ID constant and :id method
|
60
67
|
def self.setup
|
@@ -69,6 +76,12 @@ module KwalifyToJsonSchema
|
|
69
76
|
}
|
70
77
|
end
|
71
78
|
|
79
|
+
# Get description for option name
|
80
|
+
def self.cli_option(name)
|
81
|
+
o = parse_hash[name]
|
82
|
+
[o[:name], :type => o[:type].to_sym, :default => o[:default_value], :desc => o[:description]]
|
83
|
+
end
|
84
|
+
|
72
85
|
setup
|
73
86
|
end
|
74
87
|
end
|
@@ -25,7 +25,7 @@ module KwalifyToJsonSchema
|
|
25
25
|
|
26
26
|
# @return a Hash giving serialization/deserialization module and methods for a format (json/yaml)
|
27
27
|
def self.serialization_for_format(format)
|
28
|
-
|
28
|
+
{ "json" => Json, "yaml" => Yaml }[format] || Json
|
29
29
|
end
|
30
30
|
|
31
31
|
class Language
|
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.4.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: 2020-06-
|
11
|
+
date: 2020-06-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
|