oapi 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|