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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4dcb8f55e33a66045af98794ffb7683361538f73cfb33f5602a9979541ee772d
4
- data.tar.gz: 2d7be42cd44216f877d533404c79ce74e8294ef2622530d0ecbd3a2e1cf21a3e
3
+ metadata.gz: 9cb3780237e228de5aba05e77e13f1e7ad7699a0fa7e0f7650c6a959b533a248
4
+ data.tar.gz: 1f85ba19940b862a3829e02e8db6c10a1fd31028b43771c417578d0fc869c765
5
5
  SHA512:
6
- metadata.gz: d140ad5540fadce4e2a212fec19b40b5b2cb82094566e0dc44c1eec1a1eaa306f2cf8fe1295f09e353811412389526c309cec052221dfe97625ee263d25ea9ca
7
- data.tar.gz: d912b8d7a8db740c79ddb5239931ff376d5f94253a086b86b5f107ee5c1cb415338a84ba4fa1a1e81766e5ac0ba511b3e4cceffb2c95558f0a9efe358337398b
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 [![Build Status](https://travis-ci.org/ngtk/open_api.svg?branch=master)](https://travis-ci.org/ngtk/open_api) [![Maintainability](https://api.codeclimate.com/v1/badges/dc4713a3cb67f6edce65/maintainability)](https://codeclimate.com/github/ngtk/open_api/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/dc4713a3cb67f6edce65/test_coverage)](https://codeclimate.com/github/ngtk/open_api/test_coverage)
1
+ # OpenApi [![Gem Version](https://badge.fury.io/rb/open_api.svg)](https://badge.fury.io/rb/open_api) [![Build Status](https://travis-ci.org/ngtk/open_api.svg?branch=master)](https://travis-ci.org/ngtk/open_api) [![Maintainability](https://api.codeclimate.com/v1/badges/dc4713a3cb67f6edce65/maintainability)](https://codeclimate.com/github/ngtk/open_api/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/dc4713a3cb67f6edce65/test_coverage)](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
 
@@ -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)] }.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,
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
@@ -1,3 +1,3 @@
1
1
  module OpenApi
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.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-07 00:00:00.000000000 Z
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