open_api_2_json_schema 0.1.0 → 0.1.1

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: fb64e501ef7cce37f6a1cd60f7ce61b7fff4688800699281dad4202cace7a9d9
4
- data.tar.gz: c8ac0fa10f9eacfd26e8e862ad56fb4b09e64998965fdd3dcbfd8711a95ef8df
3
+ metadata.gz: 3b7f9dc1848c8bc1810adba623e3a909937e781a8d916530f008791d9fafbb03
4
+ data.tar.gz: 17847b2a3ae5114c7a331e811c59dc062d018aa8646b109c099fb35260d497db
5
5
  SHA512:
6
- metadata.gz: 0d15e51a8346868a3941eaff9f6741c33490cf155f47f8459ae8c46967d9222d86d643b0ea62943042dd16ff64653a1950c7c6816782acc62ac2f968f2ce1bc8
7
- data.tar.gz: 18e5244cbeebc8591542eea1a0bd85cc5e7bd9721ff798890f3506c87398775f0ac471087b931cfb31b48b68ad09d450d4b731df7b2f02090256ae746e29a1d4
6
+ metadata.gz: 81d9359bc0f47a7ce8f7660af70bb44190b0c241f33b1031b1eeb04d51358dae4962f7259f83dbed511caa8a62bdac137db5050932b0d3f891d245d963d0b9b7
7
+ data.tar.gz: 8019ae57689e5386956cd2222c1f4a457ba37e9dd03942095486fec12d60297bddcb8fb935db709ab32041e09530af2a3dbb790195565eed3e76db1720c62e66
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
- --format documentation
1
+ --format progress
2
2
  --color
3
3
  --require spec_helper
data/CHANGELOG.md CHANGED
@@ -1,4 +1,6 @@
1
- ## [Unreleased]
1
+ ## [0.1.1] - 2022-09-23
2
+
3
+ - Support `$ref` and `allOf`
2
4
 
3
5
  ## [0.1.0] - 2022-03-26
4
6
 
@@ -0,0 +1,21 @@
1
+ require_relative '../ref_schema_parser'
2
+
3
+ module OpenApi2JsonSchema
4
+ module AttributeHandlers
5
+ class AllOf
6
+ def call(all_of_schemas)
7
+ raise 'allOf schema must be an Array' unless all_of_schemas.is_a?(Array)
8
+
9
+ all_of_schemas.each_with_index.map do |schema, index|
10
+ raise "Invalid schema: allOf[#{index}]" unless schema.is_a?(Hash)
11
+
12
+ if schema['$ref']
13
+ OpenApi2JsonSchema::RefSchemaParser.new.call(schema['$ref'])
14
+ else
15
+ schema
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenApi2JsonSchema
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
@@ -3,11 +3,12 @@
3
3
  require 'json'
4
4
  require 'yaml'
5
5
  require_relative "open_api_2_json_schema/version"
6
+ require_relative 'attribute_handlers/all_of'
6
7
 
7
8
  module OpenApi2JsonSchema
8
9
  module_function
9
10
 
10
- STRUCTS = ['allOf', 'anyOf', 'oneOf', 'not', 'items', 'additionalProperties']
11
+ STRUCTS = ['allOf', 'anyOf', 'oneOf', 'not', 'items', 'additionalProperties', 'schema']
11
12
  NOT_SUPPORTED = [
12
13
  'nullable', 'discriminator', 'readOnly',
13
14
  'writeOnly', 'xml', 'externalDocs',
@@ -47,11 +48,15 @@ module OpenApi2JsonSchema
47
48
  def convert_schema(schema)
48
49
  json_schema = schema.except(*NOT_SUPPORTED)
49
50
 
50
- schema.slice(STRUCTS).each do |struct, data|
51
+ schema.slice(*STRUCTS).each do |struct, data|
51
52
  case data
52
53
  when Array
53
- json_schema[struct] = data.map do |item|
54
- convert_schema(item)
54
+ if struct == 'allOf'
55
+ json_schema[struct] = AttributeHandlers::AllOf.new.call(data)
56
+ else
57
+ json_schema[struct] = data.map do |item|
58
+ convert_schema(item)
59
+ end
55
60
  end
56
61
  when Hash
57
62
  json_schema[struct] = convert_schema(data)
@@ -0,0 +1,35 @@
1
+ require 'yaml'
2
+
3
+ module OpenApi2JsonSchema
4
+ class RefSchemaParser
5
+ def call(ref_path)
6
+ file_path, fragments = normalize_path(ref_path)
7
+ ref_schema = load_file(file_path)
8
+ fragment_schema = ref_schema
9
+
10
+ if fragments
11
+ fragments.split('/').each do |fragment|
12
+ if fragment && fragment != '' && fragment_schema[fragment]
13
+ fragment_schema = fragment_schema[fragment]
14
+ end
15
+ end
16
+ end
17
+
18
+ fragment_schema
19
+ end
20
+
21
+ private
22
+
23
+ def normalize_path(path)
24
+ temp_path = path.split('#')
25
+ raise 'Invalid reference path' if temp_path.size > 2
26
+
27
+ temp_path
28
+ end
29
+
30
+ def load_file(path)
31
+ data = File.read(path)
32
+ YAML.safe_load(data)
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_api_2_json_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - hieuk09
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-26 00:00:00.000000000 Z
11
+ date: 2022-09-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 'Due to the OpenAPI v3.0 and JSON Schema discrepancy, you can use this
14
14
  JS library to convert OpenAPI Schema objects to proper JSON Schema. '
@@ -22,14 +22,15 @@ files:
22
22
  - ".rubocop.yml"
23
23
  - CHANGELOG.md
24
24
  - Gemfile
25
- - Gemfile.lock
26
25
  - LICENSE.txt
27
26
  - README.md
28
27
  - Rakefile
29
28
  - bin/console
30
29
  - bin/setup
30
+ - lib/attribute_handlers/all_of.rb
31
31
  - lib/open_api_2_json_schema.rb
32
32
  - lib/open_api_2_json_schema/version.rb
33
+ - lib/ref_schema_parser.rb
33
34
  homepage: https://github.com/hieuk09/open_api_2_json_schema
34
35
  licenses:
35
36
  - MIT
@@ -51,7 +52,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
51
52
  - !ruby/object:Gem::Version
52
53
  version: '0'
53
54
  requirements: []
54
- rubygems_version: 3.2.32
55
+ rubygems_version: 3.0.8
55
56
  signing_key:
56
57
  specification_version: 4
57
58
  summary: OpenAPI v3.0 schema to JSON Schema draft 4 converter
data/Gemfile.lock DELETED
@@ -1,66 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- open_api_2_json_schema (0.1.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- ast (2.4.2)
10
- attr_extras (6.2.5)
11
- byebug (11.1.3)
12
- diff-lcs (1.5.0)
13
- optimist (3.0.1)
14
- parallel (1.22.1)
15
- parser (3.1.1.0)
16
- ast (~> 2.4.1)
17
- patience_diff (1.2.0)
18
- optimist (~> 3.0)
19
- rainbow (3.1.1)
20
- rake (13.0.6)
21
- regexp_parser (2.2.1)
22
- rexml (3.2.5)
23
- rspec (3.11.0)
24
- rspec-core (~> 3.11.0)
25
- rspec-expectations (~> 3.11.0)
26
- rspec-mocks (~> 3.11.0)
27
- rspec-core (3.11.0)
28
- rspec-support (~> 3.11.0)
29
- rspec-expectations (3.11.0)
30
- diff-lcs (>= 1.2.0, < 2.0)
31
- rspec-support (~> 3.11.0)
32
- rspec-mocks (3.11.0)
33
- diff-lcs (>= 1.2.0, < 2.0)
34
- rspec-support (~> 3.11.0)
35
- rspec-support (3.11.0)
36
- rubocop (1.26.1)
37
- parallel (~> 1.10)
38
- parser (>= 3.1.0.0)
39
- rainbow (>= 2.2.2, < 4.0)
40
- regexp_parser (>= 1.8, < 3.0)
41
- rexml
42
- rubocop-ast (>= 1.16.0, < 2.0)
43
- ruby-progressbar (~> 1.7)
44
- unicode-display_width (>= 1.4.0, < 3.0)
45
- rubocop-ast (1.16.0)
46
- parser (>= 3.1.1.0)
47
- ruby-progressbar (1.11.0)
48
- super_diff (0.8.0)
49
- attr_extras (>= 6.2.4)
50
- diff-lcs
51
- patience_diff
52
- unicode-display_width (2.1.0)
53
-
54
- PLATFORMS
55
- x86_64-darwin-19
56
-
57
- DEPENDENCIES
58
- byebug
59
- open_api_2_json_schema!
60
- rake (~> 13.0)
61
- rspec (~> 3.0)
62
- rubocop (~> 1.21)
63
- super_diff
64
-
65
- BUNDLED WITH
66
- 2.2.32