kwalify_to_json_schema 0.4.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '06494f442be72dab717741fd0515c09e57541add4d42fd0740fd6ec475d18e08'
4
- data.tar.gz: 0e3969aae90bda694a8beae488ecabfce80ee15ec381eca3f050456a1b7d4d45
3
+ metadata.gz: e93f6522625fde6b85d8f46a719a0a4ed2cec61ca281511094e32f1f8b8b8941
4
+ data.tar.gz: 47e10842e281ac6fb393e7c97dfa17ef574cfcc262507cc6e649eeec1d5e39a5
5
5
  SHA512:
6
- metadata.gz: b5f7763ebef99718db807a839965f2118be48abe005616147a2a3c038adeb37a82564448faf52e35e6d782ce0666fad36902ed1e3832be8f7c67a7150471dc09
7
- data.tar.gz: 5f690c9b95207db9329056ecaf74896beca736c634bf67659e16220613fa6cd5368dcc8160bd2b739262acc78026d09aed406853c025d0789509c2f4a6a95d4d
6
+ metadata.gz: 46e85a186ef82f070f7d370f7ac33cc3c8ab68a866cb3fd342650b4d3d42c7dcce3d42072cfd9597e8accddbd979fa50421066842693fff6e735cb325773f0cd
7
+ data.tar.gz: '0799db65393f0084351df69fd34ceef0c3382d8a82ec3ef710c8b1ef041187bf9dd44201ac4ca25abace773ee07a0610048971d4f8b23b190db5fea8002ed87d'
@@ -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,7 +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))
32
33
  option(*Options.cli_option(Options::SCHEMA_VERSION))
34
+ option(*Options.cli_option(Options::VERBOSE))
33
35
  option Options::CUSTOM_PROCESSING,
34
36
  :type => :string,
35
37
  :desc => <<~DESC
@@ -60,6 +62,7 @@ module KwalifyToJsonSchema
60
62
  :desc => "Process files recursively",
61
63
  :long_desc => ""
62
64
  option(*Options.cli_option(Options::SCHEMA_VERSION))
65
+ option(*Options.cli_option(Options::VERBOSE))
63
66
  option Options::CUSTOM_PROCESSING,
64
67
  :type => :string,
65
68
  :desc => <<~DESC
@@ -69,11 +72,9 @@ module KwalifyToJsonSchema
69
72
  DESC
70
73
 
71
74
  def convert_dir(kwalify_schema_dir, result_dir)
72
- opts = {
73
- Options::ISSUES_TO_DESCRIPTION => options[:issues_to_description],
74
- Options::CUSTOM_PROCESSING => custom_processing(options),
75
- }
76
-
75
+ opts = options.dup
76
+ opts[Options::CUSTOM_PROCESSING] = custom_processing(options)
77
+
77
78
  path = [kwalify_schema_dir, options["recursive"] ? "**" : nil, "*.yaml"].compact
78
79
  Dir.glob(File.join(*path)).each { |kwalify_schema_file|
79
80
  result_file = File.join(result_dir, File.basename(kwalify_schema_file, File.extname(kwalify_schema_file))) + ".#{options["format"]}"
@@ -25,12 +25,15 @@ module KwalifyToJsonSchema
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
27
  # | :issues_to_description| boolean| false | To append the issuses to the JSON schema description |
28
+ # | :issues_to_stderr | boolean| false | To write the issuses standard error output |
28
29
  # | :custom_processing | object | nil | To customize the conversion |
29
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 |
30
32
  # --
31
- def initialize(options_hash = {})
32
- @options = Options.new(options_hash)
33
- @issues = []
33
+ # @param options {Options} or {Hash}
34
+ def initialize(options = {})
35
+ @options = Options.new(options)
36
+ @issues = Issues.new
34
37
  end
35
38
 
36
39
  # Execute the conversion process
@@ -44,11 +47,12 @@ module KwalifyToJsonSchema
44
47
  if issues.any? && options.issues_to_description?
45
48
  description = json_schema["description"] ||= ""
46
49
  description << "Issues when converting from Kwalify:\n"
47
- description << issues.map { |issue| "* #{issue}" }.join("\n")
50
+ description << issues.descriptions_uniq.map { |description| "* #{description}" }.join("\n")
48
51
  end
49
52
 
50
53
  # Override description if given in option
51
54
  json_schema["description"] = options.description if options.description
55
+ STDERR.puts issues if options.issues_to_stderr?
52
56
 
53
57
  postprocess(json_schema)
54
58
  end
@@ -65,12 +69,14 @@ module KwalifyToJsonSchema
65
69
 
66
70
  # @param target Json schema target
67
71
  # @param kelem Kwalify element
68
- def process(target, kelem)
72
+ def process(target, kelem, path = [])
69
73
 
70
74
  # Add description if available
71
75
  target["description"] = kelem["desc"] if kelem["desc"]
76
+ ktype = kelem["type"]
77
+ path += [ktype] if ktype
72
78
 
73
- case ktype = kelem["type"]
79
+ case ktype
74
80
  when "map"
75
81
  target["type"] = "object"
76
82
  target["additionalProperties"] = false
@@ -79,8 +85,12 @@ module KwalifyToJsonSchema
79
85
  if mapping.is_a? Hash
80
86
  properties = target["properties"] = {}
81
87
  mapping.each_pair { |name, e|
82
- next if name == "=" # Ignore mapping default value
83
- process(properties[name] = {}, e)
88
+ # Ignore mapping default value
89
+ if name == "="
90
+ new_issue path, Limitations::MAPPING_DEFAULT_VALUE_NOT_SUPPORTED
91
+ next
92
+ end
93
+ process(properties[name] = {}, e, path + [name])
84
94
  required << name if e["required"] == true
85
95
  }
86
96
  target["required"] = required unless required.empty?
@@ -107,13 +117,13 @@ module KwalifyToJsonSchema
107
117
  target["type"] = "boolean"
108
118
  when "date"
109
119
  # TODO
110
- new_issue Limitations::DATE_TYPE_NOT_IMPLEMENTED
120
+ new_issue path, Limitations::DATE_TYPE_NOT_IMPLEMENTED
111
121
  when "time"
112
122
  # TODO
113
- new_issue Limitations::TIME_TYPE_NOT_IMPLEMENTED
123
+ new_issue path, Limitations::TIME_TYPE_NOT_IMPLEMENTED
114
124
  when "timestamp"
115
125
  # TODO
116
- new_issue Limitations::TIMESTAMP_TYPE_NOT_IMPLEMENTED
126
+ new_issue path, Limitations::TIMESTAMP_TYPE_NOT_IMPLEMENTED
117
127
  when "scalar"
118
128
  # Use one of
119
129
  target["oneOf"] = [
@@ -156,7 +166,7 @@ module KwalifyToJsonSchema
156
166
  end
157
167
  end
158
168
 
159
- new_issue Limitations::UNIQUE_NOT_SUPPORTED if kelem["unique"]
169
+ new_issue path, Limitations::UNIQUE_NOT_SUPPORTED if kelem["unique"]
160
170
 
161
171
  target
162
172
  end
@@ -173,8 +183,8 @@ module KwalifyToJsonSchema
173
183
  ep.postprocess(json_schema)
174
184
  end
175
185
 
176
- def new_issue(description)
177
- @issues << description
186
+ def new_issue(path, description)
187
+ @issues << Issue.new(path, description)
178
188
  end
179
189
  end
180
190
  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
@@ -0,0 +1,10 @@
1
+ module KwalifyToJsonSchema
2
+ # Used to hold issues encoutered while converting
3
+ class Issues < Array
4
+
5
+ # Get an array with only one instance of each description
6
+ def descriptions_uniq
7
+ map(&:description).uniq
8
+ end
9
+ end
10
+ end
@@ -11,12 +11,17 @@ module KwalifyToJsonSchema
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
13
  # | :issues_to_description| boolean| false | To append the issuses to the JSON schema description |
14
+ # | :issues_to_stderr | boolean| false | To write the issuses standard error output |
14
15
  # | :custom_processing | object | nil | To customize the conversion |
15
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 |
16
18
  # --
17
19
  # @param source Path to Kwalify YAML schema
18
20
  # @param dest Path to resulting JSON schema
19
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
+
20
25
  # Get a converter
21
26
  converter = Converter.new(options)
22
27
  # Convert
@@ -35,14 +40,17 @@ module KwalifyToJsonSchema
35
40
  # | :title | string | nil | The JSON schema title |
36
41
  # | :description | string | nil | The JSON schema description. If not given the Kwalify description will be used if present|
37
42
  # | :issues_to_description| boolean| false | To append the issuses to the JSON schema description |
43
+ # | :issues_to_stderr | boolean| false | To write the issuses standard error output |
38
44
  # | :custom_processing | object | nil | To customize the conversion |
39
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 |
40
47
  # --
41
48
  # @param kwalify_schema Kwalify schema as YAML or JSON
42
49
  # @param source_format format of the source schema
43
50
  # @param dest_format format of the destination schema
44
51
  # @param options
45
52
  def self.convert_string(kwalify_schema, source_format = "yaml", dest_format = "json", options = {})
53
+ options = Options.new(options)
46
54
  # Get a converter
47
55
  converter = Converter.new(options)
48
56
  # Convert
@@ -5,5 +5,6 @@ module KwalifyToJsonSchema
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 = "Kwalify 'unique' is not supported by JSON Schema and is ignored"
8
+ MAPPING_DEFAULT_VALUE_NOT_SUPPORTED = "Kwalify mapping default value is not supported by JSON Schema and is ignored"
8
9
  end
9
10
  end
@@ -8,23 +8,31 @@ module KwalifyToJsonSchema
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
10
  # | :issues_to_description| boolean| false | To append the issuses to the JSON schema description |
11
+ # | :issues_to_stderr | boolean| false | To write the issuses standard error output |
11
12
  # | :custom_processing | object | nil | To customize the conversion |
12
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 |
13
15
  # --
14
16
  DECLARATION = %q(
15
17
  ID # The JSON schema identifier [string] (nil)
16
18
  TITLE # The JSON schema title [string] (nil)
17
19
  DESCRIPTION # The JSON schema description. If not given the Kwalify description will be used if present [string] (nil)
18
20
  ISSUES_TO_DESCRIPTION # To append the issuses to the JSON schema description [boolean] (false)
21
+ ISSUES_TO_STDERR # To write the issuses standard error output [boolean] (false)
19
22
  CUSTOM_PROCESSING # To customize the conversion [object] (nil)
20
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)
21
25
  )
22
26
 
23
27
  # The options as Hash
24
28
  attr_reader :options_hash
25
29
 
26
- def initialize(options_hash)
27
- @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)
28
36
  end
29
37
 
30
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.0
4
+ version: 0.5.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-15 00:00:00.000000000 Z
11
+ date: 2020-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -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