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.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jsapi/dsl/base.rb +55 -0
  3. data/lib/jsapi/dsl/callback.rb +21 -0
  4. data/lib/jsapi/dsl/class_methods.rb +116 -10
  5. data/lib/jsapi/dsl/definitions.rb +173 -33
  6. data/lib/jsapi/dsl/examples.rb +30 -0
  7. data/lib/jsapi/dsl/operation.rb +60 -32
  8. data/lib/jsapi/dsl/parameter.rb +2 -2
  9. data/lib/jsapi/dsl/request_body.rb +2 -2
  10. data/lib/jsapi/dsl/response.rb +35 -11
  11. data/lib/jsapi/dsl/schema.rb +16 -16
  12. data/lib/jsapi/dsl.rb +4 -4
  13. data/lib/jsapi/meta/base/attributes.rb +21 -19
  14. data/lib/jsapi/meta/base/model.rb +15 -7
  15. data/lib/jsapi/meta/callback/model.rb +34 -0
  16. data/lib/jsapi/meta/callback/reference.rb +14 -0
  17. data/lib/jsapi/meta/callback.rb +19 -0
  18. data/lib/jsapi/meta/contact.rb +30 -0
  19. data/lib/jsapi/meta/defaults.rb +2 -2
  20. data/lib/jsapi/meta/definitions.rb +230 -124
  21. data/lib/jsapi/meta/example/model.rb +43 -0
  22. data/lib/jsapi/meta/example/reference.rb +14 -0
  23. data/lib/jsapi/meta/example.rb +19 -0
  24. data/lib/jsapi/meta/external_documentation.rb +25 -0
  25. data/lib/jsapi/meta/header/model.rb +81 -0
  26. data/lib/jsapi/meta/header/reference.rb +14 -0
  27. data/lib/jsapi/meta/header.rb +19 -0
  28. data/lib/jsapi/meta/info.rb +52 -0
  29. data/lib/jsapi/meta/license.rb +25 -0
  30. data/lib/jsapi/meta/link/model.rb +48 -0
  31. data/lib/jsapi/meta/link/reference.rb +14 -0
  32. data/lib/jsapi/meta/link.rb +19 -0
  33. data/lib/jsapi/meta/oauth_flow.rb +52 -0
  34. data/lib/jsapi/meta/openapi.rb +0 -28
  35. data/lib/jsapi/meta/operation.rb +19 -18
  36. data/lib/jsapi/meta/parameter/model.rb +6 -4
  37. data/lib/jsapi/meta/parameter/reference.rb +6 -4
  38. data/lib/jsapi/meta/parameter/to_openapi.rb +13 -0
  39. data/lib/jsapi/meta/parameter.rb +2 -1
  40. data/lib/jsapi/meta/property.rb +1 -1
  41. data/lib/jsapi/meta/request_body/model.rb +6 -5
  42. data/lib/jsapi/meta/request_body.rb +1 -1
  43. data/lib/jsapi/meta/response/model.rb +16 -13
  44. data/lib/jsapi/meta/response.rb +1 -1
  45. data/lib/jsapi/meta/schema/array.rb +1 -1
  46. data/lib/jsapi/meta/schema/base.rb +5 -5
  47. data/lib/jsapi/meta/schema/discriminator.rb +2 -2
  48. data/lib/jsapi/meta/schema/object.rb +3 -3
  49. data/lib/jsapi/meta/schema/reference.rb +1 -1
  50. data/lib/jsapi/meta/schema.rb +2 -2
  51. data/lib/jsapi/meta/security_requirement.rb +25 -0
  52. data/lib/jsapi/meta/security_scheme/api_key.rb +38 -0
  53. data/lib/jsapi/meta/security_scheme/base.rb +14 -0
  54. data/lib/jsapi/meta/security_scheme/http/basic.rb +34 -0
  55. data/lib/jsapi/meta/security_scheme/http/bearer.rb +36 -0
  56. data/lib/jsapi/meta/security_scheme/http/other.rb +36 -0
  57. data/lib/jsapi/meta/security_scheme/http.rb +29 -0
  58. data/lib/jsapi/meta/security_scheme/oauth2.rb +44 -0
  59. data/lib/jsapi/meta/security_scheme/open_id_connect.rb +32 -0
  60. data/lib/jsapi/meta/security_scheme.rb +49 -0
  61. data/lib/jsapi/meta/server.rb +34 -0
  62. data/lib/jsapi/meta/server_variable.rb +34 -0
  63. data/lib/jsapi/meta/tag.rb +34 -0
  64. data/lib/jsapi/meta.rb +15 -1
  65. data/lib/jsapi/model/base.rb +5 -5
  66. data/lib/jsapi/version.rb +1 -1
  67. metadata +38 -42
  68. data/lib/jsapi/dsl/node.rb +0 -62
  69. data/lib/jsapi/dsl/openapi/callback.rb +0 -23
  70. data/lib/jsapi/dsl/openapi/callbacks.rb +0 -34
  71. data/lib/jsapi/dsl/openapi/examples.rb +0 -32
  72. data/lib/jsapi/dsl/openapi/root.rb +0 -126
  73. data/lib/jsapi/dsl/openapi.rb +0 -6
  74. data/lib/jsapi/meta/openapi/callback/model.rb +0 -34
  75. data/lib/jsapi/meta/openapi/callback/reference.rb +0 -16
  76. data/lib/jsapi/meta/openapi/callback.rb +0 -21
  77. data/lib/jsapi/meta/openapi/contact.rb +0 -32
  78. data/lib/jsapi/meta/openapi/example/model.rb +0 -44
  79. data/lib/jsapi/meta/openapi/example/reference.rb +0 -16
  80. data/lib/jsapi/meta/openapi/example.rb +0 -21
  81. data/lib/jsapi/meta/openapi/external_documentation.rb +0 -27
  82. data/lib/jsapi/meta/openapi/header/model.rb +0 -82
  83. data/lib/jsapi/meta/openapi/header/reference.rb +0 -16
  84. data/lib/jsapi/meta/openapi/header.rb +0 -21
  85. data/lib/jsapi/meta/openapi/info.rb +0 -54
  86. data/lib/jsapi/meta/openapi/license.rb +0 -27
  87. data/lib/jsapi/meta/openapi/link/model.rb +0 -50
  88. data/lib/jsapi/meta/openapi/link/reference.rb +0 -16
  89. data/lib/jsapi/meta/openapi/link.rb +0 -21
  90. data/lib/jsapi/meta/openapi/oauth_flow.rb +0 -52
  91. data/lib/jsapi/meta/openapi/root.rb +0 -132
  92. data/lib/jsapi/meta/openapi/security_requirement.rb +0 -27
  93. data/lib/jsapi/meta/openapi/security_scheme/api_key.rb +0 -40
  94. data/lib/jsapi/meta/openapi/security_scheme/base.rb +0 -16
  95. data/lib/jsapi/meta/openapi/security_scheme/http/basic.rb +0 -36
  96. data/lib/jsapi/meta/openapi/security_scheme/http/bearer.rb +0 -39
  97. data/lib/jsapi/meta/openapi/security_scheme/http/other.rb +0 -39
  98. data/lib/jsapi/meta/openapi/security_scheme/http.rb +0 -31
  99. data/lib/jsapi/meta/openapi/security_scheme/oauth2.rb +0 -46
  100. data/lib/jsapi/meta/openapi/security_scheme/open_id_connect.rb +0 -34
  101. data/lib/jsapi/meta/openapi/security_scheme.rb +0 -51
  102. data/lib/jsapi/meta/openapi/server.rb +0 -36
  103. data/lib/jsapi/meta/openapi/server_variable.rb +0 -36
  104. data/lib/jsapi/meta/openapi/tag.rb +0 -36
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41bcc8f72dc668c6df55dfc73e6e2c9cc6fde569ebe008e503586100e0b3bba1
4
- data.tar.gz: 9667a2661824e0d3a47675e835f3372cfd22bff71ab8c7bb3bde3c0e56cc78be
3
+ metadata.gz: e68467f73e8f1e909a03cd8c50f16674231dc0d070f05a5368b84e0f75dedfe6
4
+ data.tar.gz: 6c0b1304cb7192d223f517d5233fd96fa13aad7e0affb6832f313088bc3b3993
5
5
  SHA512:
6
- metadata.gz: 576422bac22ee56e77ab160e50033a78ba1f02039fd5a7686583d0778f049e331892bb5d7692dcdc428c9b250706f13bf6e585db4472d40e31d63537116d9f37
7
- data.tar.gz: e3ef8964a2a55d6f245a8982e7dcad76f564d066af119eec43edb1b5bc579f1771ce87e747924e5cd2d6b650e07e44515ff7e722860a4c4ee8c6fa7e8b0360cb
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', read: [], write: []
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
- # Defines an operation.
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
- # Defines a reusable parameter.
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
- # Defines a reusable response.
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
- # Defines a reusable schema.
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
- # Defines the root of an OpenAPI document.
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
- # openapi do
94
- # info title: 'Foo', version: '1'
174
+ # api_security_requirement do
175
+ # scheme 'basic_auth'
95
176
  # end
96
- def openapi(**keywords, &block)
97
- api_definitions { openapi(**keywords, &block) }
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 < Node
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', read: [], write: []
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
- _define('default', type.inspect) do
14
- default = _meta_model.add_default(type, keywords)
15
- Node.new(default, &block) if block
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
- _meta_model.include(klass.api_definitions)
66
+ @meta_model.include(klass.api_definitions)
23
67
  end
24
68
  end
25
69
 
26
- # Registers a callback to be called when rescuing an exception.
27
- def on_rescue(method = nil, &block)
28
- _define('on_rescue') do
29
- _meta_model.add_on_rescue(method || block)
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
- # Defines the root of an \OpenAPI document.
114
+ # Registers a callback to be called when rescuing an exception.
115
+ #
116
+ # on_rescue :foo
34
117
  #
35
- # openapi do
36
- # info title: 'Foo', version: '1'
118
+ # on_rescue do |error|
119
+ # # ...
37
120
  # end
38
- def openapi(**keywords, &block)
39
- _define('openapi') do
40
- _meta_model.openapi = keywords
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
- # Defines an operation.
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
- _define('operation', name&.inspect) do
57
- operation_model = _meta_model.add_operation(name, keywords)
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
- # Defines a reusable parameter.
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
- _define('parameter', name.inspect) do
68
- parameter_model = _meta_model.add_parameter(name, keywords)
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
- # Defines a reusable request body.
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
- _define('request_body', name.inspect) do
79
- request_body_model = _meta_model.add_request_body(name, keywords)
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
- _meta_model.add_rescue_handler({ error_class: klass, status: with })
177
+ @meta_model.add_rescue_handler({ error_class: klass, status: with })
92
178
  end
93
179
  end
94
180
 
95
- # Defines a reusable response.
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
- _define('response', name.inspect) do
102
- response_model = _meta_model.add_response(name, keywords)
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
- # Defines a reusable schema.
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
- _define('schema', name.inspect) do
114
- schema_model = _meta_model.add_schema(name, keywords)
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