oapi 0.1.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37dbb0c32ad9fbb1b11e79026bfb3dc6264d33e2f7f37e86415b8db74b4d2139
4
- data.tar.gz: 769f5aa94adce67c2dd25386fde708ededd589cbfb04505b6dfb87ca76c9210b
3
+ metadata.gz: 51585744c9a5a8787b4cbc8235ca2f613fdad0fc8d28aea14ad8242b2d39d107
4
+ data.tar.gz: b68db8b06768f24ead377f085cd5cb546aba3a9912ebe550229f3ca037621621
5
5
  SHA512:
6
- metadata.gz: cb093caf6f99bafff9e46bd00f08f8b761f3af8fafb7acf8996bb615ac69fcc377303431d82918925fbb30747ede4e2640996dc3aa1a76621a66dc85f2265a96
7
- data.tar.gz: cabca79f246baaf09a41dee4991ee08ea8289f3b9c12d7838416e5d0e0c59800eb4190dd44afa92bdd4405f178d613136bd69b0a7cdf5e90c723fe502945ab74
6
+ metadata.gz: 96f581933db469a307cfe53e22611a5821540d1b6fdadb77d9e81ab70deaf2097c748108c559105ca0bab6c6097f8d80baeb4d0f36f63ad50fb3709e7d06c0af
7
+ data.tar.gz: a2ea340668ebd92716f3434094ae809e5c8c25f1e07e0fe6fc329f225c88125c2d62cb35c378f388ae9e1ab755ed88adf86d5a084f080544eb2960298512f9e6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oapi (0.1.2)
4
+ oapi (0.1.3)
5
5
  zeitwerk (~> 2.6)
6
6
 
7
7
  GEM
@@ -9,15 +9,6 @@ class OAPI::OpenAPI::V30::Links < OAPI::Types::Map
9
9
 
10
10
  property :parameters # TODO: a custom type? https://spec.openapis.org/oas/v3.0.3#fixed-fields-16
11
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
12
  end
22
13
 
23
14
  item :link, Link
@@ -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
data/lib/oapi/schema.rb CHANGED
@@ -6,13 +6,4 @@ class OAPI::Schema
6
6
  def initialize
7
7
  @schema = yield if block_given?
8
8
  end
9
-
10
- class << self
11
- def parse(json)
12
- ref = json[:$ref]
13
- return OAPI::Ref.new(ref) if ref
14
-
15
- new { json }
16
- end
17
- end
18
9
  end
@@ -19,7 +19,5 @@ class OAPI::Types::Array < OAPI::Types::Object
19
19
  @store << type.new(&block)
20
20
  end
21
21
  end
22
-
23
- def parse(json) = new(json.map { item_type.parse(_1) })
24
22
  end
25
23
  end
@@ -25,12 +25,5 @@ class OAPI::Types::Map < OAPI::Types::Object
25
25
  @store[key] = type.new(&block)
26
26
  end
27
27
  end
28
-
29
- def parse(json)
30
- store = json.transform_values do |value|
31
- item_type ? item_type.parse(value) : value
32
- end
33
- new(store)
34
- end
35
28
  end
36
29
  end
@@ -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 type
16
- obj.send(name, value)
17
- end
18
- end
19
- end
20
- end
21
5
  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.2"
4
+ VERSION = "0.1.3"
5
5
  end
data/lib/oapi.rb CHANGED
@@ -34,7 +34,7 @@ module OAPI
34
34
  version = json[:openapi]
35
35
  raise UnsupportedSpecVersion, "unsupported version #{version}" unless version.start_with?("3.0")
36
36
 
37
- OAPI::OpenAPI::V30::Definition.parse(json)
37
+ OAPI::OpenAPI::V30::Parsers::JSON.parse(json)
38
38
  end
39
39
  end
40
40
  end
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.2
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-06-24 00:00:00.000000000 Z
11
+ date: 2024-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zeitwerk
@@ -53,6 +53,7 @@ files:
53
53
  - lib/oapi/open_api/v30/links.rb
54
54
  - lib/oapi/open_api/v30/media_type.rb
55
55
  - lib/oapi/open_api/v30/parameters.rb
56
+ - lib/oapi/open_api/v30/parsers/json.rb
56
57
  - lib/oapi/open_api/v30/paths.rb
57
58
  - lib/oapi/open_api/v30/request_body.rb
58
59
  - lib/oapi/open_api/v30/responses.rb