scorpio 0.4.6 → 0.5.0

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: fd6bf8a01d7e8ff5fef4497289d88467ba1e6f7324d135b673c94eb3b225a9a1
4
- data.tar.gz: e41e75c382b78db5a8fafeb5bcfba6f04036be3f553eda53f165963dbccb5091
3
+ metadata.gz: 2ef095c64774f95040582a9945d63cb2e58685403b66d49a9df1ec8976c5d12b
4
+ data.tar.gz: 777af82e020ab367e4280f10995b0aa84648782a157bc925529132c79e0b57d6
5
5
  SHA512:
6
- metadata.gz: 4407bfac236b2f1428d1936dd82def48bceacaa8e547a33d1444b1c078eb8d66bb72fe61ff12aa4e36a26c9cb39320289410b7b4de67a2eb29a445a906088b02
7
- data.tar.gz: 52118d637491780db6da22a5a774fff56df0dbf6863520a972ea72f636287b4461c679718da582f93d385f92cfe42686f191931f4c7d06208a51f26d7cf267c7
6
+ metadata.gz: 10fc95d393931ac8931c16bbe12dd62366e73480dc7ac5fa7c38efe8ab21cf49506eb659b0734bc3848df1a4994795adb6eb15302c3e3d942051ebe74f92dc09
7
+ data.tar.gz: e1ebe65228ca3412b24fedf99d0fbf84cd46acea560d09b32fc54a6142308fbfa088b471e65a0128b0ebffa1b1b4f5a3143be8c7f5b823a8c19c1d02eaaf5054
@@ -1,3 +1,6 @@
1
+ # v0.5.0
2
+ - JSI schema classes change to schema modules, JSI instances may have multiple schemas (JSI v0.4, Ur v0.2)
3
+
1
4
  # v0.4.6
2
5
  - JSI v0.3.0
3
6
  - Scorpio::OpenAPI::SchemaReference represents a schema reference
data/README.md CHANGED
@@ -262,6 +262,6 @@ The detailed, machine-interpretable description of an API provided by a properly
262
262
 
263
263
  [<img align="right" src="https://github.com/notEthan/scorpio/raw/master/resources/icons/AGPL-3.0.png">](https://www.gnu.org/licenses/agpl-3.0.html)
264
264
 
265
- Scorpio is Open Source Software licensed under the terms of the [GNU Affero General Public License version 3](https://www.gnu.org/licenses/agpl-3.0.html).
265
+ Scorpio is licensed under the terms of the [GNU Affero General Public License version 3](https://www.gnu.org/licenses/agpl-3.0.html).
266
266
 
267
267
  Unlike the MIT or BSD licenses more commonly used with Ruby gems, this license requires that if you modify Scorpio and propagate your changes, e.g. by including it in a web application, your modified version must be publicly available. The common path of forking on Github should satisfy this requirement.
@@ -4,13 +4,20 @@ module Scorpio
4
4
  discovery_rest_description = JSI::MetaschemaNode.new(discovery_rest_description_doc, metaschema_root_ptr: JSI::JSON::Pointer['schemas']['JsonSchema'], root_schema_ptr: JSI::JSON::Pointer['schemas']['RestDescription'])
5
5
 
6
6
  # naming these is not strictly necessary, but is nice to have.
7
- DirectoryList = JSI.class_for_schema(discovery_rest_description['schemas']['DirectoryList'])
8
- JsonSchema = JSI.class_for_schema(discovery_rest_description['schemas']['JsonSchema'])
9
- RestDescription = JSI.class_for_schema(discovery_rest_description['schemas']['RestDescription'])
10
- RestMethod = JSI.class_for_schema(discovery_rest_description['schemas']['RestMethod'])
11
- RestResource = JSI.class_for_schema(discovery_rest_description['schemas']['RestResource'])
12
- RestMethodRequest = JSI.class_for_schema(discovery_rest_description['schemas']['RestMethod']['properties']['request'])
13
- RestMethodResponse = JSI.class_for_schema(discovery_rest_description['schemas']['RestMethod']['properties']['response'])
7
+ DirectoryList = discovery_rest_description.schemas['DirectoryList'].jsi_schema_module
8
+ JsonSchema = discovery_rest_description.schemas['JsonSchema'].jsi_schema_module
9
+ RestDescription = discovery_rest_description.schemas['RestDescription'].jsi_schema_module
10
+ RestMethod = discovery_rest_description.schemas['RestMethod'].jsi_schema_module
11
+ RestResource = discovery_rest_description.schemas['RestResource'].jsi_schema_module
12
+
13
+ module RestDescription
14
+ Resources = properties['resources']
15
+ end
16
+
17
+ module RestMethod
18
+ Request = properties['request']
19
+ Response = properties['response']
20
+ end
14
21
 
15
22
  # google does a weird thing where it defines a schema with a $ref property where a json-schema is to be used in the document (method request and response fields), instead of just setting the schema to be the json-schema schema. we'll share a module across those schema classes that really represent schemas. is this confusingly meta enough?
16
23
  module SchemaLike
@@ -33,9 +40,9 @@ module Scorpio
33
40
  dup_doc
34
41
  end
35
42
  end
36
- [JsonSchema, RestMethodRequest, RestMethodResponse].each { |klass| klass.send(:include, SchemaLike) }
43
+ [JsonSchema, RestMethod::Request, RestMethod::Response].each { |m| m.send(:include, SchemaLike) }
37
44
 
38
- class RestDescription
45
+ module RestDescription
39
46
  def to_openapi_document(options = {})
40
47
  Scorpio::OpenAPI::Document.from_instance(to_openapi_hash(options))
41
48
  end
@@ -19,75 +19,72 @@ module Scorpio
19
19
 
20
20
  module V3
21
21
  openapi_schema = JSI::Schema.new(::YAML.load_file(Scorpio.root.join('documents/github.com/OAI/OpenAPI-Specification/blob/oas3-schema/schemas/v3.0/schema.yaml')))
22
- openapi_class = proc do |*key|
23
- JSI.class_for_schema(key.inject(openapi_schema, &:[]))
24
- end
25
22
 
26
- Document = openapi_class.call()
23
+ Document = openapi_schema.jsi_schema_module
27
24
 
28
25
  # naming these is not strictly necessary, but is nice to have.
29
- # generated: `puts JSI::Schema.new(::YAML.load_file(Scorpio.root.join('documents/github.com/OAI/OpenAPI-Specification/blob/oas3-schema/schemas/v3.0/schema.yaml')))['definitions'].select { |k,v| ['object', nil].include?(v['type']) }.keys.map { |k| "#{k[0].upcase}#{k[1..-1]} = openapi_class.call('definitions', '#{k}')" }`
30
- Reference = openapi_class.call('definitions', 'Reference')
31
- SchemaReference = openapi_class.call('definitions', 'SchemaReference')
32
- Info = openapi_class.call('definitions', 'Info')
33
- Contact = openapi_class.call('definitions', 'Contact')
34
- License = openapi_class.call('definitions', 'License')
35
- Server = openapi_class.call('definitions', 'Server')
36
- ServerVariable = openapi_class.call('definitions', 'ServerVariable')
37
- Components = openapi_class.call('definitions', 'Components')
38
- Schema = openapi_class.call('definitions', 'Schema')
39
- Discriminator = openapi_class.call('definitions', 'Discriminator')
40
- XML = openapi_class.call('definitions', 'XML')
41
- Response = openapi_class.call('definitions', 'Response')
42
- MediaType = openapi_class.call('definitions', 'MediaType')
43
- MediaTypeWithExample = openapi_class.call('definitions', 'MediaTypeWithExample')
44
- MediaTypeWithExamples = openapi_class.call('definitions', 'MediaTypeWithExamples')
45
- Example = openapi_class.call('definitions', 'Example')
46
- Header = openapi_class.call('definitions', 'Header')
47
- HeaderWithSchema = openapi_class.call('definitions', 'HeaderWithSchema')
48
- HeaderWithSchemaWithExample = openapi_class.call('definitions', 'HeaderWithSchemaWithExample')
49
- HeaderWithSchemaWithExamples = openapi_class.call('definitions', 'HeaderWithSchemaWithExamples')
50
- HeaderWithContent = openapi_class.call('definitions', 'HeaderWithContent')
51
- Paths = openapi_class.call('definitions', 'Paths')
52
- PathItem = openapi_class.call('definitions', 'PathItem')
53
- Operation = openapi_class.call('definitions', 'Operation')
54
- Responses = openapi_class.call('definitions', 'Responses')
55
- SecurityRequirement = openapi_class.call('definitions', 'SecurityRequirement')
56
- Tag = openapi_class.call('definitions', 'Tag')
57
- ExternalDocumentation = openapi_class.call('definitions', 'ExternalDocumentation')
58
- Parameter = openapi_class.call('definitions', 'Parameter')
59
- ParameterWithSchema = openapi_class.call('definitions', 'ParameterWithSchema')
60
- ParameterWithSchemaWithExample = openapi_class.call('definitions', 'ParameterWithSchemaWithExample')
61
- ParameterWithSchemaWithExampleInPath = openapi_class.call('definitions', 'ParameterWithSchemaWithExampleInPath')
62
- ParameterWithSchemaWithExampleInQuery = openapi_class.call('definitions', 'ParameterWithSchemaWithExampleInQuery')
63
- ParameterWithSchemaWithExampleInHeader = openapi_class.call('definitions', 'ParameterWithSchemaWithExampleInHeader')
64
- ParameterWithSchemaWithExampleInCookie = openapi_class.call('definitions', 'ParameterWithSchemaWithExampleInCookie')
65
- ParameterWithSchemaWithExamples = openapi_class.call('definitions', 'ParameterWithSchemaWithExamples')
66
- ParameterWithSchemaWithExamplesInPath = openapi_class.call('definitions', 'ParameterWithSchemaWithExamplesInPath')
67
- ParameterWithSchemaWithExamplesInQuery = openapi_class.call('definitions', 'ParameterWithSchemaWithExamplesInQuery')
68
- ParameterWithSchemaWithExamplesInHeader = openapi_class.call('definitions', 'ParameterWithSchemaWithExamplesInHeader')
69
- ParameterWithSchemaWithExamplesInCookie = openapi_class.call('definitions', 'ParameterWithSchemaWithExamplesInCookie')
70
- ParameterWithContent = openapi_class.call('definitions', 'ParameterWithContent')
71
- ParameterWithContentInPath = openapi_class.call('definitions', 'ParameterWithContentInPath')
72
- ParameterWithContentNotInPath = openapi_class.call('definitions', 'ParameterWithContentNotInPath')
73
- RequestBody = openapi_class.call('definitions', 'RequestBody')
74
- SecurityScheme = openapi_class.call('definitions', 'SecurityScheme')
75
- APIKeySecurityScheme = openapi_class.call('definitions', 'APIKeySecurityScheme')
76
- HTTPSecurityScheme = openapi_class.call('definitions', 'HTTPSecurityScheme')
77
- NonBearerHTTPSecurityScheme = openapi_class.call('definitions', 'NonBearerHTTPSecurityScheme')
78
- BearerHTTPSecurityScheme = openapi_class.call('definitions', 'BearerHTTPSecurityScheme')
79
- OAuth2SecurityScheme = openapi_class.call('definitions', 'OAuth2SecurityScheme')
80
- OpenIdConnectSecurityScheme = openapi_class.call('definitions', 'OpenIdConnectSecurityScheme')
81
- OAuthFlows = openapi_class.call('definitions', 'OAuthFlows')
82
- ImplicitOAuthFlow = openapi_class.call('definitions', 'ImplicitOAuthFlow')
83
- PasswordOAuthFlow = openapi_class.call('definitions', 'PasswordOAuthFlow')
84
- ClientCredentialsFlow = openapi_class.call('definitions', 'ClientCredentialsFlow')
85
- AuthorizationCodeOAuthFlow = openapi_class.call('definitions', 'AuthorizationCodeOAuthFlow')
86
- Link = openapi_class.call('definitions', 'Link')
87
- LinkWithOperationRef = openapi_class.call('definitions', 'LinkWithOperationRef')
88
- LinkWithOperationId = openapi_class.call('definitions', 'LinkWithOperationId')
89
- Callback = openapi_class.call('definitions', 'Callback')
90
- Encoding = openapi_class.call('definitions', 'Encoding')
26
+ # generated: `puts JSI::Schema.new(::YAML.load_file(Scorpio.root.join('documents/github.com/OAI/OpenAPI-Specification/blob/oas3-schema/schemas/v3.0/schema.yaml')))['definitions'].select { |k,v| ['object', nil].include?(v['type']) }.keys.map { |k| "#{k[0].upcase}#{k[1..-1]} = Document.definitions['#{k}']" }`
27
+ Reference = Document.definitions['Reference']
28
+ SchemaReference = Document.definitions['SchemaReference']
29
+ Info = Document.definitions['Info']
30
+ Contact = Document.definitions['Contact']
31
+ License = Document.definitions['License']
32
+ Server = Document.definitions['Server']
33
+ ServerVariable = Document.definitions['ServerVariable']
34
+ Components = Document.definitions['Components']
35
+ Schema = Document.definitions['Schema']
36
+ Discriminator = Document.definitions['Discriminator']
37
+ XML = Document.definitions['XML']
38
+ Response = Document.definitions['Response']
39
+ MediaType = Document.definitions['MediaType']
40
+ MediaTypeWithExample = Document.definitions['MediaTypeWithExample']
41
+ MediaTypeWithExamples = Document.definitions['MediaTypeWithExamples']
42
+ Example = Document.definitions['Example']
43
+ Header = Document.definitions['Header']
44
+ HeaderWithSchema = Document.definitions['HeaderWithSchema']
45
+ HeaderWithSchemaWithExample = Document.definitions['HeaderWithSchemaWithExample']
46
+ HeaderWithSchemaWithExamples = Document.definitions['HeaderWithSchemaWithExamples']
47
+ HeaderWithContent = Document.definitions['HeaderWithContent']
48
+ Paths = Document.definitions['Paths']
49
+ PathItem = Document.definitions['PathItem']
50
+ Operation = Document.definitions['Operation']
51
+ Responses = Document.definitions['Responses']
52
+ SecurityRequirement = Document.definitions['SecurityRequirement']
53
+ Tag = Document.definitions['Tag']
54
+ ExternalDocumentation = Document.definitions['ExternalDocumentation']
55
+ Parameter = Document.definitions['Parameter']
56
+ ParameterWithSchema = Document.definitions['ParameterWithSchema']
57
+ ParameterWithSchemaWithExample = Document.definitions['ParameterWithSchemaWithExample']
58
+ ParameterWithSchemaWithExampleInPath = Document.definitions['ParameterWithSchemaWithExampleInPath']
59
+ ParameterWithSchemaWithExampleInQuery = Document.definitions['ParameterWithSchemaWithExampleInQuery']
60
+ ParameterWithSchemaWithExampleInHeader = Document.definitions['ParameterWithSchemaWithExampleInHeader']
61
+ ParameterWithSchemaWithExampleInCookie = Document.definitions['ParameterWithSchemaWithExampleInCookie']
62
+ ParameterWithSchemaWithExamples = Document.definitions['ParameterWithSchemaWithExamples']
63
+ ParameterWithSchemaWithExamplesInPath = Document.definitions['ParameterWithSchemaWithExamplesInPath']
64
+ ParameterWithSchemaWithExamplesInQuery = Document.definitions['ParameterWithSchemaWithExamplesInQuery']
65
+ ParameterWithSchemaWithExamplesInHeader = Document.definitions['ParameterWithSchemaWithExamplesInHeader']
66
+ ParameterWithSchemaWithExamplesInCookie = Document.definitions['ParameterWithSchemaWithExamplesInCookie']
67
+ ParameterWithContent = Document.definitions['ParameterWithContent']
68
+ ParameterWithContentInPath = Document.definitions['ParameterWithContentInPath']
69
+ ParameterWithContentNotInPath = Document.definitions['ParameterWithContentNotInPath']
70
+ RequestBody = Document.definitions['RequestBody']
71
+ SecurityScheme = Document.definitions['SecurityScheme']
72
+ APIKeySecurityScheme = Document.definitions['APIKeySecurityScheme']
73
+ HTTPSecurityScheme = Document.definitions['HTTPSecurityScheme']
74
+ NonBearerHTTPSecurityScheme = Document.definitions['NonBearerHTTPSecurityScheme']
75
+ BearerHTTPSecurityScheme = Document.definitions['BearerHTTPSecurityScheme']
76
+ OAuth2SecurityScheme = Document.definitions['OAuth2SecurityScheme']
77
+ OpenIdConnectSecurityScheme = Document.definitions['OpenIdConnectSecurityScheme']
78
+ OAuthFlows = Document.definitions['OAuthFlows']
79
+ ImplicitOAuthFlow = Document.definitions['ImplicitOAuthFlow']
80
+ PasswordOAuthFlow = Document.definitions['PasswordOAuthFlow']
81
+ ClientCredentialsFlow = Document.definitions['ClientCredentialsFlow']
82
+ AuthorizationCodeOAuthFlow = Document.definitions['AuthorizationCodeOAuthFlow']
83
+ Link = Document.definitions['Link']
84
+ LinkWithOperationRef = Document.definitions['LinkWithOperationRef']
85
+ LinkWithOperationId = Document.definitions['LinkWithOperationId']
86
+ Callback = Document.definitions['Callback']
87
+ Encoding = Document.definitions['Encoding']
91
88
 
92
89
  # the schema of Scorpio::OpenAPI::V3::Schema describes a schema itself, so we extend it
93
90
  # with the module indicating that.
@@ -96,68 +93,65 @@ module Scorpio
96
93
  end
97
94
  module V2
98
95
  openapi_schema = JSI::Schema.new(::JSON.parse(Scorpio.root.join('documents/swagger.io/v2/schema.json').read))
99
- openapi_class = proc do |*key|
100
- JSI.class_for_schema(key.inject(openapi_schema, &:[]))
101
- end
102
96
 
103
- Document = openapi_class.call()
97
+ Document = openapi_schema.jsi_schema_module
104
98
 
105
99
  # naming these is not strictly necessary, but is nice to have.
106
- # generated: `puts Scorpio::OpenAPI::V2::Document.schema['definitions'].select { |k,v| ['object', nil].include?(v['type']) }.keys.map { |k| "#{k[0].upcase}#{k[1..-1]} = openapi_class.call('definitions', '#{k}')" }`
107
- Info = openapi_class.call('definitions', 'info')
108
- Contact = openapi_class.call('definitions', 'contact')
109
- License = openapi_class.call('definitions', 'license')
110
- Paths = openapi_class.call('definitions', 'paths')
111
- Definitions = openapi_class.call('definitions', 'definitions')
112
- ParameterDefinitions = openapi_class.call('definitions', 'parameterDefinitions')
113
- ResponseDefinitions = openapi_class.call('definitions', 'responseDefinitions')
114
- ExternalDocs = openapi_class.call('definitions', 'externalDocs')
115
- Examples = openapi_class.call('definitions', 'examples')
116
- Operation = openapi_class.call('definitions', 'operation')
117
- PathItem = openapi_class.call('definitions', 'pathItem')
118
- Responses = openapi_class.call('definitions', 'responses')
119
- ResponseValue = openapi_class.call('definitions', 'responseValue')
120
- Response = openapi_class.call('definitions', 'response')
121
- Headers = openapi_class.call('definitions', 'headers')
122
- Header = openapi_class.call('definitions', 'header')
123
- VendorExtension = openapi_class.call('definitions', 'vendorExtension')
124
- BodyParameter = openapi_class.call('definitions', 'bodyParameter')
125
- HeaderParameterSubSchema = openapi_class.call('definitions', 'headerParameterSubSchema')
126
- QueryParameterSubSchema = openapi_class.call('definitions', 'queryParameterSubSchema')
127
- FormDataParameterSubSchema = openapi_class.call('definitions', 'formDataParameterSubSchema')
128
- PathParameterSubSchema = openapi_class.call('definitions', 'pathParameterSubSchema')
129
- NonBodyParameter = openapi_class.call('definitions', 'nonBodyParameter')
130
- Parameter = openapi_class.call('definitions', 'parameter')
131
- Schema = openapi_class.call('definitions', 'schema')
132
- FileSchema = openapi_class.call('definitions', 'fileSchema')
133
- PrimitivesItems = openapi_class.call('definitions', 'primitivesItems')
134
- SecurityRequirement = openapi_class.call('definitions', 'securityRequirement')
135
- Xml = openapi_class.call('definitions', 'xml')
136
- Tag = openapi_class.call('definitions', 'tag')
137
- SecurityDefinitions = openapi_class.call('definitions', 'securityDefinitions')
138
- BasicAuthenticationSecurity = openapi_class.call('definitions', 'basicAuthenticationSecurity')
139
- ApiKeySecurity = openapi_class.call('definitions', 'apiKeySecurity')
140
- Oauth2ImplicitSecurity = openapi_class.call('definitions', 'oauth2ImplicitSecurity')
141
- Oauth2PasswordSecurity = openapi_class.call('definitions', 'oauth2PasswordSecurity')
142
- Oauth2ApplicationSecurity = openapi_class.call('definitions', 'oauth2ApplicationSecurity')
143
- Oauth2AccessCodeSecurity = openapi_class.call('definitions', 'oauth2AccessCodeSecurity')
144
- Oauth2Scopes = openapi_class.call('definitions', 'oauth2Scopes')
145
- Title = openapi_class.call('definitions', 'title')
146
- Description = openapi_class.call('definitions', 'description')
147
- Default = openapi_class.call('definitions', 'default')
148
- MultipleOf = openapi_class.call('definitions', 'multipleOf')
149
- Maximum = openapi_class.call('definitions', 'maximum')
150
- ExclusiveMaximum = openapi_class.call('definitions', 'exclusiveMaximum')
151
- Minimum = openapi_class.call('definitions', 'minimum')
152
- ExclusiveMinimum = openapi_class.call('definitions', 'exclusiveMinimum')
153
- MaxLength = openapi_class.call('definitions', 'maxLength')
154
- MinLength = openapi_class.call('definitions', 'minLength')
155
- Pattern = openapi_class.call('definitions', 'pattern')
156
- MaxItems = openapi_class.call('definitions', 'maxItems')
157
- MinItems = openapi_class.call('definitions', 'minItems')
158
- UniqueItems = openapi_class.call('definitions', 'uniqueItems')
159
- Enum = openapi_class.call('definitions', 'enum')
160
- JsonReference = openapi_class.call('definitions', 'jsonReference')
100
+ # generated: `puts JSI::Schema.new(::JSON.parse(Scorpio.root.join('documents/swagger.io/v2/schema.json').read))['definitions'].select { |k,v| ['object', nil].include?(v['type']) }.keys.map { |k| "#{k[0].upcase}#{k[1..-1]} = Document.definitions['#{k}']" }`
101
+ Info = Document.definitions['info']
102
+ Contact = Document.definitions['contact']
103
+ License = Document.definitions['license']
104
+ Paths = Document.definitions['paths']
105
+ Definitions = Document.definitions['definitions']
106
+ ParameterDefinitions = Document.definitions['parameterDefinitions']
107
+ ResponseDefinitions = Document.definitions['responseDefinitions']
108
+ ExternalDocs = Document.definitions['externalDocs']
109
+ Examples = Document.definitions['examples']
110
+ Operation = Document.definitions['operation']
111
+ PathItem = Document.definitions['pathItem']
112
+ Responses = Document.definitions['responses']
113
+ ResponseValue = Document.definitions['responseValue']
114
+ Response = Document.definitions['response']
115
+ Headers = Document.definitions['headers']
116
+ Header = Document.definitions['header']
117
+ VendorExtension = Document.definitions['vendorExtension']
118
+ BodyParameter = Document.definitions['bodyParameter']
119
+ HeaderParameterSubSchema = Document.definitions['headerParameterSubSchema']
120
+ QueryParameterSubSchema = Document.definitions['queryParameterSubSchema']
121
+ FormDataParameterSubSchema = Document.definitions['formDataParameterSubSchema']
122
+ PathParameterSubSchema = Document.definitions['pathParameterSubSchema']
123
+ NonBodyParameter = Document.definitions['nonBodyParameter']
124
+ Parameter = Document.definitions['parameter']
125
+ Schema = Document.definitions['schema']
126
+ FileSchema = Document.definitions['fileSchema']
127
+ PrimitivesItems = Document.definitions['primitivesItems']
128
+ SecurityRequirement = Document.definitions['securityRequirement']
129
+ Xml = Document.definitions['xml']
130
+ Tag = Document.definitions['tag']
131
+ SecurityDefinitions = Document.definitions['securityDefinitions']
132
+ BasicAuthenticationSecurity = Document.definitions['basicAuthenticationSecurity']
133
+ ApiKeySecurity = Document.definitions['apiKeySecurity']
134
+ Oauth2ImplicitSecurity = Document.definitions['oauth2ImplicitSecurity']
135
+ Oauth2PasswordSecurity = Document.definitions['oauth2PasswordSecurity']
136
+ Oauth2ApplicationSecurity = Document.definitions['oauth2ApplicationSecurity']
137
+ Oauth2AccessCodeSecurity = Document.definitions['oauth2AccessCodeSecurity']
138
+ Oauth2Scopes = Document.definitions['oauth2Scopes']
139
+ Title = Document.definitions['title']
140
+ Description = Document.definitions['description']
141
+ Default = Document.definitions['default']
142
+ MultipleOf = Document.definitions['multipleOf']
143
+ Maximum = Document.definitions['maximum']
144
+ ExclusiveMaximum = Document.definitions['exclusiveMaximum']
145
+ Minimum = Document.definitions['minimum']
146
+ ExclusiveMinimum = Document.definitions['exclusiveMinimum']
147
+ MaxLength = Document.definitions['maxLength']
148
+ MinLength = Document.definitions['minLength']
149
+ Pattern = Document.definitions['pattern']
150
+ MaxItems = Document.definitions['maxItems']
151
+ MinItems = Document.definitions['minItems']
152
+ UniqueItems = Document.definitions['uniqueItems']
153
+ Enum = Document.definitions['enum']
154
+ JsonReference = Document.definitions['jsonReference']
161
155
 
162
156
  # the schema of Scorpio::OpenAPI::V2::Schema describes a schema itself, so we extend it
163
157
  # with the module indicating that.
@@ -170,26 +164,26 @@ module Scorpio
170
164
  end # (this block is here just so the above informative comment is not interpreted as module doc)
171
165
 
172
166
  module V3
173
- class Operation
167
+ module Operation
174
168
  include OpenAPI::Operation
175
169
  end
176
- class Document
170
+ module Document
177
171
  include OpenAPI::Document
178
172
  end
179
- class Reference
173
+ module Reference
180
174
  include OpenAPI::Reference
181
175
  end
182
176
  require 'scorpio/openapi/v3/server'
183
177
  end
184
178
 
185
179
  module V2
186
- class Operation
180
+ module Operation
187
181
  include OpenAPI::Operation
188
182
  end
189
- class Document
183
+ module Document
190
184
  include OpenAPI::Document
191
185
  end
192
- class JsonReference
186
+ module JsonReference
193
187
  include OpenAPI::Reference
194
188
  end
195
189
  end
@@ -18,9 +18,9 @@ module Scorpio
18
18
  raise(TypeError, "instance is unexpected JSI type: #{instance.class.inspect}")
19
19
  elsif instance.respond_to?(:to_hash)
20
20
  if instance['swagger'] =~ /\A2(\.|\z)/
21
- instance = Scorpio::OpenAPI::V2::Document.new(instance)
21
+ instance = Scorpio::OpenAPI::V2::Document.new_jsi(instance)
22
22
  elsif instance['openapi'] =~ /\A3(\.|\z)/
23
- instance = Scorpio::OpenAPI::V3::Document.new(instance)
23
+ instance = Scorpio::OpenAPI::V3::Document.new_jsi(instance)
24
24
  else
25
25
  raise(ArgumentError, "instance does not look like a recognized openapi document")
26
26
  end
@@ -83,7 +83,7 @@ module Scorpio
83
83
  # A document that defines or describes an API conforming to the OpenAPI Specification v3.
84
84
  #
85
85
  # https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#oasObject
86
- class Document
86
+ module Document
87
87
  module Configurables
88
88
  def scheme
89
89
  nil
@@ -126,7 +126,7 @@ module Scorpio
126
126
  # A document that defines or describes an API conforming to the OpenAPI Specification v2 (aka Swagger).
127
127
  #
128
128
  # The root document is known as the Swagger Object.
129
- class Document
129
+ module Document
130
130
  module Configurables
131
131
  attr_writer :scheme
132
132
  def scheme
@@ -174,7 +174,7 @@ module Scorpio
174
174
  # Describes a single API operation on a path.
175
175
  #
176
176
  # https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#operationObject
177
- class Operation
177
+ module Operation
178
178
  module Configurables
179
179
  def scheme
180
180
  # not applicable; for OpenAPI v3, scheme is specified by servers.
@@ -238,7 +238,7 @@ module Scorpio
238
238
  end
239
239
  module V2
240
240
  raise(Bug, 'const_defined? Scorpio::OpenAPI::V2::Operation') unless const_defined?(:Operation)
241
- class Operation
241
+ module Operation
242
242
  module Configurables
243
243
  attr_writer :scheme
244
244
  def scheme
@@ -3,7 +3,7 @@ module Scorpio
3
3
  # OperationsScope acts as an Enumerable of the Operations for an openapi_document,
4
4
  # and offers subscripting by operationId.
5
5
  class OperationsScope
6
- include JSI::Memoize
6
+ include JSI::Util::Memoize
7
7
 
8
8
  # @param openapi_document [Scorpio::OpenAPI::Document]
9
9
  def initialize(openapi_document)
@@ -6,7 +6,7 @@ module Scorpio
6
6
  # An object representing a Server.
7
7
  #
8
8
  # https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#serverObject
9
- class Server
9
+ module Server
10
10
  # expands this server's #url using the given_server_variables. any variables
11
11
  # that are in the url but not in the given server variables are filled in
12
12
  # using the default value for the variable.
@@ -1,6 +1,8 @@
1
1
  module Scorpio
2
2
  class Request
3
3
  SUPPORTED_REQUEST_MEDIA_TYPES = ['application/json', 'application/x-www-form-urlencoded']
4
+ FALLBACK_CONTENT_TYPE = 'application/x-www-form-urlencoded'
5
+
4
6
  def self.best_media_type(media_types)
5
7
  if media_types.size == 1
6
8
  media_types.first
@@ -208,11 +210,6 @@ module Scorpio
208
210
  operation.request_schema(media_type: media_type)
209
211
  end
210
212
 
211
- # @return [Class subclassing JSI::Base]
212
- def request_schema_class(media_type: self.media_type)
213
- JSI.class_for_schema(request_schema(media_type: media_type))
214
- end
215
-
216
213
  # builds a Faraday connection with this Request's faraday_builder and faraday_adapter.
217
214
  # passes a given proc yield_ur to middleware to yield an Ur for requests made with the connection.
218
215
  #
@@ -222,8 +219,9 @@ module Scorpio
222
219
  Faraday.new do |faraday_connection|
223
220
  faraday_builder.call(faraday_connection)
224
221
  if yield_ur
225
- ::Ur::Faraday # autoload trigger
226
- faraday_connection.response(:yield_ur, ur_class: Scorpio::Ur, logger: self.logger, &yield_ur)
222
+ -> { ::Ur::Faraday }.() # autoload trigger
223
+
224
+ faraday_connection.response(:yield_ur, schemas: Set[Scorpio::Ur.schema], logger: self.logger, &yield_ur)
227
225
  end
228
226
  faraday_connection.adapter(*faraday_adapter)
229
227
  end
@@ -322,8 +320,14 @@ module Scorpio
322
320
  if user_agent
323
321
  headers['User-Agent'] = user_agent
324
322
  end
325
- if media_type && !content_type_header
326
- headers['Content-Type'] = media_type
323
+ if !content_type_header
324
+ if media_type
325
+ headers['Content-Type'] = media_type
326
+ else
327
+ # I'd rather not have a default content-type, but if none is set then the HTTP adapter sets this to
328
+ # application/x-www-form-urlencoded and issues a warning about it.
329
+ headers['Content-Type'] = FALLBACK_CONTENT_TYPE
330
+ end
327
331
  end
328
332
  if self.headers
329
333
  headers.update(self.headers)