oapi 0.1.1 → 0.1.3
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/Gemfile.lock +1 -1
- data/lib/oapi/open_api/v30/components.rb +1 -15
- data/lib/oapi/open_api/v30/links.rb +15 -0
- data/lib/oapi/open_api/v30/parsers/json.rb +38 -0
- data/lib/oapi/open_api/v30/responses.rb +2 -0
- data/lib/oapi/open_api/v30/serializers/ruby.rb +16 -5
- data/lib/oapi/schema.rb +0 -9
- data/lib/oapi/types/array.rb +0 -2
- data/lib/oapi/types/map.rb +5 -8
- data/lib/oapi/types/object.rb +0 -16
- data/lib/oapi/version.rb +1 -1
- data/lib/oapi.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 51585744c9a5a8787b4cbc8235ca2f613fdad0fc8d28aea14ad8242b2d39d107
|
4
|
+
data.tar.gz: b68db8b06768f24ead377f085cd5cb546aba3a9912ebe550229f3ca037621621
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96f581933db469a307cfe53e22611a5821540d1b6fdadb77d9e81ab70deaf2097c748108c559105ca0bab6c6097f8d80baeb4d0f36f63ad50fb3709e7d06c0af
|
7
|
+
data.tar.gz: a2ea340668ebd92716f3434094ae809e5c8c25f1e07e0fe6fc329f225c88125c2d62cb35c378f388ae9e1ab755ed88adf86d5a084f080544eb2960298512f9e6
|
data/Gemfile.lock
CHANGED
@@ -43,20 +43,6 @@ class OAPI::OpenAPI::V30::Components < OAPI::Types::Object
|
|
43
43
|
item :scheme, Scheme
|
44
44
|
end
|
45
45
|
|
46
|
-
class Links < OAPI::Types::Map
|
47
|
-
class Link < OAPI::Types::Object
|
48
|
-
property :operation_ref
|
49
|
-
property :operation_id
|
50
|
-
property :request_body
|
51
|
-
property :description
|
52
|
-
|
53
|
-
property :parameters # TODO: a custom type? https://spec.openapis.org/oas/v3.0.3#fixed-fields-16
|
54
|
-
property :server, OAPI::OpenAPI::V30::Servers::Server
|
55
|
-
end
|
56
|
-
|
57
|
-
item :link, Link
|
58
|
-
end
|
59
|
-
|
60
46
|
property :schemas, Schemas
|
61
47
|
property :responses, OAPI::OpenAPI::V30::Responses
|
62
48
|
property :parameters, Parameters
|
@@ -64,6 +50,6 @@ class OAPI::OpenAPI::V30::Components < OAPI::Types::Object
|
|
64
50
|
property :request_bodies, RequestBodies
|
65
51
|
property :headers, OAPI::OpenAPI::V30::Headers
|
66
52
|
property :security_schemes, SecuritySchemes
|
67
|
-
property :links, Links
|
53
|
+
property :links, OAPI::OpenAPI::V30::Links
|
68
54
|
property :callbacks, OAPI::OpenAPI::V30::Callbacks
|
69
55
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class OAPI::OpenAPI::V30::Links < OAPI::Types::Map
|
4
|
+
class Link < OAPI::Types::Object
|
5
|
+
property :operation_ref
|
6
|
+
property :operation_id
|
7
|
+
property :request_body
|
8
|
+
property :description
|
9
|
+
|
10
|
+
property :parameters # TODO: a custom type? https://spec.openapis.org/oas/v3.0.3#fixed-fields-16
|
11
|
+
property :server, OAPI::OpenAPI::V30::Servers::Server
|
12
|
+
end
|
13
|
+
|
14
|
+
item :link, Link
|
15
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class OAPI::OpenAPI::V30::Parsers::JSON
|
4
|
+
using OAPI::Monkey
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def parse(input) = parse_object(input, OAPI::OpenAPI::V30::Definition)
|
8
|
+
|
9
|
+
def parse_type(input, type)
|
10
|
+
return input if type.nil?
|
11
|
+
|
12
|
+
return parse_array(input, type) if type <= OAPI::Types::Array
|
13
|
+
|
14
|
+
return parse_map(input, type) if type <= OAPI::Types::Map
|
15
|
+
|
16
|
+
return OAPI::Ref.new(input[:$ref]) if input[:$ref]
|
17
|
+
|
18
|
+
return type.new { input } if type <= OAPI::Schema
|
19
|
+
|
20
|
+
return parse_object(input, type) if type <= OAPI::Types::Object
|
21
|
+
|
22
|
+
raise ArgumentError, "unknown type #{type}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def parse_object(input, klass)
|
26
|
+
klass.new.tap do |obj|
|
27
|
+
klass.properties.each do |name, type|
|
28
|
+
value = input[name.camelize]
|
29
|
+
|
30
|
+
obj.send(name, parse_type(value, type)) unless value.nil?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def parse_array(input, klass) = klass.new(input.map { parse_type(_1, klass.item_type) })
|
36
|
+
def parse_map(input, klass) = klass.new(input.transform_values { parse_type(_1, klass.item_type) })
|
37
|
+
end
|
38
|
+
end
|
@@ -5,9 +5,13 @@ class OAPI::OpenAPI::V30::Serializers::Ruby < OAPI::OpenAPI::V30::Serializers::S
|
|
5
5
|
|
6
6
|
MAP_TEMPLATE = %(
|
7
7
|
<% object.store.each do |key, value| -%>
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
<% if value.is_a?(OAPI::Ref) -%>
|
9
|
+
<%= object.class.item_name %>("<%= key %>", ref: <%= serialize(value) %>)
|
10
|
+
<% else -%>
|
11
|
+
<%= object.class.item_name %>("<%= key %>") do
|
12
|
+
<%= serialize_if_supported(value) %>
|
13
|
+
end
|
14
|
+
<% end -%>
|
11
15
|
<% end -%>
|
12
16
|
)
|
13
17
|
|
@@ -22,13 +26,13 @@ end
|
|
22
26
|
OBJECT_TEMPLATE = %(
|
23
27
|
<% object.properties.each do |prop, value| -%>
|
24
28
|
<% if value.is_a?(OAPI::Ref) -%>
|
25
|
-
<%= prop%>(ref: <%= serialize(value) %>)
|
29
|
+
<%= prop %>(ref: <%= serialize(value) %>)
|
26
30
|
<% elsif supported?(value) -%>
|
27
31
|
<%= prop %> do
|
28
32
|
<%= serialize(value) %>
|
29
33
|
end
|
30
34
|
<% elsif !value.nil? -%>
|
31
|
-
<%= prop %> <%= value
|
35
|
+
<%= prop %> <%= value_to_ruby(value) %>
|
32
36
|
<% end -%>
|
33
37
|
<% end -%>
|
34
38
|
)
|
@@ -43,6 +47,13 @@ end
|
|
43
47
|
def serialize(node) = OAPI::OpenAPI::V30::Serializers::Ruby.serialize(node)
|
44
48
|
def supported?(node) = OAPI::OpenAPI::V30::Serializers::Ruby.supported?(node)
|
45
49
|
def serialize_if_supported(node) = OAPI::OpenAPI::V30::Serializers::Ruby.serialize_if_supported(node)
|
50
|
+
|
51
|
+
def value_to_ruby(value)
|
52
|
+
return value.inspect if [Numeric, String, Array, TrueClass, FalseClass].any? { value.is_a?(_1) }
|
53
|
+
return "(#{value.inspect})" if value.is_a?(Hash)
|
54
|
+
|
55
|
+
raise ArgumentError, "value: #{value}"
|
56
|
+
end
|
46
57
|
end
|
47
58
|
|
48
59
|
def serialize_ref(ref) = ref.ref.inspect
|
data/lib/oapi/schema.rb
CHANGED
data/lib/oapi/types/array.rb
CHANGED
data/lib/oapi/types/map.rb
CHANGED
@@ -15,18 +15,15 @@ class OAPI::Types::Map < OAPI::Types::Object
|
|
15
15
|
@item_name = name
|
16
16
|
@item_type = type
|
17
17
|
|
18
|
-
define_method(name) do |key, &block|
|
18
|
+
define_method(name) do |key, ref: nil, &block|
|
19
19
|
raise ArgumentError, "'#{key}' already exists" if @store.include?(key.to_s)
|
20
20
|
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
21
|
+
raise ArgumentError, "ref and block are mutual exclusive" if ref && block
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
return @store[key] = OAPI::Ref.new(ref) if ref
|
24
|
+
|
25
|
+
@store[key] = type.new(&block)
|
28
26
|
end
|
29
|
-
new(store)
|
30
27
|
end
|
31
28
|
end
|
32
29
|
end
|
data/lib/oapi/types/object.rb
CHANGED
@@ -1,21 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class OAPI::Types::Object
|
4
|
-
using OAPI::Monkey
|
5
|
-
|
6
4
|
include OAPI::Properties
|
7
|
-
|
8
|
-
class << self
|
9
|
-
def parse(json)
|
10
|
-
new.tap do |obj|
|
11
|
-
(properties || []).each do |name, type|
|
12
|
-
value = json[name.camelize]
|
13
|
-
next if value.nil?
|
14
|
-
|
15
|
-
value = type.parse(value) if value.is_a?(Hash) || (value.is_a?(Array) && type)
|
16
|
-
obj.send(name, value)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
5
|
end
|
data/lib/oapi/version.rb
CHANGED
data/lib/oapi.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gleb Sinyavskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zeitwerk
|
@@ -50,8 +50,10 @@ files:
|
|
50
50
|
- lib/oapi/open_api/v30/external_docs.rb
|
51
51
|
- lib/oapi/open_api/v30/headers.rb
|
52
52
|
- lib/oapi/open_api/v30/info.rb
|
53
|
+
- lib/oapi/open_api/v30/links.rb
|
53
54
|
- lib/oapi/open_api/v30/media_type.rb
|
54
55
|
- lib/oapi/open_api/v30/parameters.rb
|
56
|
+
- lib/oapi/open_api/v30/parsers/json.rb
|
55
57
|
- lib/oapi/open_api/v30/paths.rb
|
56
58
|
- lib/oapi/open_api/v30/request_body.rb
|
57
59
|
- lib/oapi/open_api/v30/responses.rb
|