oapi 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e4421c069d115418bd789cf9da9d9e6d29286d7eaae99cf3bda9b5791bae4308
4
- data.tar.gz: 137785b55b2c6b8a7c3c05246ed1843472f039b790905d380b7e0b49725593a6
3
+ metadata.gz: 37dbb0c32ad9fbb1b11e79026bfb3dc6264d33e2f7f37e86415b8db74b4d2139
4
+ data.tar.gz: 769f5aa94adce67c2dd25386fde708ededd589cbfb04505b6dfb87ca76c9210b
5
5
  SHA512:
6
- metadata.gz: e573b3a84d1577baea6a85e4f3624f18af8fe24e3431317913c6e12afc51b7f8d2fb702bfce2454b7b2c505261ba4f6b142b92abe3eb3636696d601036d6270d
7
- data.tar.gz: 20c09ec8fc131fd731fdbe6b03f9a11c81d2e96587152eb47f666ee21d40f704ddd6cdcb95c2c5b898d5854124bf55d025dd5edff8ce5ab9eb9ba2cbeb52e379
6
+ metadata.gz: cb093caf6f99bafff9e46bd00f08f8b761f3af8fafb7acf8996bb615ac69fcc377303431d82918925fbb30747ede4e2640996dc3aa1a76621a66dc85f2265a96
7
+ data.tar.gz: cabca79f246baaf09a41dee4991ee08ea8289f3b9c12d7838416e5d0e0c59800eb4190dd44afa92bdd4405f178d613136bd69b0a7cdf5e90c723fe502945ab74
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oapi (0.1.1)
4
+ oapi (0.1.2)
5
5
  zeitwerk (~> 2.6)
6
6
 
7
7
  GEM
@@ -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,24 @@
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
+
13
+ class << self
14
+ def parse(json)
15
+ ref = json[:$ref]
16
+ return OAPI::Ref.new(ref) if ref
17
+
18
+ super
19
+ end
20
+ end
21
+ end
22
+
23
+ item :link, Link
24
+ end
@@ -6,6 +6,8 @@ class OAPI::OpenAPI::V30::Responses < OAPI::Types::Map
6
6
 
7
7
  property :content, OAPI::OpenAPI::V30::Content
8
8
  property :headers, OAPI::OpenAPI::V30::Headers
9
+
10
+ property :links, OAPI::OpenAPI::V30::Links
9
11
  end
10
12
 
11
13
  item :response, Response
@@ -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
- <%= object.class.item_name %>("<%= key %>") do
9
- <%= serialize_if_supported(value) %>
10
- end
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.inspect %>
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
@@ -15,9 +15,13 @@ 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
+ raise ArgumentError, "ref and block are mutual exclusive" if ref && block
22
+
23
+ return @store[key] = OAPI::Ref.new(ref) if ref
24
+
21
25
  @store[key] = type.new(&block)
22
26
  end
23
27
  end
@@ -8,11 +8,11 @@ class OAPI::Types::Object
8
8
  class << self
9
9
  def parse(json)
10
10
  new.tap do |obj|
11
- (properties || []).each do |name, type|
11
+ properties.each do |name, type|
12
12
  value = json[name.camelize]
13
13
  next if value.nil?
14
14
 
15
- value = type.parse(value) if value.is_a?(Hash) || (value.is_a?(Array) && type)
15
+ value = type.parse(value) if type
16
16
  obj.send(name, value)
17
17
  end
18
18
  end
data/lib/oapi/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OAPI
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gleb Sinyavskiy
@@ -50,6 +50,7 @@ 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
55
56
  - lib/oapi/open_api/v30/paths.rb