jsapi 0.8.0 → 0.9.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/lib/jsapi/dsl/base.rb +55 -0
- data/lib/jsapi/dsl/callback.rb +21 -0
- data/lib/jsapi/dsl/class_methods.rb +116 -10
- data/lib/jsapi/dsl/definitions.rb +173 -33
- data/lib/jsapi/dsl/examples.rb +30 -0
- data/lib/jsapi/dsl/operation.rb +60 -32
- data/lib/jsapi/dsl/parameter.rb +2 -2
- data/lib/jsapi/dsl/request_body.rb +2 -2
- data/lib/jsapi/dsl/response.rb +35 -11
- data/lib/jsapi/dsl/schema.rb +16 -16
- data/lib/jsapi/dsl.rb +4 -4
- data/lib/jsapi/meta/base/attributes.rb +21 -19
- data/lib/jsapi/meta/base/model.rb +15 -7
- data/lib/jsapi/meta/callback/model.rb +34 -0
- data/lib/jsapi/meta/callback/reference.rb +14 -0
- data/lib/jsapi/meta/callback.rb +19 -0
- data/lib/jsapi/meta/contact.rb +30 -0
- data/lib/jsapi/meta/defaults.rb +2 -2
- data/lib/jsapi/meta/definitions.rb +230 -124
- data/lib/jsapi/meta/example/model.rb +43 -0
- data/lib/jsapi/meta/example/reference.rb +14 -0
- data/lib/jsapi/meta/example.rb +19 -0
- data/lib/jsapi/meta/external_documentation.rb +25 -0
- data/lib/jsapi/meta/header/model.rb +81 -0
- data/lib/jsapi/meta/header/reference.rb +14 -0
- data/lib/jsapi/meta/header.rb +19 -0
- data/lib/jsapi/meta/info.rb +52 -0
- data/lib/jsapi/meta/license.rb +25 -0
- data/lib/jsapi/meta/link/model.rb +48 -0
- data/lib/jsapi/meta/link/reference.rb +14 -0
- data/lib/jsapi/meta/link.rb +19 -0
- data/lib/jsapi/meta/oauth_flow.rb +52 -0
- data/lib/jsapi/meta/openapi.rb +0 -28
- data/lib/jsapi/meta/operation.rb +19 -18
- data/lib/jsapi/meta/parameter/model.rb +6 -4
- data/lib/jsapi/meta/parameter/reference.rb +6 -4
- data/lib/jsapi/meta/parameter/to_openapi.rb +13 -0
- data/lib/jsapi/meta/parameter.rb +2 -1
- data/lib/jsapi/meta/property.rb +1 -1
- data/lib/jsapi/meta/request_body/model.rb +6 -5
- data/lib/jsapi/meta/request_body.rb +1 -1
- data/lib/jsapi/meta/response/model.rb +16 -13
- data/lib/jsapi/meta/response.rb +1 -1
- data/lib/jsapi/meta/schema/array.rb +1 -1
- data/lib/jsapi/meta/schema/base.rb +5 -5
- data/lib/jsapi/meta/schema/discriminator.rb +2 -2
- data/lib/jsapi/meta/schema/object.rb +3 -3
- data/lib/jsapi/meta/schema/reference.rb +1 -1
- data/lib/jsapi/meta/schema.rb +2 -2
- data/lib/jsapi/meta/security_requirement.rb +25 -0
- data/lib/jsapi/meta/security_scheme/api_key.rb +38 -0
- data/lib/jsapi/meta/security_scheme/base.rb +14 -0
- data/lib/jsapi/meta/security_scheme/http/basic.rb +34 -0
- data/lib/jsapi/meta/security_scheme/http/bearer.rb +36 -0
- data/lib/jsapi/meta/security_scheme/http/other.rb +36 -0
- data/lib/jsapi/meta/security_scheme/http.rb +29 -0
- data/lib/jsapi/meta/security_scheme/oauth2.rb +44 -0
- data/lib/jsapi/meta/security_scheme/open_id_connect.rb +32 -0
- data/lib/jsapi/meta/security_scheme.rb +49 -0
- data/lib/jsapi/meta/server.rb +34 -0
- data/lib/jsapi/meta/server_variable.rb +34 -0
- data/lib/jsapi/meta/tag.rb +34 -0
- data/lib/jsapi/meta.rb +15 -1
- data/lib/jsapi/model/base.rb +5 -5
- data/lib/jsapi/version.rb +1 -1
- metadata +38 -42
- data/lib/jsapi/dsl/node.rb +0 -62
- data/lib/jsapi/dsl/openapi/callback.rb +0 -23
- data/lib/jsapi/dsl/openapi/callbacks.rb +0 -34
- data/lib/jsapi/dsl/openapi/examples.rb +0 -32
- data/lib/jsapi/dsl/openapi/root.rb +0 -126
- data/lib/jsapi/dsl/openapi.rb +0 -6
- data/lib/jsapi/meta/openapi/callback/model.rb +0 -34
- data/lib/jsapi/meta/openapi/callback/reference.rb +0 -16
- data/lib/jsapi/meta/openapi/callback.rb +0 -21
- data/lib/jsapi/meta/openapi/contact.rb +0 -32
- data/lib/jsapi/meta/openapi/example/model.rb +0 -44
- data/lib/jsapi/meta/openapi/example/reference.rb +0 -16
- data/lib/jsapi/meta/openapi/example.rb +0 -21
- data/lib/jsapi/meta/openapi/external_documentation.rb +0 -27
- data/lib/jsapi/meta/openapi/header/model.rb +0 -82
- data/lib/jsapi/meta/openapi/header/reference.rb +0 -16
- data/lib/jsapi/meta/openapi/header.rb +0 -21
- data/lib/jsapi/meta/openapi/info.rb +0 -54
- data/lib/jsapi/meta/openapi/license.rb +0 -27
- data/lib/jsapi/meta/openapi/link/model.rb +0 -50
- data/lib/jsapi/meta/openapi/link/reference.rb +0 -16
- data/lib/jsapi/meta/openapi/link.rb +0 -21
- data/lib/jsapi/meta/openapi/oauth_flow.rb +0 -52
- data/lib/jsapi/meta/openapi/root.rb +0 -132
- data/lib/jsapi/meta/openapi/security_requirement.rb +0 -27
- data/lib/jsapi/meta/openapi/security_scheme/api_key.rb +0 -40
- data/lib/jsapi/meta/openapi/security_scheme/base.rb +0 -16
- data/lib/jsapi/meta/openapi/security_scheme/http/basic.rb +0 -36
- data/lib/jsapi/meta/openapi/security_scheme/http/bearer.rb +0 -39
- data/lib/jsapi/meta/openapi/security_scheme/http/other.rb +0 -39
- data/lib/jsapi/meta/openapi/security_scheme/http.rb +0 -31
- data/lib/jsapi/meta/openapi/security_scheme/oauth2.rb +0 -46
- data/lib/jsapi/meta/openapi/security_scheme/open_id_connect.rb +0 -34
- data/lib/jsapi/meta/openapi/security_scheme.rb +0 -51
- data/lib/jsapi/meta/openapi/server.rb +0 -36
- data/lib/jsapi/meta/openapi/server_variable.rb +0 -36
- data/lib/jsapi/meta/openapi/tag.rb +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e68467f73e8f1e909a03cd8c50f16674231dc0d070f05a5368b84e0f75dedfe6
|
4
|
+
data.tar.gz: 6c0b1304cb7192d223f517d5233fd96fa13aad7e0affb6832f313088bc3b3993
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45b860d17ffc8f22cfbe4fca26d38e727ff87ddc93a959c6285fd1aaa8eb0de9c5e2a9c516f717f0f6d463b0bfe5c8708b9efa5bab5aa6b08eb642d90ee84d10
|
7
|
+
data.tar.gz: fe573b4b85e50373bd832f1ec3d4fdd9c11fe57bf42527fe80021d6c84d2271e01161b08cdedcee587a69bd43a28219562d36ed0c127197e4cbfe34e05902aca
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jsapi
|
4
|
+
module DSL
|
5
|
+
class Base
|
6
|
+
def initialize(meta_model, &block)
|
7
|
+
@meta_model = meta_model
|
8
|
+
|
9
|
+
if block
|
10
|
+
if meta_model.reference?
|
11
|
+
raise Error, "reference can't be specified together with a block"
|
12
|
+
end
|
13
|
+
|
14
|
+
instance_eval(&block)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def respond_to_missing?(*args) # :nodoc:
|
19
|
+
keyword?(args.first)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def define(*args, &block)
|
25
|
+
block.call
|
26
|
+
rescue Error => e
|
27
|
+
raise e.prepend_origin(args.compact.join(' '))
|
28
|
+
rescue StandardError => e
|
29
|
+
raise Error.new(e, args.compact.join(' ').presence)
|
30
|
+
end
|
31
|
+
|
32
|
+
def find_method(name)
|
33
|
+
["#{name}=", "add_#{name}"].find do |method|
|
34
|
+
@meta_model.respond_to?(method)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def keyword(name, *params, &block)
|
39
|
+
method = find_method(name)
|
40
|
+
raise "unsupported keyword: #{name}" unless method
|
41
|
+
|
42
|
+
define(name) do
|
43
|
+
result = @meta_model.public_send(method, *params)
|
44
|
+
Base.new(result, &block) if block
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def keyword?(name)
|
49
|
+
find_method(name).present?
|
50
|
+
end
|
51
|
+
|
52
|
+
alias method_missing keyword
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jsapi
|
4
|
+
module DSL
|
5
|
+
# Used to specify an OpenAPI callback object.
|
6
|
+
class Callback < Base
|
7
|
+
|
8
|
+
# Adds a callback operation.
|
9
|
+
#
|
10
|
+
# operation '{$request.query.foo}' do
|
11
|
+
# parameter 'bar', type: 'string'
|
12
|
+
# end
|
13
|
+
def operation(expression, **keywords, &block)
|
14
|
+
define('operation', expression.inspect) do
|
15
|
+
operation_model = @meta_model.add_operation(expression, keywords)
|
16
|
+
Operation.new(operation_model, &block) if block
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -3,9 +3,27 @@
|
|
3
3
|
module Jsapi
|
4
4
|
module DSL
|
5
5
|
module ClassMethods
|
6
|
+
# Specifies the base path of the API.
|
7
|
+
#
|
8
|
+
# api_base_path '/foo'
|
9
|
+
#
|
10
|
+
def api_base_path(arg)
|
11
|
+
api_definitions { base_path(arg) }
|
12
|
+
end
|
13
|
+
|
14
|
+
# Specifies a reusable callback.
|
15
|
+
#
|
16
|
+
# api_callback 'onFoo' do
|
17
|
+
# operation '{$request.query.foo}', path: '/bar'
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
def api_callback(name, **keywords, &block)
|
21
|
+
api_definitions { callback(name, **keywords, &block) }
|
22
|
+
end
|
23
|
+
|
6
24
|
# Specifies the general default values for +type+.
|
7
25
|
#
|
8
|
-
# api_default 'array',
|
26
|
+
# api_default 'array', within_requests: [], within_responses: []
|
9
27
|
#
|
10
28
|
def api_default(type, **keywords, &block)
|
11
29
|
api_definitions { default(type, **keywords, &block) }
|
@@ -21,17 +39,72 @@ module Jsapi
|
|
21
39
|
@api_definitions
|
22
40
|
end
|
23
41
|
|
42
|
+
# Specifies a reusable example.
|
43
|
+
#
|
44
|
+
# example 'foo', value: 'bar'
|
45
|
+
#
|
46
|
+
def api_example(name, **keywords, &block)
|
47
|
+
api_definitions { example(name, **keywords, &block) }
|
48
|
+
end
|
49
|
+
|
50
|
+
# Specifies the external documentation.
|
51
|
+
#
|
52
|
+
# api_external_docs url: 'https://foo.bar'
|
53
|
+
#
|
54
|
+
def api_external_docs(**keywords, &block)
|
55
|
+
api_definitions { external_docs(**keywords, &block) }
|
56
|
+
end
|
57
|
+
|
58
|
+
# Specifies a reusable header.
|
59
|
+
#
|
60
|
+
# api_header 'foo', type: 'string'
|
61
|
+
#
|
62
|
+
def api_header(name, **keywords, &block)
|
63
|
+
api_definitions { header(name, **keywords, &block) }
|
64
|
+
end
|
65
|
+
|
66
|
+
# Specifies the host serving the API.
|
67
|
+
#
|
68
|
+
# api_host 'foo.bar'
|
69
|
+
#
|
70
|
+
def api_host(arg)
|
71
|
+
api_definitions { host(arg) }
|
72
|
+
end
|
73
|
+
|
24
74
|
# Includes API definitions from +klasses+.
|
25
75
|
def api_include(*klasses)
|
26
76
|
api_definitions { include(*klasses) }
|
27
77
|
end
|
28
78
|
|
79
|
+
# Specifies general information about the API.
|
80
|
+
#
|
81
|
+
# api_info title: 'Foo', version: '1' do
|
82
|
+
# contact name: 'bar'
|
83
|
+
# end
|
84
|
+
def api_info(**keywords, &block)
|
85
|
+
api_definitions { info(**keywords, &block) }
|
86
|
+
end
|
87
|
+
|
88
|
+
# Specifies a reusable link.
|
89
|
+
#
|
90
|
+
# api_link 'foo', operation_id: 'bar'
|
91
|
+
#
|
92
|
+
def api_link(name, **keywords, &block)
|
93
|
+
api_definitions { link(name, **keywords, &block) }
|
94
|
+
end
|
95
|
+
|
29
96
|
# Registers a callback to be called when rescuing an exception.
|
97
|
+
#
|
98
|
+
# api_on_rescue :foo
|
99
|
+
#
|
100
|
+
# api_on_rescue do |error|
|
101
|
+
# # ...
|
102
|
+
# end
|
30
103
|
def api_on_rescue(method = nil, &block)
|
31
104
|
api_definitions { on_rescue(method, &block) }
|
32
105
|
end
|
33
106
|
|
34
|
-
#
|
107
|
+
# Specifies an operation.
|
35
108
|
#
|
36
109
|
# api_operation 'foo', path: '/foo' do
|
37
110
|
# parameter 'bar', type: 'string'
|
@@ -45,7 +118,7 @@ module Jsapi
|
|
45
118
|
api_definitions { operation(name, **keywords, &block) }
|
46
119
|
end
|
47
120
|
|
48
|
-
#
|
121
|
+
# Specifies a reusable parameter.
|
49
122
|
#
|
50
123
|
# api_parameter 'foo', type: 'string'
|
51
124
|
#
|
@@ -70,7 +143,7 @@ module Jsapi
|
|
70
143
|
api_definitions { rescue_from(*klasses, with: with) }
|
71
144
|
end
|
72
145
|
|
73
|
-
#
|
146
|
+
# Specifies a reusable response.
|
74
147
|
#
|
75
148
|
# api_response 'Foo', type: 'object' do
|
76
149
|
# property 'bar', type: 'string'
|
@@ -79,7 +152,7 @@ module Jsapi
|
|
79
152
|
api_definitions { response(name, **keywords, &block) }
|
80
153
|
end
|
81
154
|
|
82
|
-
#
|
155
|
+
# Specifies a reusable schema.
|
83
156
|
#
|
84
157
|
# api_schema 'Foo' do
|
85
158
|
# property 'bar', type: 'string'
|
@@ -88,13 +161,46 @@ module Jsapi
|
|
88
161
|
api_definitions { schema(name, **keywords, &block) }
|
89
162
|
end
|
90
163
|
|
91
|
-
#
|
164
|
+
# Specifies a URI scheme supported by the API.
|
165
|
+
#
|
166
|
+
# api_scheme 'https'
|
167
|
+
#
|
168
|
+
def api_scheme(arg)
|
169
|
+
api_definitions { scheme(arg) }
|
170
|
+
end
|
171
|
+
|
172
|
+
# Specifies a security requirement.
|
92
173
|
#
|
93
|
-
#
|
94
|
-
#
|
174
|
+
# api_security_requirement do
|
175
|
+
# scheme 'basic_auth'
|
95
176
|
# end
|
96
|
-
|
97
|
-
|
177
|
+
#
|
178
|
+
def api_security_requirement(**keywords, &block)
|
179
|
+
api_definitions { security_requirement(**keywords, &block) }
|
180
|
+
end
|
181
|
+
|
182
|
+
# Specifies a security scheme.
|
183
|
+
#
|
184
|
+
# api_security_scheme 'basic_auth', type: 'http', scheme: 'basic'
|
185
|
+
#
|
186
|
+
def api_security_scheme(name, **keywords, &block)
|
187
|
+
api_definitions { security_scheme(name, **keywords, &block) }
|
188
|
+
end
|
189
|
+
|
190
|
+
# Specifies a server providing the API.
|
191
|
+
#
|
192
|
+
# api_server url: 'https://foo.bar/foo'
|
193
|
+
#
|
194
|
+
def api_server(**keywords, &block)
|
195
|
+
api_definitions { server(**keywords, &block) }
|
196
|
+
end
|
197
|
+
|
198
|
+
# Specifies a tag.
|
199
|
+
#
|
200
|
+
# api_tag name: 'foo', description: 'description of foo'
|
201
|
+
#
|
202
|
+
def api_tag(**keywords, &block)
|
203
|
+
api_definitions { tag(**keywords, &block) }
|
98
204
|
end
|
99
205
|
end
|
100
206
|
end
|
@@ -3,46 +3,128 @@
|
|
3
3
|
module Jsapi
|
4
4
|
module DSL
|
5
5
|
# Used to define top-level API components.
|
6
|
-
class Definitions <
|
6
|
+
class Definitions < Base
|
7
|
+
##
|
8
|
+
# :method: base_path
|
9
|
+
# :args: arg
|
10
|
+
# Specifies the base path of the API.
|
11
|
+
#
|
12
|
+
# base_path '/foo'
|
13
|
+
#
|
14
|
+
# See Meta::Definitions#base_path for further information.
|
15
|
+
|
16
|
+
# Specifies a reusable callback.
|
17
|
+
#
|
18
|
+
# callback 'foo' do
|
19
|
+
# operation '{$request.query.foo}', path: '/bar'
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# See Meta::Definitions#callbacks for further information.
|
23
|
+
def callback(name, **keywords, &block)
|
24
|
+
define('callback', name.inspect) do
|
25
|
+
callback = @meta_model.add_callback(name, keywords)
|
26
|
+
Callback.new(callback, &block) if block
|
27
|
+
end
|
28
|
+
end
|
7
29
|
|
8
30
|
# Specifies the general default values for +type+.
|
9
31
|
#
|
10
|
-
# default 'array',
|
32
|
+
# default 'array', within_requests: [], within_responses: []
|
11
33
|
#
|
34
|
+
# See Meta::Definitions#defaults for further information.
|
12
35
|
def default(type, **keywords, &block)
|
13
|
-
|
14
|
-
default =
|
15
|
-
|
36
|
+
define('default', type.inspect) do
|
37
|
+
default = @meta_model.add_default(type, keywords)
|
38
|
+
Base.new(default, &block) if block
|
16
39
|
end
|
17
40
|
end
|
18
41
|
|
42
|
+
# Specifies a reusable example.
|
43
|
+
#
|
44
|
+
# example '/foo', value: 'bar'
|
45
|
+
#
|
46
|
+
# See Meta::Definitions#examples for further information.
|
47
|
+
def example(name, **keywords, &block)
|
48
|
+
define('example', name.inspect) do
|
49
|
+
example = @meta_model.add_example(name, keywords)
|
50
|
+
Base.new(example, &block) if block
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
##
|
55
|
+
# :method: external_docs
|
56
|
+
# :args: **keywords, &block
|
57
|
+
# Specifies the external documentation.
|
58
|
+
#
|
59
|
+
# external_docs url: 'https://foo.bar'
|
60
|
+
#
|
61
|
+
# See Meta::Definitions#external_docs for further information.
|
62
|
+
|
19
63
|
# Includes API definitions from +klasses+.
|
20
64
|
def include(*klasses)
|
21
65
|
klasses.each do |klass|
|
22
|
-
|
66
|
+
@meta_model.include(klass.api_definitions)
|
23
67
|
end
|
24
68
|
end
|
25
69
|
|
26
|
-
#
|
27
|
-
|
28
|
-
|
29
|
-
|
70
|
+
# Specifies a reusable header.
|
71
|
+
#
|
72
|
+
# header 'foo', type: 'string'
|
73
|
+
#
|
74
|
+
# See Meta::Definitions#headers for further information.
|
75
|
+
def header(name, **keywords, &block)
|
76
|
+
define('header', name.inspect) do
|
77
|
+
header = @meta_model.add_header(name, keywords)
|
78
|
+
Base.new(header, &block) if block
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
##
|
83
|
+
# :method: host
|
84
|
+
# :args: arg
|
85
|
+
# Specifies the host serving the API.
|
86
|
+
#
|
87
|
+
# host 'foo.bar'
|
88
|
+
#
|
89
|
+
# See Meta::Definitions#host for further information.
|
90
|
+
|
91
|
+
##
|
92
|
+
# :method: info
|
93
|
+
# :args: **keywords, &block
|
94
|
+
# Specifies general information about the API.
|
95
|
+
#
|
96
|
+
# info title: 'foo', version: 1 do
|
97
|
+
# contact name: 'bar'
|
98
|
+
# end
|
99
|
+
#
|
100
|
+
# See Meta::Definitions#info for further information.
|
101
|
+
|
102
|
+
# Specifies a reusable link.
|
103
|
+
#
|
104
|
+
# link 'foo', operation_id: 'bar'
|
105
|
+
#
|
106
|
+
# See Meta::Definitions#links for further information.
|
107
|
+
def link(name, **keywords, &block)
|
108
|
+
define('link', name.inspect) do
|
109
|
+
link = @meta_model.add_link(name, keywords)
|
110
|
+
Base.new(link, &block) if block
|
30
111
|
end
|
31
112
|
end
|
32
113
|
|
33
|
-
#
|
114
|
+
# Registers a callback to be called when rescuing an exception.
|
115
|
+
#
|
116
|
+
# on_rescue :foo
|
34
117
|
#
|
35
|
-
#
|
36
|
-
#
|
118
|
+
# on_rescue do |error|
|
119
|
+
# # ...
|
37
120
|
# end
|
38
|
-
def
|
39
|
-
|
40
|
-
|
41
|
-
OpenAPI::Root.new(_meta_model.openapi, &block) if block
|
121
|
+
def on_rescue(method = nil, &block)
|
122
|
+
define('on_rescue') do
|
123
|
+
@meta_model.add_on_rescue(method || block)
|
42
124
|
end
|
43
125
|
end
|
44
126
|
|
45
|
-
#
|
127
|
+
# Specifies an operation.
|
46
128
|
#
|
47
129
|
# operation 'foo', path: '/foo' do
|
48
130
|
# parameter 'bar', type: 'string'
|
@@ -52,31 +134,35 @@ module Jsapi
|
|
52
134
|
# end
|
53
135
|
#
|
54
136
|
# +name+ can be +nil+ if the controller handles one operation only.
|
137
|
+
#
|
138
|
+
# See Meta::Definitions#operations for further information.
|
55
139
|
def operation(name = nil, **keywords, &block)
|
56
|
-
|
57
|
-
operation_model =
|
140
|
+
define('operation', name&.inspect) do
|
141
|
+
operation_model = @meta_model.add_operation(name, keywords)
|
58
142
|
Operation.new(operation_model, &block) if block
|
59
143
|
end
|
60
144
|
end
|
61
145
|
|
62
|
-
#
|
146
|
+
# Specifies a reusable parameter.
|
63
147
|
#
|
64
148
|
# parameter 'foo', type: 'string'
|
65
149
|
#
|
150
|
+
# See Meta::Definitions#parameters for further information.
|
66
151
|
def parameter(name, **keywords, &block)
|
67
|
-
|
68
|
-
parameter_model =
|
152
|
+
define('parameter', name.inspect) do
|
153
|
+
parameter_model = @meta_model.add_parameter(name, keywords)
|
69
154
|
Parameter.new(parameter_model, &block) if block
|
70
155
|
end
|
71
156
|
end
|
72
157
|
|
73
|
-
#
|
158
|
+
# Specifies a reusable request body.
|
74
159
|
#
|
75
160
|
# request_body 'foo', type: 'string'
|
76
161
|
#
|
162
|
+
# See Meta::Definitions#request_bodies for further information.
|
77
163
|
def request_body(name, **keywords, &block)
|
78
|
-
|
79
|
-
request_body_model =
|
164
|
+
define('request_body', name.inspect) do
|
165
|
+
request_body_model = @meta_model.add_request_body(name, keywords)
|
80
166
|
RequestBody.new(request_body_model, &block) if block
|
81
167
|
end
|
82
168
|
end
|
@@ -88,33 +174,87 @@ module Jsapi
|
|
88
174
|
#
|
89
175
|
def rescue_from(*klasses, with: nil)
|
90
176
|
klasses.each do |klass|
|
91
|
-
|
177
|
+
@meta_model.add_rescue_handler({ error_class: klass, status: with })
|
92
178
|
end
|
93
179
|
end
|
94
180
|
|
95
|
-
#
|
181
|
+
# Specifies a reusable response.
|
96
182
|
#
|
97
183
|
# response 'Foo', type: 'object' do
|
98
184
|
# property 'bar', type: 'string'
|
99
185
|
# end
|
186
|
+
#
|
187
|
+
# See Meta::Definitions#responses for further information.
|
100
188
|
def response(name, **keywords, &block)
|
101
|
-
|
102
|
-
response_model =
|
189
|
+
define('response', name.inspect) do
|
190
|
+
response_model = @meta_model.add_response(name, keywords)
|
103
191
|
Response.new(response_model, &block) if block
|
104
192
|
end
|
105
193
|
end
|
106
194
|
|
107
|
-
#
|
195
|
+
# Specifies a reusable schema.
|
108
196
|
#
|
109
197
|
# schema 'Foo' do
|
110
198
|
# property 'bar', type: 'string'
|
111
199
|
# end
|
200
|
+
#
|
201
|
+
# See Meta::Definitions#schemas for further information.
|
112
202
|
def schema(name, **keywords, &block)
|
113
|
-
|
114
|
-
schema_model =
|
203
|
+
define('schema', name.inspect) do
|
204
|
+
schema_model = @meta_model.add_schema(name, keywords)
|
115
205
|
Schema.new(schema_model, &block) if block
|
116
206
|
end
|
117
207
|
end
|
208
|
+
|
209
|
+
##
|
210
|
+
# :method: scheme
|
211
|
+
# :args: arg
|
212
|
+
# Specifies a URI scheme supported by the API.
|
213
|
+
#
|
214
|
+
# scheme 'https'
|
215
|
+
#
|
216
|
+
# See Meta::Definitions#schemes for further information.
|
217
|
+
|
218
|
+
##
|
219
|
+
# :method: security_requirement
|
220
|
+
# :args: **keywords, &block
|
221
|
+
# Adds a security requirement.
|
222
|
+
#
|
223
|
+
# security_requirement do
|
224
|
+
# scheme 'basic_auth'
|
225
|
+
# end
|
226
|
+
#
|
227
|
+
# See Meta::Definitions#security_requirements for further information.
|
228
|
+
|
229
|
+
# Specifies a security scheme.
|
230
|
+
#
|
231
|
+
# security_scheme 'basic_auth', type: 'http', scheme: 'basic'
|
232
|
+
#
|
233
|
+
# See Meta::Definitions#security_schemes for further information.
|
234
|
+
def security_scheme(name, **keywords, &block)
|
235
|
+
define('security_scheme', name.inspect) do
|
236
|
+
security_scheme = @meta_model.add_security_scheme(name, keywords)
|
237
|
+
Base.new(security_scheme, &block) if block
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
##
|
242
|
+
# :method: server
|
243
|
+
# :args: **keywords, &block
|
244
|
+
# Specifies a server providing the API.
|
245
|
+
#
|
246
|
+
# server url: 'https://foo.bar/foo'
|
247
|
+
#
|
248
|
+
# See Meta::Definitions#servers for further information.
|
249
|
+
|
250
|
+
##
|
251
|
+
# :method: tag
|
252
|
+
# :args: **keywords, &block
|
253
|
+
# Specifies a tag.
|
254
|
+
#
|
255
|
+
# tag name: 'foo', description: 'description of foo'
|
256
|
+
#
|
257
|
+
# See Meta::Definitions#tags for further information.
|
118
258
|
end
|
119
259
|
end
|
120
260
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jsapi
|
4
|
+
module DSL
|
5
|
+
module Examples
|
6
|
+
# Specifies an example.
|
7
|
+
#
|
8
|
+
# example 'foo', value: 'bar'
|
9
|
+
#
|
10
|
+
# example 'foo'
|
11
|
+
#
|
12
|
+
# The default name is <code>'default'</code>.
|
13
|
+
def example(name_or_value = nil, **keywords, &block)
|
14
|
+
define('example', name_or_value&.inspect) do
|
15
|
+
if keywords.any? || block
|
16
|
+
# example 'foo', value: 'bar', ...
|
17
|
+
name = name_or_value
|
18
|
+
else
|
19
|
+
# example 'foo'
|
20
|
+
name = nil
|
21
|
+
keywords = { value: name_or_value }
|
22
|
+
end
|
23
|
+
|
24
|
+
example = @meta_model.add_example(name, keywords)
|
25
|
+
Base.new(example, &block) if block
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|