open_api 0.1.0 → 0.2.0
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/CHANGELOG.md +11 -0
- data/README.md +1 -1
- data/lib/open_api/components.rb +9 -9
- data/lib/open_api/schema.rb +108 -0
- data/lib/open_api/version.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: 9cb3780237e228de5aba05e77e13f1e7ad7699a0fa7e0f7650c6a959b533a248
|
4
|
+
data.tar.gz: 1f85ba19940b862a3829e02e8db6c10a1fd31028b43771c417578d0fc869c765
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4acc8b5ab843a7aa5fa47ec5f528ba4d42851f7577ed02ac797c6940f77e06eb183a43cc2a885dad2451ce96f1631338bffa66b61bdda264c56f45672c79bdd8
|
7
|
+
data.tar.gz: 2487a600e7d723351712d83b0307960a61c1caaad328c57333a52540ee658220418647d8acd9ca226b1c41d9fc0db1aacc0eefa327cd80a6ba5e28b2129e47f0
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
## 0.2.0
|
2
|
+
* Allow Schema to behave like OpenStruct 5a698cf796f0467b726062bcd7c2cf2c20693950
|
3
|
+
* Allow to serialize `schema.properties` fb6f2a0a5d58de7c0bfb113b3a6636a50df7de3d
|
4
|
+
* Fix dir for `open_api/schema` 1e8d9ffcccd89d89844af7eecb418e352ad6b5f3
|
5
|
+
|
6
|
+
|
7
|
+
## 0.1.0
|
8
|
+
First release
|
9
|
+
|
10
|
+
* Implement all classes for OpenAPI v3.0.1
|
11
|
+
* Allow to YAML serializing/deserializing
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# OpenApi [](https://travis-ci.org/ngtk/open_api) [](https://codeclimate.com/github/ngtk/open_api/maintainability) [](https://codeclimate.com/github/ngtk/open_api/test_coverage)
|
1
|
+
# OpenApi [](https://badge.fury.io/rb/open_api) [](https://travis-ci.org/ngtk/open_api) [](https://codeclimate.com/github/ngtk/open_api/maintainability) [](https://codeclimate.com/github/ngtk/open_api/test_coverage)
|
2
2
|
|
3
3
|
`open_api` provides PORO and serializers for OpenAPI and it supports OpenAPI v3.0.1.
|
4
4
|
|
data/lib/open_api/components.rb
CHANGED
@@ -20,15 +20,15 @@ module OpenApi
|
|
20
20
|
return unless hash
|
21
21
|
|
22
22
|
new(
|
23
|
-
schemas: hash["schemas"]&.map { |k, v| [k, Reference.load(v) || Schema.load(v)] }
|
24
|
-
responses: hash["responses"]&.map { |k, v| [k, Reference.load(v) || Response.load(v)] }
|
25
|
-
parameters: hash["parameters"]&.map { |k, v| [k, Reference.load(v) || Parameter.load(v)] }
|
26
|
-
examples: hash["examples"]&.map { |k, v| [k, Reference.load(v) || Example.load(v)] }
|
27
|
-
request_bodies: hash["requestBodies"]&.map { |k, v| [k, Reference.load(v) || RequestBody.load(v)] }
|
28
|
-
headers: hash["headers"]&.map { |k, v| [k, Reference.load(v) || Header.load(v)] }
|
29
|
-
security_schemes: hash["securitySchemes"]&.map { |k, v| [k, Reference.load(v) || SecuritySchema.load(v)] }
|
30
|
-
links: hash["links"]&.map { |k, v| [k, Reference.load(v) || Link.load(v)] }
|
31
|
-
callbacks: hash["callbacks"]&.map { |k, v| [k, Reference.load(v) || Callback.load(v)] }
|
23
|
+
schemas: hash["schemas"]&.map { |k, v| [k, Reference.load(v) || Schema.load(v)] }&.to_h,
|
24
|
+
responses: hash["responses"]&.map { |k, v| [k, Reference.load(v) || Response.load(v)] }&.to_h,
|
25
|
+
parameters: hash["parameters"]&.map { |k, v| [k, Reference.load(v) || Parameter.load(v)] }&.to_h,
|
26
|
+
examples: hash["examples"]&.map { |k, v| [k, Reference.load(v) || Example.load(v)] }&.to_h,
|
27
|
+
request_bodies: hash["requestBodies"]&.map { |k, v| [k, Reference.load(v) || RequestBody.load(v)] }&.to_h,
|
28
|
+
headers: hash["headers"]&.map { |k, v| [k, Reference.load(v) || Header.load(v)] }&.to_h,
|
29
|
+
security_schemes: hash["securitySchemes"]&.map { |k, v| [k, Reference.load(v) || SecuritySchema.load(v)] }&.to_h,
|
30
|
+
links: hash["links"]&.map { |k, v| [k, Reference.load(v) || Link.load(v)] }&.to_h,
|
31
|
+
callbacks: hash["callbacks"]&.map { |k, v| [k, Reference.load(v) || Callback.load(v)] }&.to_h,
|
32
32
|
)
|
33
33
|
end
|
34
34
|
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
module OpenApi
|
2
|
+
class Schema
|
3
|
+
prepend EquatableAsContent
|
4
|
+
|
5
|
+
attr_accessor :nullable, :discriminator, :read_only, :write_only, :xml, :external_docs, :example, :deprecated
|
6
|
+
|
7
|
+
def initialize(nullable: false, discriminator: nil, read_only: false, write_only: false, xml: nil, external_docs: nil, example: nil, deprecated: false, **other_fields_hash)
|
8
|
+
self.nullable = nullable
|
9
|
+
self.discriminator = discriminator
|
10
|
+
self.read_only = read_only
|
11
|
+
self.write_only = write_only
|
12
|
+
self.xml = xml
|
13
|
+
self.external_docs = external_docs
|
14
|
+
self.example = example
|
15
|
+
self.deprecated = deprecated
|
16
|
+
self.other_fields_hash = other_fields_hash.symbolize_keys
|
17
|
+
|
18
|
+
other_fields_hash.keys.each { |name| new_field(name) }
|
19
|
+
end
|
20
|
+
|
21
|
+
def method_missing(mid, *args)
|
22
|
+
len = args.length
|
23
|
+
if mname = mid[/.*(?==\z)/m]
|
24
|
+
if len != 1
|
25
|
+
raise ArgumentError, "wrong number of arguments (#{len} for 1)", caller(1)
|
26
|
+
end
|
27
|
+
new_field(mname)
|
28
|
+
other_fields_hash[mname.to_sym] = args[0]
|
29
|
+
elsif len == 0
|
30
|
+
if other_fields_hash.key?(mname.to_s)
|
31
|
+
new_field(mname)
|
32
|
+
other_fields_hash[mname]
|
33
|
+
end
|
34
|
+
else
|
35
|
+
begin
|
36
|
+
super
|
37
|
+
rescue NoMethodError => err
|
38
|
+
err.backtrace.shift
|
39
|
+
raise
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def new_field(name)
|
45
|
+
name = name.to_sym
|
46
|
+
define_singleton_method(name) { other_fields_hash[name] }
|
47
|
+
define_singleton_method("#{name}=") { |value| other_fields_hash[name] = value }
|
48
|
+
end
|
49
|
+
|
50
|
+
def serializable_hash
|
51
|
+
converted_other_fields_hash = other_fields_hash.map { |k, v|
|
52
|
+
value =
|
53
|
+
case k.to_sym
|
54
|
+
when :items then v.serializable_hash
|
55
|
+
when :properties then v.map { |k, v| [k.to_s, v.serializable_hash] }.to_h
|
56
|
+
else
|
57
|
+
v
|
58
|
+
end
|
59
|
+
[k.to_s, value]
|
60
|
+
}.to_h
|
61
|
+
|
62
|
+
{
|
63
|
+
"nullable" => nullable == false ? nil : nullable,
|
64
|
+
"discriminator" => discriminator&.serializable_hash,
|
65
|
+
"readOnly" => read_only == false ? nil : read_only,
|
66
|
+
"writeOnly" => write_only == false ? nil : write_only,
|
67
|
+
"xml" => xml&.serializable_hash,
|
68
|
+
"externalDocs" => external_docs&.serializable_hash,
|
69
|
+
"example" => example,
|
70
|
+
"deprecated" => deprecated == false ? nil : deprecated,
|
71
|
+
}
|
72
|
+
.merge(converted_other_fields_hash)
|
73
|
+
.compact
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.load(hash)
|
77
|
+
other_fields_hash = hash.reject { |key|
|
78
|
+
key.to_sym.in?([:nullable, :discriminator, :readOnly, :writeOnly, :xml, :externalDocs, :example, :deprecated])
|
79
|
+
}.map { |k, v|
|
80
|
+
loaded_value =
|
81
|
+
case k.to_sym
|
82
|
+
when :items then Reference.load(v)
|
83
|
+
when :properties then v.map { |k, v| [k, Reference.new(v) || Schema.new(v)] }.to_h
|
84
|
+
else
|
85
|
+
v
|
86
|
+
end
|
87
|
+
|
88
|
+
[k, loaded_value]
|
89
|
+
}.to_h
|
90
|
+
|
91
|
+
new(
|
92
|
+
nullable: hash["nullable"].nil? ? false : hash["nullable"],
|
93
|
+
discriminator: hash["discriminator"],
|
94
|
+
read_only: hash["readOnly"].nil? ? false : hash["readOnly"],
|
95
|
+
write_only: hash["writeOnly"].nil? ? false : hash["writeOnly"],
|
96
|
+
xml: Xml.load(hash["xml"]),
|
97
|
+
external_docs: ExternalDocumentation.load(hash["externalDocs"]),
|
98
|
+
example: Example.load(hash["example"]),
|
99
|
+
deprecated: hash["deprecated"].nil? ? false : hash["deprecated"],
|
100
|
+
**other_fields_hash.symbolize_keys,
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
attr_accessor :other_fields_hash
|
107
|
+
end
|
108
|
+
end
|
data/lib/open_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: open_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kent Nagata
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -105,6 +105,7 @@ files:
|
|
105
105
|
- ".rspec"
|
106
106
|
- ".ruby-version"
|
107
107
|
- ".travis.yml"
|
108
|
+
- CHANGELOG.md
|
108
109
|
- CODE_OF_CONDUCT.md
|
109
110
|
- Gemfile
|
110
111
|
- LICENSE.txt
|
@@ -136,6 +137,7 @@ files:
|
|
136
137
|
- lib/open_api/request_body.rb
|
137
138
|
- lib/open_api/response.rb
|
138
139
|
- lib/open_api/responses.rb
|
140
|
+
- lib/open_api/schema.rb
|
139
141
|
- lib/open_api/security_requirement.rb
|
140
142
|
- lib/open_api/security_schema.rb
|
141
143
|
- lib/open_api/serializers.rb
|