swagger_yard 0.4.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +202 -103
- data/lib/swagger_yard.rb +8 -4
- data/lib/swagger_yard/api_group.rb +106 -0
- data/lib/swagger_yard/authorization.rb +21 -18
- data/lib/swagger_yard/configuration.rb +6 -11
- data/lib/swagger_yard/example.rb +11 -0
- data/lib/swagger_yard/model.rb +16 -34
- data/lib/swagger_yard/openapi.rb +120 -0
- data/lib/swagger_yard/operation.rb +67 -50
- data/lib/swagger_yard/operation.rb.~9b471577ebed4e4ba6ed266566355dbe5990787d~ +161 -0
- data/lib/swagger_yard/parameter.rb +1 -18
- data/lib/swagger_yard/path_item.rb +21 -0
- data/lib/swagger_yard/property.rb +3 -16
- data/lib/swagger_yard/{resource_listing.rb → specification.rb} +21 -34
- data/lib/swagger_yard/swagger.rb +172 -4
- data/lib/swagger_yard/type.rb +20 -12
- data/lib/swagger_yard/type.rb.~master~ +34 -0
- data/lib/swagger_yard/type_parser.rb +10 -4
- data/lib/swagger_yard/version.rb +1 -1
- metadata +9 -5
- data/lib/swagger_yard/api.rb +0 -39
- data/lib/swagger_yard/api_declaration.rb +0 -72
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e95fe3850f449db0d3234e6b314bf76c3570f7d
|
4
|
+
data.tar.gz: 9f2e1c1a9d2a3731431e6d606a4023d7ae692326
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3609ee174c38e70038f0358b735c9c1ffdf73ca76c634d9e2f93f1d42f497d6f752b3cf0b1c9f18d58ce68ff426d8f254b09fb76da748dc8f2a5e87d3ea85b38
|
7
|
+
data.tar.gz: de11893ad4b1293ad2955617ebd967c2030d7347beb15ea6ac486de6769f0a12fa2e334822dae4c2790b2c83b95abe8f251f12cce897209bab2106d9d1217bd5
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# SwaggerYard [![Build Status](https://travis-ci.org/livingsocial/swagger_yard.svg?branch=master)](https://travis-ci.org/
|
1
|
+
# SwaggerYard [![Build Status](https://travis-ci.org/livingsocial/swagger_yard.svg?branch=master)](https://travis-ci.org/livingsocial/swagger_yard) #
|
2
2
|
|
3
|
-
SwaggerYard is a gem to convert
|
3
|
+
SwaggerYard is a gem to convert custom YARD tags in comments into Swagger 2.0 or OpenAPI 3.0.0 specs.
|
4
4
|
|
5
5
|
## Installation ##
|
6
6
|
|
@@ -15,89 +15,52 @@ Install the gem with Bunder:
|
|
15
15
|
|
16
16
|
## Getting Started ##
|
17
17
|
|
18
|
-
|
18
|
+
Place configuration in a Rails initializer or suitable configuration file:
|
19
19
|
|
20
20
|
# config/initializers/swagger_yard.rb
|
21
21
|
SwaggerYard.configure do |config|
|
22
22
|
config.api_version = "1.0"
|
23
|
-
|
23
|
+
|
24
|
+
config.title = 'Your API'
|
25
|
+
config.description = 'Your API does this'
|
24
26
|
|
25
27
|
# where your actual api is hosted from
|
26
28
|
config.api_base_path = "http://localhost:3000/api"
|
27
|
-
end
|
28
|
-
|
29
|
-
## SwaggerYard Usage ##
|
30
|
-
|
31
|
-
### Types ###
|
32
29
|
|
33
|
-
|
34
|
-
|
30
|
+
# Where to find controllers (can be an array of paths/globs)
|
31
|
+
config.controller_path = ::Rails.root + 'app/controllers/**/*'
|
35
32
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
- An array of models or basic types is specified with `[array<...>]`.
|
40
|
-
- An enum of allowed string values is specified with `[enum<one,two,three>]`.
|
41
|
-
- An object definition can include the property definitions of its fields, and / or of an additional property for any remaining allowed fields. E.g., `[object<name: string, age: integer, string >]`
|
42
|
-
- Structured data like objects, arrays, pairs, etc., definitions can also be nested; E.g., `[object<pairs:array<object<right:integer,left:integer>>>]`
|
43
|
-
- JSON-Schema `format` attributes can be specified for basic types using
|
44
|
-
`<...>`. For example, `[integer<int64>]` produces JSON
|
45
|
-
`{ "type": "integer", "format": "int64" }`.
|
46
|
-
- Regex pattern constraints can be specified for strings using
|
47
|
-
`[regex<PATTERN>]`. For example, `[regex<^.{3}$>]` produces JSON
|
48
|
-
`{ "type": "string", "pattern": "^.{3}$" }`.
|
49
|
-
|
50
|
-
### External Schema ###
|
33
|
+
# Where to find models (can be an array)
|
34
|
+
config.model_path = ::Rails.root + 'app/decorators/**/*'
|
35
|
+
end
|
51
36
|
|
52
|
-
|
53
|
-
```
|
54
|
-
{
|
55
|
-
"definitions": {
|
56
|
-
"MyStandardModel": {
|
57
|
-
}
|
58
|
-
}
|
59
|
-
}
|
60
|
-
```
|
37
|
+
Then start to annotate controllers and models as described below.
|
61
38
|
|
62
|
-
|
63
|
-
```ruby
|
64
|
-
SwaggerYard.configure do |config|
|
65
|
-
config.external_schema mymodels: 'https://example.com/mymodels/v1.0'
|
66
|
-
end
|
67
|
-
```
|
39
|
+
### Generate Specification ###
|
68
40
|
|
69
|
-
|
41
|
+
To generate a Swagger or OpenAPI specification, use one of the `SwaggerYard::Swagger` or `SwaggerYard::OpenAPI` classes as follows in a script or Rake task (or use [swagger_yard-rails](/livingsocial/swagger_yard-rails)):
|
70
42
|
|
71
43
|
```
|
72
|
-
|
44
|
+
spec = SwaggerYard::OpenAPI.new
|
45
|
+
# Generate YAML
|
46
|
+
File.open("openapi.yml", "w") { |f| f << YAML.dump(spec.to_h) }
|
47
|
+
# Generate JSON
|
48
|
+
File.open("openapi.json, "w") { |f| f << JSON.pretty_generate(spec.to_h) }
|
73
49
|
```
|
74
50
|
|
75
|
-
|
51
|
+
## Documenting APIs
|
76
52
|
|
77
|
-
|
78
|
-
following the parameter or property name.
|
53
|
+
Documenting controllers and models is best illustrated by example.
|
79
54
|
|
80
|
-
|
55
|
+
### Controller ###
|
81
56
|
|
82
|
-
|
83
|
-
# @parameter age(nullable) [integer] Age of package
|
84
|
-
# @parameter package(body) [Package] Package object
|
57
|
+
Each Swagger-ized controller must have a `@resource` tag naming the API to be documented. Without this tag, no endpoints will be generated.
|
85
58
|
|
86
|
-
|
87
|
-
|
88
|
-
- `required`: indicates a required parameter or property.
|
89
|
-
- `nullable`: indicates that JSON `null` is an allowed value for the property.
|
90
|
-
- `multiple`: indicates a parameter may appear multiple times (usually in a
|
91
|
-
query string, e.g., `param=a¶m=b¶m=c`)
|
92
|
-
- `body`/`query`/`path`/`formData`: Indicates where the parameter is located.
|
93
|
-
|
94
|
-
### Example of using SwaggerYard in a Controller ###
|
59
|
+
Then, document each controller action method that is an endpoint of the API. Each endpoint needs to have a `@path` tag at a minimum. `@parameter` tags and `@response_type`/`@response` tags specify the inputs and outputs to the endpoint. A request body is specified with the use of a single `@parameter` tag with a `(body)` option. (`@response_type` is shorthand for the type of the default response, while `@response` allows you to specify the HTTP status.)
|
95
60
|
|
96
61
|
```ruby
|
97
62
|
# @resource Account ownership
|
98
63
|
#
|
99
|
-
# @resource_path /accounts/ownerships
|
100
|
-
#
|
101
64
|
# This document describes the API for creating, reading, and deleting account ownerships.
|
102
65
|
#
|
103
66
|
class Accounts::OwnershipsController < ActionController::Base
|
@@ -118,7 +81,6 @@ class Accounts::OwnershipsController < ActionController::Base
|
|
118
81
|
# @parameter end_at_less [date] Filters response to include only items with end_at <= specified timestamp (e.g. end_at_less=2012-02-15T02:06:56Z).
|
119
82
|
#
|
120
83
|
def index
|
121
|
-
...
|
122
84
|
end
|
123
85
|
|
124
86
|
##
|
@@ -126,16 +88,26 @@ class Accounts::OwnershipsController < ActionController::Base
|
|
126
88
|
#
|
127
89
|
# @path [GET] /accounts/ownerships/{id}
|
128
90
|
# @response_type [Ownership]
|
129
|
-
# @
|
130
|
-
# @
|
91
|
+
# @response [EmptyOwnership] 404 Ownership not found
|
92
|
+
# @response 400 Invalid ID supplied
|
131
93
|
#
|
132
94
|
def show
|
133
|
-
|
95
|
+
end
|
96
|
+
|
97
|
+
##
|
98
|
+
# Creates an ownership for an account
|
99
|
+
#
|
100
|
+
# @path [POST] /accounts/ownerships
|
101
|
+
# @parameter ownership(body) [Ownership] The ownership to be created
|
102
|
+
# @response_type [Ownership]
|
103
|
+
def create
|
134
104
|
end
|
135
105
|
end
|
136
106
|
```
|
137
107
|
|
138
|
-
###
|
108
|
+
### Model ###
|
109
|
+
|
110
|
+
Each model to be exposed in the specification must have a `@model` tag. Model properties are specified with `@property` tags.
|
139
111
|
|
140
112
|
```ruby
|
141
113
|
#
|
@@ -192,10 +164,132 @@ module Models
|
|
192
164
|
end
|
193
165
|
```
|
194
166
|
|
167
|
+
### Types ###
|
168
|
+
|
169
|
+
Types of things (parameters or responses of an operation, properties of a model) are indicated inside square-brackets (e.g., `[string]`) as part of a YARD tag.
|
170
|
+
|
171
|
+
- Model references should be Capitalized or CamelCased by convention.
|
172
|
+
- Basic types (integer, boolean, string, object, number, date, time, date-time, uuid, etc.) should be lowercased.
|
173
|
+
- An array of models or basic types is specified with `[array<...>]`.
|
174
|
+
- An enum of allowed string values is specified with `[enum<one,two,three>]`.
|
175
|
+
- An object definition can include the property definitions of its fields, and / or of an additional property for any remaining allowed fields. E.g., `[object<name: string, age: integer, string >]`
|
176
|
+
- Structured data like objects, arrays, pairs, etc., definitions can also be nested; E.g., `[object<pairs:array<object<right:integer,left:integer>>>]`
|
177
|
+
- JSON-Schema `format` attributes can be specified for basic types using `<...>`. For example, `[integer<int64>]` produces JSON `{ "type": "integer", "format": "int64" }`.
|
178
|
+
- Regex pattern constraints can be specified for strings using `[regex<PATTERN>]`. For example, `[regex<^.{3}$>]` produces JSON `{ "type": "string", "pattern": "^.{3}$" }`.
|
179
|
+
|
180
|
+
### Options ###
|
181
|
+
|
182
|
+
Parameter or property _options_ are expressed inside parenthesis immediately
|
183
|
+
following the parameter or property name.
|
184
|
+
|
185
|
+
Examples:
|
186
|
+
|
187
|
+
# @parameter name(required) [string] Name of the package
|
188
|
+
# @parameter age(nullable) [integer] Age of package
|
189
|
+
# @parameter package(body) [Package] Package object
|
190
|
+
|
191
|
+
Possible parameters include:
|
192
|
+
|
193
|
+
- `required`: indicates a required parameter or property.
|
194
|
+
- `nullable`: indicates that JSON `null` is an allowed value for the property.
|
195
|
+
- `multiple`: indicates a parameter may appear multiple times (usually in a
|
196
|
+
query string, e.g., `param=a¶m=b¶m=c`)
|
197
|
+
- `body`/`query`/`path`/`formData`: Indicates where the parameter is located.
|
198
|
+
|
199
|
+
### Examples
|
200
|
+
|
201
|
+
The Swagger and OpenAPI specs both allow for [specifying example data](https://swagger.io/docs/specification/adding-examples/) at multiple levels. SwaggerYard allows you to use an `@example` tag to specify example JSON data at the response, model, and individual property levels.
|
202
|
+
|
203
|
+
The basic format of an `@example` is:
|
204
|
+
|
205
|
+
```ruby
|
206
|
+
# @example [name]
|
207
|
+
# body content
|
208
|
+
# should be indented
|
209
|
+
# and can span
|
210
|
+
# multiple lines
|
211
|
+
```
|
212
|
+
|
213
|
+
#### Response examples
|
214
|
+
|
215
|
+
Response examples should appear in a method documentation block inside a controller, alongside the parameters and response tags. Use a named `@example` to associate the example with a specific response, or use an unnammed example to associate the data to the default response (when using a `@response_type` tag).
|
216
|
+
|
217
|
+
```ruby
|
218
|
+
# return a Pet
|
219
|
+
# @path [GET] /pets/{id}
|
220
|
+
# @parameter id [integer] The ID for the Pet
|
221
|
+
# @response_type [Pet]
|
222
|
+
# @response [ErrorPet] 404 Pet not found
|
223
|
+
# @example
|
224
|
+
# {"id": 1, "names": ["Fido"], "age": 12}
|
225
|
+
# @example 404
|
226
|
+
# {"error": 404, "message": "Pet not found"}
|
227
|
+
def show
|
228
|
+
end
|
229
|
+
```
|
230
|
+
|
231
|
+
#### Model examples
|
232
|
+
|
233
|
+
Use a model example to specify an example for the entire model at once. The example tag should omit any name to associate the data with the model itself and not a single property.
|
234
|
+
|
235
|
+
```ruby
|
236
|
+
# @model
|
237
|
+
# @property id(required) [integer]
|
238
|
+
# @property name [string]
|
239
|
+
# @example
|
240
|
+
# {"id": 42, "name": "Fred Flintstone"}
|
241
|
+
class Person
|
242
|
+
end
|
243
|
+
```
|
244
|
+
|
245
|
+
### Property examples
|
246
|
+
|
247
|
+
Use property examples to specify data for individual properties. To associate the example data, the `@example` tag must use the same name as the property and appear _after_ the property.
|
248
|
+
|
249
|
+
```ruby
|
250
|
+
# @model
|
251
|
+
# @property id(required) [integer]
|
252
|
+
# @example id
|
253
|
+
# 42
|
254
|
+
# @property name [string]
|
255
|
+
# @example name
|
256
|
+
# "Fred Flintstone"
|
257
|
+
class Person
|
258
|
+
end
|
259
|
+
```
|
260
|
+
|
261
|
+
|
262
|
+
### External Schema ###
|
263
|
+
|
264
|
+
Types can be specified that refer to external JSON schema documents for their definition. External schema documents are expected to also define their models under a `definitions` top-level key like so:
|
265
|
+
```
|
266
|
+
{
|
267
|
+
"definitions": {
|
268
|
+
"MyStandardModel": {
|
269
|
+
}
|
270
|
+
}
|
271
|
+
}
|
272
|
+
```
|
273
|
+
|
274
|
+
To register an external schema so that it can be referenced in places where you specify a type, configure SwaggerYard as follows:
|
275
|
+
```ruby
|
276
|
+
SwaggerYard.configure do |config|
|
277
|
+
config.external_schema mymodels: 'https://example.com/mymodels/v1.0'
|
278
|
+
end
|
279
|
+
```
|
280
|
+
|
281
|
+
Then refer to models in the schema using the syntax `[mymodels#MyStandardModel]` where types are specified. This causes SwaggerYard to emit the following schema for the type:
|
282
|
+
|
283
|
+
```
|
284
|
+
{ "$ref": "https://example.com/mymodels/v1.0#/definitions/MyStandardModel" }
|
285
|
+
```
|
286
|
+
|
287
|
+
|
195
288
|
## Authorization ##
|
289
|
+
|
196
290
|
### API Key auth ###
|
197
291
|
|
198
|
-
SwaggerYard supports
|
292
|
+
SwaggerYard supports several authorization styles. Start by adding `@authorization` to your `ApplicationController`.
|
199
293
|
|
200
294
|
```ruby
|
201
295
|
#
|
@@ -205,7 +299,7 @@ class ApplicationController < ActionController::Base
|
|
205
299
|
end
|
206
300
|
```
|
207
301
|
|
208
|
-
Then you can use these authorizations from your controller or actions in a controller.
|
302
|
+
Then you can use these authorizations from your controller or actions in a controller.
|
209
303
|
|
210
304
|
```ruby
|
211
305
|
#
|
@@ -215,16 +309,38 @@ class PetController < ApplicationController
|
|
215
309
|
end
|
216
310
|
```
|
217
311
|
|
218
|
-
|
312
|
+
Supported formats for the `@authorization` tag are as follows:
|
313
|
+
|
314
|
+
```ruby
|
315
|
+
# @authorization [apiKey] (query|header|cookie) key-name The rest is a description
|
316
|
+
# @authorization [bearer] mybearerauth bearer-format The rest is a description
|
317
|
+
# @authorization [basic] mybasicauth The rest is a description
|
318
|
+
# @authorization [digest] digestauth The rest is a description
|
319
|
+
# @authorization [<any-rfc7235-auth>] myrfcauth The rest is a description
|
219
320
|
|
220
|
-
|
321
|
+
- For `apiKey` the name of the authorization is formed as `"#{location}_#{key_name}".downcase.gsub('-','_')`.
|
322
|
+
Example: `@authorization [apiKey] header X-API-Key` is named `header_x_api_key`. (This naming scheme is kept for backwards compatibility.)
|
323
|
+
|
324
|
+
- All others are named by the tag name following the `[type]`.
|
325
|
+
Example: `@authorization [bearer] myBearerAuth Format Description` is named `myBearerAuth`.
|
326
|
+
|
327
|
+
### Custom security schemes ###
|
328
|
+
|
329
|
+
SwaggerYard also supports custom [security schemes](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#security-scheme-object). You can define these in your configuration like:
|
221
330
|
|
222
331
|
```ruby
|
223
332
|
SwaggerYard.configure do |config|
|
224
|
-
config.
|
333
|
+
config.security_schemes['petstore_oauth'] = {
|
225
334
|
type: "oauth2",
|
226
|
-
|
227
|
-
|
335
|
+
flows: {
|
336
|
+
implicit: {
|
337
|
+
authorizationUrl: "http://swagger.io/api/oauth/dialog",
|
338
|
+
scopes: {
|
339
|
+
"write:pets": "modify pets in your account",
|
340
|
+
"read:pets": "read your pets"
|
341
|
+
}
|
342
|
+
}
|
343
|
+
}
|
228
344
|
}
|
229
345
|
end
|
230
346
|
```
|
@@ -237,38 +353,11 @@ class PetController < ApplicationController
|
|
237
353
|
end
|
238
354
|
```
|
239
355
|
|
240
|
-
## UI ##
|
241
|
-
|
242
|
-
We suggest using something like [swagger-ui_rails](https://github.com/3scale/swagger-ui_rails/tree/dev-2.1.3) for your UI needs inside of Rails.
|
243
356
|
|
244
|
-
|
245
|
-
|
246
|
-
## More Information ##
|
247
|
-
|
248
|
-
* [swagger-ui_rails](https://github.com/3scale/swagger-ui_rails/tree/dev-2.1.3)
|
249
|
-
* [swagger_yard-rails](https://github.com/livingsocial/swagger_yard-rails)
|
250
|
-
* [Swagger-spec version 2.0](https://github.com/wordnik/swagger-spec/blob/master/versions/2.0.md)
|
251
|
-
* [Yard](https://github.com/lsegal/yard)
|
357
|
+
### Better Rails integration with swagger_yard-rails
|
252
358
|
|
253
|
-
|
359
|
+
To generate specifications from your Rails app on request, check out the [swagger_yard-rails](https://github.com/livingsocial/swagger_yard-rails) project. This provides an engine that has a mountable endpoint that will parse the source code and render the specification as a json document.
|
254
360
|
|
255
|
-
```
|
256
|
-
ResourceListing
|
257
|
-
|
|
258
|
-
-> ApiDeclaration (controller)
|
259
|
-
| |
|
260
|
-
| -> ListingInfo (controller class)
|
261
|
-
| -> Authorization (header/param for auth, also added to ResourceListing?)
|
262
|
-
| -> Api(s) (controller action, by path)
|
263
|
-
| |
|
264
|
-
| -> Operation(s) (controller action with HTTP method)
|
265
|
-
| |
|
266
|
-
| -> Parameter(s) (action param)
|
267
|
-
|
|
268
|
-
-> Model (model)
|
269
|
-
|
|
270
|
-
-> Properties (model attributes)
|
271
|
-
```
|
272
361
|
|
273
362
|
### Path Discovery Function ##
|
274
363
|
|
@@ -281,7 +370,7 @@ any can be determined.
|
|
281
370
|
SwaggerYard.configure do |config|
|
282
371
|
config.path_discovery_function = ->(yard_obj) do
|
283
372
|
# code here to inspect the yard doc object
|
284
|
-
|
373
|
+
# and return a [method, path] for the api
|
285
374
|
end
|
286
375
|
end
|
287
376
|
```
|
@@ -289,4 +378,14 @@ end
|
|
289
378
|
In [swagger_yard-rails][], this hook is used to set a function that inspects the
|
290
379
|
Rails routing tables to reverse look up and compute paths.
|
291
380
|
|
381
|
+
|
382
|
+
## More Information ##
|
383
|
+
|
384
|
+
* [swagger_yard-rails][]
|
385
|
+
* [Swagger-spec version 2.0](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md)
|
386
|
+
* [OpenAPI version 3.0.0](https://swagger.io/docs/specification/about/)
|
387
|
+
* [Yard](https://github.com/lsegal/yard)
|
388
|
+
|
389
|
+
|
292
390
|
[swagger_yard-rails]: https://github.com/livingsocial/swagger_yard-rails
|
391
|
+
|
data/lib/swagger_yard.rb
CHANGED
@@ -3,15 +3,17 @@ require "json"
|
|
3
3
|
require "swagger_yard/configuration"
|
4
4
|
require "swagger_yard/type"
|
5
5
|
require "swagger_yard/type_parser"
|
6
|
+
require "swagger_yard/example"
|
6
7
|
require "swagger_yard/parameter"
|
7
8
|
require "swagger_yard/property"
|
8
9
|
require "swagger_yard/operation"
|
9
10
|
require "swagger_yard/authorization"
|
10
|
-
require "swagger_yard/
|
11
|
-
require "swagger_yard/
|
11
|
+
require "swagger_yard/specification"
|
12
|
+
require "swagger_yard/api_group"
|
12
13
|
require "swagger_yard/model"
|
13
|
-
require "swagger_yard/
|
14
|
+
require "swagger_yard/path_item"
|
14
15
|
require "swagger_yard/swagger"
|
16
|
+
require "swagger_yard/openapi"
|
15
17
|
|
16
18
|
module SwaggerYard
|
17
19
|
class Error < StandardError; end
|
@@ -98,11 +100,11 @@ module SwaggerYard
|
|
98
100
|
# Register some custom yard tags used by swagger-ui
|
99
101
|
def register_custom_yard_tags!
|
100
102
|
::YARD::Tags::Library.define_tag("Api resource", :resource)
|
101
|
-
::YARD::Tags::Library.define_tag("Resource path", :resource_path) # TODO: remove deprecated tag
|
102
103
|
::YARD::Tags::Library.define_tag("Api path", :path, :with_types)
|
103
104
|
::YARD::Tags::Library.define_tag("Parameter", :parameter, :with_types_name_and_default)
|
104
105
|
::YARD::Tags::Library.define_tag("Response type", :response_type, :with_types)
|
105
106
|
::YARD::Tags::Library.define_tag("Error response message", :error_message, :with_types_and_name)
|
107
|
+
::YARD::Tags::Library.define_tag("Response", :response, :with_types_and_name)
|
106
108
|
::YARD::Tags::Library.define_tag("Api Summary", :summary)
|
107
109
|
::YARD::Tags::Library.define_tag("Model resource", :model)
|
108
110
|
::YARD::Tags::Library.define_tag("Model superclass", :inherits)
|
@@ -110,6 +112,8 @@ module SwaggerYard
|
|
110
112
|
::YARD::Tags::Library.define_tag("Model discriminator", :discriminator, :with_types_name_and_default)
|
111
113
|
::YARD::Tags::Library.define_tag("Authorization", :authorization, :with_types_and_name)
|
112
114
|
::YARD::Tags::Library.define_tag("Authorization Use", :authorize_with)
|
115
|
+
# @example is a core YARD tag, let's use it
|
116
|
+
# ::YARD::Tags::Library.define_tag("Example", :example, :with_title_and_text)
|
113
117
|
end
|
114
118
|
end
|
115
119
|
end
|