swagger-blocks 1.4.0 → 2.0.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/README.md +7 -6
- data/lib/swagger/blocks.rb +28 -775
- data/lib/swagger/blocks/class_methods.rb +65 -0
- data/lib/swagger/blocks/errors.rb +8 -0
- data/lib/swagger/blocks/internal_helpers.rb +52 -0
- data/lib/swagger/blocks/node.rb +64 -0
- data/lib/swagger/blocks/nodes/all_of_node.rb +42 -0
- data/lib/swagger/blocks/nodes/contact_node.rb +9 -0
- data/lib/swagger/blocks/nodes/example_node.rb +9 -0
- data/lib/swagger/blocks/nodes/external_docs_node.rb +9 -0
- data/lib/swagger/blocks/nodes/header_node.rb +12 -0
- data/lib/swagger/blocks/nodes/info_node.rb +16 -0
- data/lib/swagger/blocks/nodes/items_node.rb +14 -0
- data/lib/swagger/blocks/nodes/license_node.rb +9 -0
- data/lib/swagger/blocks/nodes/operation_node.rb +30 -0
- data/lib/swagger/blocks/nodes/parameter_node.rb +16 -0
- data/lib/swagger/blocks/nodes/path_node.rb +24 -0
- data/lib/swagger/blocks/nodes/properties_node.rb +11 -0
- data/lib/swagger/blocks/nodes/property_node.rb +17 -0
- data/lib/swagger/blocks/nodes/response_node.rb +24 -0
- data/lib/swagger/blocks/nodes/root_node.rb +53 -0
- data/lib/swagger/blocks/nodes/schema_node.rb +30 -0
- data/lib/swagger/blocks/nodes/scopes_node.rb +9 -0
- data/lib/swagger/blocks/nodes/security_requirement_node.rb +9 -0
- data/lib/swagger/blocks/nodes/security_scheme_node.rb +14 -0
- data/lib/swagger/blocks/nodes/tag_node.rb +15 -0
- data/lib/swagger/blocks/nodes/xml_node.rb +9 -0
- data/lib/swagger/blocks/root.rb +25 -0
- data/lib/swagger/blocks/version.rb +1 -1
- data/spec/lib/swagger_v2_blocks_spec.rb +0 -5
- metadata +28 -9
- data/README_v1_2.md +0 -143
- data/spec/lib/swagger_api_declaration.json +0 -201
- data/spec/lib/swagger_blocks_spec.rb +0 -349
- data/spec/lib/swagger_resource_listing.json +0 -60
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a714aa2b6fbb1add356e052e03c827226ef6a401
|
4
|
+
data.tar.gz: 36c7a3f585dcbcd8e4b90994a8e99053e651e035
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3cabc6e8842e9e75dfc4d5f5dace3db91d49a37cbac643d0b341abdbd814f34f5f2f51b8621df2e0417f86bc969685bddbbc0aee6cac8e185911128e7f95e516
|
7
|
+
data.tar.gz: 9cbf2507bc76247123d13527a6e28f3833029d80d04b58f411fef9a3705be2e0becc8430fe034672dba74d328be71c02f16379b68a5a45176f2357a62412ce8a
|
data/README.md
CHANGED
@@ -11,7 +11,7 @@ It helps you write API docs in the [Swagger](https://helloreverb.com/developers/
|
|
11
11
|
|
12
12
|
* Supports **live updating** by design. Change code, refresh your API docs.
|
13
13
|
* **Works with all Ruby web frameworks** including Rails, Sinatra, etc.
|
14
|
-
* **100% support** for all features of the [Swagger 2.0](https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md)
|
14
|
+
* **100% support** for all features of the [Swagger 2.0](https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md) spec.
|
15
15
|
* Flexible—you can use Swagger::Blocks anywhere, split up blocks to fit your style preferences, etc. Since it's pure Ruby and serves definitions dynamically, you can easily use initializers/config objects to change values or even **show different APIs based on environment**.
|
16
16
|
* 1:1 naming with the Swagger spec—block names and nesting should match almost exactly with the swagger spec, with rare exceptions to make things more convenient.
|
17
17
|
|
@@ -31,7 +31,7 @@ Or install directly with `gem install swagger-blocks`.
|
|
31
31
|
|
32
32
|
## Swagger 2.0 example (Rails)
|
33
33
|
|
34
|
-
This is a simplified example based on the objects in the Petstore [Swagger Sample App](http://petstore.swagger.wordnik.com/#!/pet). For a more complex and complete example, see the [swagger_v2_blocks_spec.rb](https://github.com/fotinakis/swagger-blocks/blob/master/spec/lib/swagger_v2_blocks_spec.rb) file
|
34
|
+
This is a simplified example based on the objects in the Petstore [Swagger Sample App](http://petstore.swagger.wordnik.com/#!/pet). For a more complex and complete example, see the [swagger_v2_blocks_spec.rb](https://github.com/fotinakis/swagger-blocks/blob/master/spec/lib/swagger_v2_blocks_spec.rb) file.
|
35
35
|
|
36
36
|
Also note that **Rails is not required**, you can use Swagger::Blocks in plain Ruby objects.
|
37
37
|
|
@@ -439,14 +439,14 @@ operation :post do
|
|
439
439
|
end
|
440
440
|
```
|
441
441
|
|
442
|
-
### Swagger 1.2 example (Rails)
|
443
|
-
|
444
|
-
See the [v1.2 docs](https://github.com/fotinakis/swagger-blocks/blob/master/README_v1_2.md).
|
445
|
-
|
446
442
|
## Reference
|
447
443
|
|
448
444
|
See the [swagger_v2_blocks_spec.rb](https://github.com/fotinakis/swagger-blocks/blob/master/spec/lib/swagger_v2_blocks_spec.rb) for examples of more complex features and declarations possible.
|
449
445
|
|
446
|
+
### Swagger 1.2
|
447
|
+
|
448
|
+
The old [Swagger 1.2](https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md) spec is not supported in swagger-blocks >= 2.0.0, but you may use [1.4.0](https://github.com/fotinakis/swagger-blocks/tree/v1.4.0).
|
449
|
+
|
450
450
|
## Contributing
|
451
451
|
|
452
452
|
1. Fork it ( https://github.com/fotinakis/swagger-blocks/fork )
|
@@ -471,6 +471,7 @@ Throw a ★ on it! :)
|
|
471
471
|
|
472
472
|
## Release notes
|
473
473
|
|
474
|
+
* v2.0.0: Code cleanup, drop support for Swagger 1.2 spec.
|
474
475
|
* v1.4.0: Allow parameters to be defined once in swagger_root and reused.
|
475
476
|
* v1.3.4: Fix support for fully-qualified URIs in `$ref` values.
|
476
477
|
* v1.3.3: Bugfix to allow `parameter` inside `swagger_path`.
|
data/lib/swagger/blocks.rb
CHANGED
@@ -1,781 +1,34 @@
|
|
1
|
-
require '
|
2
|
-
require 'swagger/blocks/
|
1
|
+
require 'swagger/blocks/root'
|
2
|
+
require 'swagger/blocks/internal_helpers'
|
3
|
+
require 'swagger/blocks/class_methods'
|
4
|
+
require 'swagger/blocks/errors'
|
3
5
|
|
4
6
|
module Swagger
|
5
7
|
module Blocks
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
def self.build_api_json(resource_name, swaggered_classes)
|
32
|
-
data = Swagger::Blocks::InternalHelpers.parse_swaggered_classes(swaggered_classes)
|
33
|
-
if !data[:root_node].is_swagger_1_2?
|
34
|
-
raise NotSupportedError.new(
|
35
|
-
'build_api_json only supports Swagger 1.2, you do not need to call this method ' +
|
36
|
-
'for Swagger >= 2.0 definitions.'
|
37
|
-
)
|
38
|
-
end
|
39
|
-
|
40
|
-
api_node = data[:api_node_map][resource_name.to_sym]
|
41
|
-
raise Swagger::Blocks::NotFoundError.new(
|
42
|
-
"Not found: swagger_api_root named #{resource_name}") if !api_node
|
43
|
-
|
44
|
-
# Aggregate all model definitions into a new ModelsNode tree and add it to the JSON.
|
45
|
-
temp_models_node = Swagger::Blocks::ModelsNode.call(name: 'models') { }
|
46
|
-
data[:models_nodes].each { |models_node| temp_models_node.merge!(models_node) }
|
47
|
-
result = api_node.as_json
|
48
|
-
result.merge!(temp_models_node.as_json) if temp_models_node
|
49
|
-
result
|
50
|
-
end
|
51
|
-
|
52
|
-
module InternalHelpers
|
53
|
-
# Return [root_node, api_node_map] from all of the given swaggered_classes.
|
54
|
-
def self.parse_swaggered_classes(swaggered_classes)
|
55
|
-
root_nodes = []
|
56
|
-
|
57
|
-
api_node_map = {}
|
58
|
-
models_nodes = []
|
59
|
-
|
60
|
-
path_node_map = {}
|
61
|
-
schema_node_map = {}
|
62
|
-
swaggered_classes.each do |swaggered_class|
|
63
|
-
next unless swaggered_class.respond_to?(:_swagger_nodes, true)
|
64
|
-
swagger_nodes = swaggered_class.send(:_swagger_nodes)
|
65
|
-
root_node = swagger_nodes[:root_node]
|
66
|
-
root_nodes << root_node if root_node
|
67
|
-
|
68
|
-
# 2.0
|
69
|
-
if swagger_nodes[:path_node_map]
|
70
|
-
path_node_map.merge!(swagger_nodes[:path_node_map])
|
71
|
-
end
|
72
|
-
if swagger_nodes[:schema_node_map]
|
73
|
-
schema_node_map.merge!(swagger_nodes[:schema_node_map])
|
74
|
-
end
|
75
|
-
|
76
|
-
# 1.2
|
77
|
-
if swagger_nodes[:api_node_map]
|
78
|
-
api_node_map.merge!(swagger_nodes[:api_node_map])
|
79
|
-
end
|
80
|
-
if swagger_nodes[:models_node]
|
81
|
-
models_nodes << swagger_nodes[:models_node]
|
82
|
-
end
|
83
|
-
end
|
84
|
-
data = {root_node: self.limit_root_node(root_nodes)}
|
85
|
-
if data[:root_node].is_swagger_2_0?
|
86
|
-
data[:path_nodes] = path_node_map
|
87
|
-
data[:schema_nodes] = schema_node_map
|
88
|
-
else
|
89
|
-
data[:api_node_map] = api_node_map
|
90
|
-
data[:models_nodes] = models_nodes
|
91
|
-
end
|
92
|
-
data
|
93
|
-
end
|
94
|
-
|
95
|
-
# Make sure there is exactly one root_node and return it.
|
96
|
-
# TODO should this merge the contents of the root nodes instead?
|
97
|
-
def self.limit_root_node(root_nodes)
|
98
|
-
if root_nodes.length == 0
|
99
|
-
raise Swagger::Blocks::DeclarationError.new(
|
100
|
-
'swagger_root must be declared')
|
101
|
-
elsif root_nodes.length > 1
|
102
|
-
raise Swagger::Blocks::DeclarationError.new(
|
103
|
-
'Only one swagger_root declaration is allowed.')
|
104
|
-
end
|
105
|
-
root_nodes.first
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
module ClassMethods
|
110
|
-
private
|
111
|
-
|
112
|
-
# v1.2: Defines a Swagger Resource Listing.
|
113
|
-
# v1.2: http://goo.gl/PvwUXj#51-resource-listing
|
114
|
-
# v2.0: Defines a Swagger Object
|
115
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#swagger-object
|
116
|
-
def swagger_root(inline_keys = nil, &block)
|
117
|
-
@swagger_root_node ||= Swagger::Blocks::RootNode.call(inline_keys: inline_keys, &block)
|
118
|
-
end
|
119
|
-
|
120
|
-
# v1.2: Defines a Swagger API Declaration.
|
121
|
-
# v1.2: http://goo.gl/PvwUXj#52-api-declaration
|
122
|
-
# v1.2:
|
123
|
-
# v1.2: @param resource_name [Symbol] An identifier for this API. All swagger_api_root declarations
|
124
|
-
# v1.2: with the same resource_name will be into a single API root node.
|
125
|
-
def swagger_api_root(resource_name, inline_keys = nil, &block)
|
126
|
-
resource_name = resource_name.to_sym
|
127
|
-
|
128
|
-
# Map of path names to ApiDeclarationNodes.
|
129
|
-
@swagger_api_root_node_map ||= {}
|
130
|
-
|
131
|
-
# Grab a previously declared node if it exists, otherwise create a new ApiDeclarationNode.
|
132
|
-
# This merges all declarations of swagger_api_root with the same resource_name key.
|
133
|
-
api_node = @swagger_api_root_node_map[resource_name]
|
134
|
-
if api_node
|
135
|
-
# Merge this swagger_api_root declaration into the previous one by the same resource_name.
|
136
|
-
api_node.instance_eval(&block)
|
137
|
-
else
|
138
|
-
# First time we've seen this `swagger_api_root :resource_name`.
|
139
|
-
api_node = Swagger::Blocks::ApiDeclarationNode.call(version: '1.2', inline_keys: inline_keys, &block)
|
140
|
-
end
|
141
|
-
|
142
|
-
# Add it into the resource_name to node map (may harmlessly overwrite the same object).
|
143
|
-
@swagger_api_root_node_map[resource_name] = api_node
|
144
|
-
end
|
145
|
-
|
146
|
-
# v2.0: Defines a Swagger Path Item object
|
147
|
-
# https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#path-item-object
|
148
|
-
def swagger_path(path, &block)
|
149
|
-
path = path.to_sym
|
150
|
-
|
151
|
-
# TODO enforce that path name begins with a '/'
|
152
|
-
# (or x- , but need to research Vendor Extensions first)
|
153
|
-
|
154
|
-
@swagger_path_node_map ||= {}
|
155
|
-
|
156
|
-
path_node = @swagger_path_node_map[path]
|
157
|
-
if path_node
|
158
|
-
# Merge this path declaration into the previous one
|
159
|
-
path_node.instance_eval(&block)
|
160
|
-
else
|
161
|
-
# First time we've seen this path
|
162
|
-
@swagger_path_node_map[path] = Swagger::Blocks::PathNode.call(version: '2.0', &block)
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
# v1.2: Defines a Swagger Model.
|
167
|
-
# v1.2: http://goo.gl/PvwUXj#526-models-object
|
168
|
-
def swagger_model(name, inline_keys = nil, &block)
|
169
|
-
@swagger_models_node ||= Swagger::Blocks::ModelsNode.new
|
170
|
-
@swagger_models_node.version = '1.2'
|
171
|
-
@swagger_models_node.model(name, inline_keys, &block)
|
172
|
-
end
|
173
|
-
|
174
|
-
# v2.0: Defines a Swagger Definition Schema,
|
175
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#definitionsObject and
|
176
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#schema-object
|
177
|
-
def swagger_schema(name, inline_keys = nil, &block)
|
178
|
-
@swagger_schema_node_map ||= {}
|
179
|
-
|
180
|
-
schema_node = @swagger_schema_node_map[name]
|
181
|
-
if schema_node
|
182
|
-
# Merge this schema_node declaration into the previous one
|
183
|
-
schema_node.instance_eval(&block)
|
184
|
-
else
|
185
|
-
# First time we've seen this schema_node
|
186
|
-
@swagger_schema_node_map[name] = Swagger::Blocks::SchemaNode.call(version: '2.0', inline_keys: inline_keys, &block)
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
def _swagger_nodes
|
191
|
-
# Avoid initialization warnings.
|
192
|
-
@swagger_root_node ||= nil
|
193
|
-
@swagger_path_node_map ||= {}
|
194
|
-
@swagger_schema_node_map ||= nil
|
195
|
-
@swagger_api_root_node_map ||= {}
|
196
|
-
@swagger_models_node ||= nil
|
197
|
-
|
198
|
-
data = {root_node: @swagger_root_node}
|
199
|
-
data[:path_node_map] = @swagger_path_node_map
|
200
|
-
data[:schema_node_map] = @swagger_schema_node_map
|
201
|
-
data[:api_node_map] = @swagger_api_root_node_map
|
202
|
-
data[:models_node] = @swagger_models_node
|
203
|
-
data
|
204
|
-
end
|
205
|
-
|
206
|
-
end
|
207
|
-
|
208
|
-
# -----
|
209
|
-
|
210
|
-
# Base node for representing every object in the Swagger DSL.
|
211
|
-
class Node
|
212
|
-
attr_accessor :name
|
213
|
-
attr_writer :version
|
214
|
-
|
215
|
-
def self.call(options = {}, &block)
|
216
|
-
# Create a new instance and evaluate the block into it.
|
217
|
-
instance = new
|
218
|
-
instance.name = options[:name] if options[:name]
|
219
|
-
instance.version = options[:version]
|
220
|
-
instance.keys options[:inline_keys]
|
221
|
-
instance.instance_eval(&block) if block
|
222
|
-
instance
|
223
|
-
end
|
224
|
-
|
225
|
-
def as_json
|
226
|
-
result = {}
|
227
|
-
|
228
|
-
self.data.each do |key, value|
|
229
|
-
if value.is_a?(Node)
|
230
|
-
result[key] = value.as_json
|
231
|
-
elsif value.is_a?(Array)
|
232
|
-
result[key] = []
|
233
|
-
value.each { |v| result[key] << (v.respond_to?(:as_json) ? v.as_json : v) }
|
234
|
-
elsif is_swagger_2_0? && value.is_a?(Hash)
|
235
|
-
result[key] = {}
|
236
|
-
value.each_pair {|k, v| result[key][k] = (v.respond_to?(:as_json) ? v.as_json : v) }
|
237
|
-
elsif is_swagger_2_0? && key.to_s.eql?('$ref') && (value.to_s !~ %r{^#/|https?://})
|
238
|
-
result[key] = "#/definitions/#{value}"
|
239
|
-
else
|
240
|
-
result[key] = value
|
241
|
-
end
|
242
|
-
end
|
243
|
-
return result if !name
|
244
|
-
# If 'name' is given to this node, wrap the data with a root element with the given name.
|
245
|
-
{name => result}
|
246
|
-
end
|
247
|
-
|
248
|
-
def data
|
249
|
-
@data ||= {}
|
250
|
-
end
|
251
|
-
|
252
|
-
def keys(data)
|
253
|
-
self.data.merge!(data) if data
|
254
|
-
end
|
255
|
-
|
256
|
-
def key(key, value)
|
257
|
-
self.data[key] = value
|
258
|
-
end
|
259
|
-
|
260
|
-
def version
|
261
|
-
return @version if instance_variable_defined?('@version') && @version
|
262
|
-
if data.has_key?(:swagger) && data[:swagger] == '2.0'
|
263
|
-
'2.0'
|
264
|
-
elsif data.has_key?(:swaggerVersion) && data[:swaggerVersion] == '1.2'
|
265
|
-
'1.2'
|
266
|
-
else
|
267
|
-
raise DeclarationError.new("You must specify swaggerVersion '1.2' or swagger '2.0'")
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
def is_swagger_1_2?
|
272
|
-
version == '1.2'
|
273
|
-
end
|
274
|
-
|
275
|
-
def is_swagger_2_0?
|
276
|
-
version == '2.0'
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
class RootNode < Node
|
281
|
-
def initialize(*args)
|
282
|
-
# An internal list of the user-defined names that uniquely identify each API tree.
|
283
|
-
# Only used in Swagger 1.2, but when initializing a root node we haven't seen the
|
284
|
-
# swaggerVersion/swagger key yet
|
285
|
-
@api_paths = []
|
286
|
-
super
|
287
|
-
end
|
288
|
-
|
289
|
-
def has_api_path?(api_path)
|
290
|
-
raise NotSupportedError unless is_swagger_1_2?
|
291
|
-
|
292
|
-
api_paths = self.data[:apis].map { |x| x.data[:path] }
|
293
|
-
api_paths.include?(api_path)
|
294
|
-
end
|
295
|
-
|
296
|
-
def authorization(name, inline_keys = nil, &block)
|
297
|
-
raise NotSupportedError unless is_swagger_1_2?
|
298
|
-
|
299
|
-
self.data[:authorizations] ||= Swagger::Blocks::ResourceListingAuthorizationsNode.new
|
300
|
-
self.data[:authorizations].version = version
|
301
|
-
self.data[:authorizations].authorization(name, inline_keys, &block)
|
302
|
-
end
|
303
|
-
|
304
|
-
def info(inline_keys = nil, &block)
|
305
|
-
self.data[:info] = Swagger::Blocks::InfoNode.call(version: version, inline_keys: inline_keys, &block)
|
306
|
-
end
|
307
|
-
|
308
|
-
def api(inline_keys = nil, &block)
|
309
|
-
raise NotSupportedError unless is_swagger_1_2?
|
310
|
-
|
311
|
-
self.data[:apis] ||= []
|
312
|
-
self.data[:apis] << Swagger::Blocks::ResourceNode.call(version: version, inline_keys: inline_keys ,&block)
|
313
|
-
end
|
314
|
-
|
315
|
-
def parameter(param, inline_keys = nil, &block)
|
316
|
-
raise NotSupportedError unless is_swagger_2_0?
|
317
|
-
|
318
|
-
# TODO validate 'param' is as per spec
|
319
|
-
self.data[:parameters] ||= {}
|
320
|
-
self.data[:parameters][param] = Swagger::Blocks::ParameterNode.call(version: version, inline_keys: inline_keys, &block)
|
321
|
-
end
|
322
|
-
|
323
|
-
def response(resp, inline_keys = nil, &block)
|
324
|
-
raise NotSupportedError unless is_swagger_2_0?
|
325
|
-
|
326
|
-
# TODO validate 'resp' is as per spec
|
327
|
-
self.data[:responses] ||= {}
|
328
|
-
self.data[:responses][resp] = Swagger::Blocks::ResponseNode.call(version: version, inline_keys: inline_keys, &block)
|
329
|
-
end
|
330
|
-
|
331
|
-
def security_definition(name, inline_keys = nil, &block)
|
332
|
-
raise NotSupportedError unless is_swagger_2_0?
|
333
|
-
|
334
|
-
self.data[:securityDefinitions] ||= {}
|
335
|
-
self.data[:securityDefinitions][name] = Swagger::Blocks::SecuritySchemeNode.call(version: version, inline_keys: inline_keys, &block)
|
336
|
-
end
|
337
|
-
|
338
|
-
def security(inline_keys = nil, &block)
|
339
|
-
raise NotSupportedError unless is_swagger_2_0?
|
340
|
-
|
341
|
-
self.data[:security] ||= []
|
342
|
-
self.data[:security] << Swagger::Blocks::SecurityRequirementNode.call(version: version, inline_keys: inline_keys, &block)
|
343
|
-
end
|
344
|
-
|
345
|
-
def tag(inline_keys = nil, &block)
|
346
|
-
raise NotSupportedError unless is_swagger_2_0?
|
347
|
-
|
348
|
-
self.data[:tags] ||= []
|
349
|
-
self.data[:tags] << Swagger::Blocks::TagNode.call(version: version, inline_keys: inline_keys, &block)
|
350
|
-
end
|
351
|
-
|
352
|
-
# Use 'tag' instead.
|
353
|
-
# @deprecated
|
354
|
-
alias_method :tags, :tag
|
355
|
-
end
|
356
|
-
|
357
|
-
# v1.2: http://goo.gl/PvwUXj#512-resource-object
|
358
|
-
class ResourceNode < Node; end
|
359
|
-
|
360
|
-
# v1.2: NOTE: in the spec this is different than API Declaration authorizations.
|
361
|
-
# v1.2: http://goo.gl/PvwUXj#514-authorizations-object
|
362
|
-
class ResourceListingAuthorizationsNode < Node
|
363
|
-
def authorization(name, inline_keys = nil, &block)
|
364
|
-
self.data[name] = Swagger::Blocks::ResourceListingAuthorizationNode.call(version: version, inline_keys: inline_keys, &block)
|
365
|
-
end
|
366
|
-
end
|
367
|
-
|
368
|
-
# v1.2: NOTE: in the spec this is different than API Declaration authorization.
|
369
|
-
# v1.2: http://goo.gl/PvwUXj#515-authorization-object
|
370
|
-
class ResourceListingAuthorizationNode < Node
|
371
|
-
GRANT_TYPES = [:implicit, :authorization_code].freeze
|
372
|
-
|
373
|
-
def scope(inline_keys = nil, &block)
|
374
|
-
self.data[:scopes] ||= []
|
375
|
-
self.data[:scopes] << Swagger::Blocks::ScopeNode.call(version: version, inline_keys: inline_keys, &block)
|
376
|
-
end
|
377
|
-
|
378
|
-
def grant_type(name, inline_keys = nil, &block)
|
379
|
-
raise ArgumentError.new("#{name} not in #{GRANT_TYPES}") if !GRANT_TYPES.include?(name)
|
380
|
-
self.data[:grantTypes] ||= Swagger::Blocks::GrantTypesNode.new
|
381
|
-
self.data[:grantTypes].version = version
|
382
|
-
self.data[:grantTypes].implicit(inline_keys, &block) if name == :implicit
|
383
|
-
self.data[:grantTypes].authorization_code(inline_keys, &block) if name == :authorization_code
|
384
|
-
end
|
385
|
-
end
|
386
|
-
|
387
|
-
# v1.2: http://goo.gl/PvwUXj#513-info-object
|
388
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#infoObject
|
389
|
-
class InfoNode < Node
|
390
|
-
def contact(inline_keys = nil, &block)
|
391
|
-
raise NotSupportedError unless is_swagger_2_0?
|
392
|
-
|
393
|
-
self.data[:contact] = Swagger::Blocks::ContactNode.call(version: version, inline_keys: inline_keys, &block)
|
394
|
-
end
|
395
|
-
|
396
|
-
def license(inline_keys = nil, &block)
|
397
|
-
raise NotSupportedError unless is_swagger_2_0?
|
398
|
-
|
399
|
-
self.data[:license] = Swagger::Blocks::LicenseNode.call(version: version, inline_keys: inline_keys, &block)
|
400
|
-
end
|
401
|
-
end
|
402
|
-
|
403
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#contact-object
|
404
|
-
class ContactNode < Node; end
|
405
|
-
|
406
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#license-object
|
407
|
-
class LicenseNode < Node; end
|
408
|
-
|
409
|
-
# v1.2: http://goo.gl/PvwUXj#516-scope-object
|
410
|
-
class ScopeNode < Node; end
|
411
|
-
|
412
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#scopes-object
|
413
|
-
class ScopesNode < Node; end
|
414
|
-
|
415
|
-
# v1.2: http://goo.gl/PvwUXj#517-grant-types-object
|
416
|
-
class GrantTypesNode < Node
|
417
|
-
def implicit(inline_keys, &block)
|
418
|
-
self.data[:implicit] = Swagger::Blocks::ImplicitNode.call(inline_keys: inline_keys, version: version, &block)
|
419
|
-
end
|
420
|
-
|
421
|
-
def authorization_code(inline_keys, &block)
|
422
|
-
self.data[:authorization_code] = Swagger::Blocks::AuthorizationCodeNode.call(inline_keys: inline_keys, version: version, &block)
|
423
|
-
end
|
424
|
-
end
|
425
|
-
|
426
|
-
# v1.2: http://goo.gl/PvwUXj#518-implicit-object
|
427
|
-
class ImplicitNode < Node
|
428
|
-
def login_endpoint(&block)
|
429
|
-
self.data[:loginEndpoint] = Swagger::Blocks::LoginEndpointNode.call(version: version, &block)
|
430
|
-
end
|
431
|
-
end
|
432
|
-
|
433
|
-
# v1.2: http://goo.gl/PvwUXj#5110-login-endpoint-object
|
434
|
-
class LoginEndpointNode < Node; end
|
435
|
-
|
436
|
-
# v1.2: http://goo.gl/PvwUXj#519-authorization-code-object
|
437
|
-
class AuthorizationCodeNode < Node
|
438
|
-
def token_request_endpoint(inline_keys = nil, &block)
|
439
|
-
self.data[:tokenRequestEndpoint] = Swagger::Blocks::TokenRequestEndpointNode.call(version: version, inline_keys: inline_keys, &block)
|
440
|
-
end
|
441
|
-
|
442
|
-
def token_endpoint(inline_keys = nil, &block)
|
443
|
-
self.data[:tokenEndpoint] = Swagger::Blocks::TokenEndpointNode.call(version: version, inline_keys: inline_keys, &block)
|
444
|
-
end
|
445
|
-
end
|
446
|
-
|
447
|
-
# v1.2: http://goo.gl/PvwUXj#5111-token-request-endpoint-object
|
448
|
-
class TokenRequestEndpointNode < Node; end
|
449
|
-
|
450
|
-
# v1.2: http://goo.gl/PvwUXj#5112-token-endpoint-object
|
451
|
-
class TokenEndpointNode < Node; end
|
452
|
-
|
453
|
-
# -----
|
454
|
-
# v1.2: Nodes for API Declarations.
|
455
|
-
# -----
|
456
|
-
|
457
|
-
# v1.2: http://goo.gl/PvwUXj#52-api-declaration
|
458
|
-
class ApiDeclarationNode < Node
|
459
|
-
def api(inline_keys = nil, &block)
|
460
|
-
self.data[:apis] ||= []
|
461
|
-
|
462
|
-
# Important: to conform with the Swagger spec, merge with any previous API declarations
|
463
|
-
# that have the same :path key. This ensures that operations affecting the same resource
|
464
|
-
# are all in the same operations node.
|
465
|
-
#
|
466
|
-
# http://goo.gl/PvwUXj#522-api-object
|
467
|
-
# - The API Object describes one or more operations on a single path. In the apis array,
|
468
|
-
# there MUST be only one API Object per path.
|
469
|
-
temp_api_node = Swagger::Blocks::ApiNode.call(version: version, inline_keys: inline_keys, &block)
|
470
|
-
api_node = self.data[:apis].select do |api|
|
471
|
-
api.data[:path] == temp_api_node.data[:path]
|
472
|
-
end[0] # Embrace Ruby wtfs.
|
473
|
-
|
474
|
-
if api_node
|
475
|
-
# Merge this block with the previous ApiNode by the same path key.
|
476
|
-
api_node.instance_eval(&block)
|
477
|
-
else
|
478
|
-
# First time we've seen an api block with the given path key.
|
479
|
-
self.data[:apis] << temp_api_node
|
480
|
-
end
|
481
|
-
end
|
482
|
-
end
|
483
|
-
|
484
|
-
# v1.2: http://goo.gl/PvwUXj#522-api-object
|
485
|
-
class ApiNode < Node
|
486
|
-
def operation(inline_keys = nil, &block)
|
487
|
-
self.data[:operations] ||= []
|
488
|
-
self.data[:operations] << Swagger::Blocks::OperationNode.call(version: version, inline_keys: inline_keys, &block)
|
489
|
-
end
|
490
|
-
end
|
491
|
-
|
492
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#path-item-object
|
493
|
-
class PathNode < Node
|
494
|
-
OPERATION_TYPES = [:get, :put, :post, :delete, :options, :head, :patch].freeze
|
495
|
-
|
496
|
-
# TODO support ^x- Vendor Extensions
|
497
|
-
def operation(op, inline_keys = nil, &block)
|
498
|
-
op = op.to_sym
|
499
|
-
raise ArgumentError.new("#{name} not in #{OPERATION_TYPES}") if !OPERATION_TYPES.include?(op)
|
500
|
-
self.data[op] = Swagger::Blocks::OperationNode.call(version: version, inline_keys: inline_keys, &block)
|
501
|
-
end
|
502
|
-
|
503
|
-
def parameter(inline_keys = nil, &block)
|
504
|
-
inline_keys = {'$ref' => "#/parameters/#{inline_keys}"} if inline_keys.is_a?(Symbol)
|
505
|
-
|
506
|
-
self.data[:parameters] ||= []
|
507
|
-
self.data[:parameters] << Swagger::Blocks::ParameterNode.call(version: version, inline_keys: inline_keys, &block)
|
508
|
-
end
|
509
|
-
end
|
510
|
-
|
511
|
-
# v1.2: http://goo.gl/PvwUXj#523-operation-object
|
512
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#operation-object
|
513
|
-
class OperationNode < Node
|
514
|
-
def parameter(inline_keys = nil, &block)
|
515
|
-
inline_keys = {'$ref' => "#/parameters/#{inline_keys}"} if inline_keys.is_a?(Symbol)
|
516
|
-
|
517
|
-
self.data[:parameters] ||= []
|
518
|
-
self.data[:parameters] << Swagger::Blocks::ParameterNode.call(version: version, inline_keys: inline_keys, &block)
|
519
|
-
end
|
520
|
-
|
521
|
-
def response_message(inline_keys = nil, &block)
|
522
|
-
raise NotSupportedError unless is_swagger_1_2?
|
523
|
-
|
524
|
-
self.data[:responseMessages] ||= []
|
525
|
-
self.data[:responseMessages] << Swagger::Blocks::Node.call(version: version, inline_keys: inline_keys, &block)
|
526
|
-
end
|
527
|
-
|
528
|
-
def authorization(name, inline_keys = nil, &block)
|
529
|
-
raise NotSupportedError unless is_swagger_1_2?
|
530
|
-
|
531
|
-
self.data[:authorizations] ||= Swagger::Blocks::ApiAuthorizationsNode.new
|
532
|
-
self.data[:authorizations].version = version
|
533
|
-
self.data[:authorizations].authorization(name, inline_keys, &block)
|
534
|
-
end
|
535
|
-
|
536
|
-
def items(inline_keys = nil, &block)
|
537
|
-
raise NotSupportedError unless is_swagger_1_2?
|
538
|
-
|
539
|
-
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
|
540
|
-
end
|
541
|
-
|
542
|
-
def response(resp, inline_keys = nil, &block)
|
543
|
-
raise NotSupportedError unless is_swagger_2_0?
|
544
|
-
|
545
|
-
# TODO validate 'resp' is as per spec
|
546
|
-
self.data[:responses] ||= {}
|
547
|
-
self.data[:responses][resp] = Swagger::Blocks::ResponseNode.call(version: version, inline_keys: inline_keys, &block)
|
548
|
-
end
|
549
|
-
|
550
|
-
def externalDocs(inline_keys = nil, &block)
|
551
|
-
raise NotSupportedError unless is_swagger_2_0?
|
552
|
-
|
553
|
-
self.data[:externalDocs] = Swagger::Blocks::ExternalDocsNode.call(version: version, inline_keys: inline_keys, &block)
|
554
|
-
end
|
555
|
-
|
556
|
-
def security(inline_keys = nil, &block)
|
557
|
-
raise NotSupportedError unless is_swagger_2_0?
|
558
|
-
|
559
|
-
self.data[:security] ||= []
|
560
|
-
self.data[:security] << Swagger::Blocks::SecurityRequirementNode.call(version: version, inline_keys: inline_keys, &block)
|
561
|
-
end
|
562
|
-
end
|
563
|
-
|
564
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#externalDocumentationObject
|
565
|
-
class ExternalDocsNode < Node; end
|
566
|
-
|
567
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#securityRequirementObject
|
568
|
-
class SecurityRequirementNode < Node; end
|
569
|
-
|
570
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#security-scheme-object
|
571
|
-
class SecuritySchemeNode < Node
|
572
|
-
# TODO support ^x- Vendor Extensions
|
573
|
-
|
574
|
-
def scopes(inline_keys = nil, &block)
|
575
|
-
self.data[:scopes] = Swagger::Blocks::ScopesNode.call(version: version, inline_keys: inline_keys, &block)
|
576
|
-
end
|
577
|
-
end
|
578
|
-
|
579
|
-
# v1.2: NOTE: in the spec this is different than Resource Listing's authorizations.
|
580
|
-
# v1.2: http://goo.gl/PvwUXj#514-authorizations-object
|
581
|
-
class ApiAuthorizationsNode < Node
|
582
|
-
def authorization(name, inline_keys, &block)
|
583
|
-
self.data[name] ||= Swagger::Blocks::ApiAuthorizationNode.call(version: version, inline_keys: inline_keys, &block)
|
584
|
-
end
|
585
|
-
end
|
586
|
-
|
587
|
-
# v1.2: NOTE: in the spec this is different than Resource Listing's authorization.
|
588
|
-
# v1.2: http://goo.gl/PvwUXj#515-authorization-object
|
589
|
-
class ApiAuthorizationNode < Node
|
590
|
-
def as_json
|
591
|
-
# Special case: the API Authorization object is weirdly the only array of hashes.
|
592
|
-
# Override the default hash behavior and return an array.
|
593
|
-
self.data[:_scopes] ||= []
|
594
|
-
self.data[:_scopes].map { |s| s.as_json }
|
595
|
-
end
|
596
|
-
|
597
|
-
def scope(inline_keys = nil, &block)
|
598
|
-
self.data[:_scopes] ||= []
|
599
|
-
self.data[:_scopes] << Swagger::Blocks::ApiAuthorizationScopeNode.call(version: version, inline_keys: inline_keys, &block)
|
600
|
-
end
|
601
|
-
end
|
602
|
-
|
603
|
-
# v1.2: NOTE: in the spec this is different than Resource Listing's scope object.
|
604
|
-
# v1.2: http://goo.gl/PvwUXj#5211-scope-object
|
605
|
-
class ApiAuthorizationScopeNode < Node; end
|
606
|
-
|
607
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#responseObject
|
608
|
-
class ResponseNode < Node
|
609
|
-
def schema(inline_keys = nil, &block)
|
610
|
-
self.data[:schema] = Swagger::Blocks::SchemaNode.call(version: version, inline_keys: inline_keys, &block)
|
611
|
-
end
|
612
|
-
|
613
|
-
def header(head, inline_keys = nil, &block)
|
614
|
-
# TODO validate 'head' is as per spec
|
615
|
-
self.data[:headers] ||= {}
|
616
|
-
self.data[:headers][head] = Swagger::Blocks::HeaderNode.call(version: version, inline_keys: inline_keys, &block)
|
617
|
-
end
|
618
|
-
|
619
|
-
def example(exam, inline_keys = nil, &block)
|
620
|
-
# TODO validate 'exam' is as per spec
|
621
|
-
self.data[:examples] ||= {}
|
622
|
-
self.data[:examples][exam] = Swagger::Blocks::ExampleNode.call(version: version, inline_keys: inline_keys, &block)
|
623
|
-
end
|
624
|
-
end
|
625
|
-
|
626
|
-
class AllOfNode < Node
|
627
|
-
def as_json
|
628
|
-
result = []
|
629
|
-
|
630
|
-
self.data.each do |value|
|
631
|
-
if value.is_a?(Node)
|
632
|
-
result << value.as_json
|
633
|
-
elsif value.is_a?(Array)
|
634
|
-
r = []
|
635
|
-
value.each { |v| r << (v.respond_to?(:as_json) ? v.as_json : v) }
|
636
|
-
result << r
|
637
|
-
elsif is_swagger_2_0? && value.is_a?(Hash)
|
638
|
-
r = {}
|
639
|
-
value.each_pair {|k, v| r[k] = (v.respond_to?(:as_json) ? v.as_json : v) }
|
640
|
-
result << r
|
641
|
-
else
|
642
|
-
result = value
|
643
|
-
end
|
644
|
-
end
|
645
|
-
return result if !name
|
646
|
-
# If 'name' is given to this node, wrap the data with a root element with the given name.
|
647
|
-
{name => result}
|
648
|
-
end
|
649
|
-
|
650
|
-
def data
|
651
|
-
@data ||= []
|
652
|
-
end
|
653
|
-
|
654
|
-
def key(key, value)
|
655
|
-
raise NotSupportedError
|
656
|
-
end
|
657
|
-
|
658
|
-
def schema(inline_keys = nil, &block)
|
659
|
-
data << Swagger::Blocks::SchemaNode.call(version: version, inline_keys: inline_keys, &block)
|
660
|
-
end
|
661
|
-
end
|
662
|
-
|
663
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#schema-object
|
664
|
-
class SchemaNode < Node
|
665
|
-
def items(inline_keys = nil, &block)
|
666
|
-
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
|
667
|
-
end
|
668
|
-
|
669
|
-
def allOf(&block)
|
670
|
-
self.data[:allOf] = Swagger::Blocks::AllOfNode.call(version: version, &block)
|
671
|
-
end
|
672
|
-
|
673
|
-
def property(name, inline_keys = nil, &block)
|
674
|
-
self.data[:properties] ||= Swagger::Blocks::PropertiesNode.new
|
675
|
-
self.data[:properties].version = version
|
676
|
-
self.data[:properties].property(name, inline_keys, &block)
|
677
|
-
end
|
678
|
-
|
679
|
-
def xml(inline_keys = nil, &block)
|
680
|
-
self.data[:xml] = Swagger::Blocks::XmlNode.call(version: version, inline_keys: inline_keys, &block)
|
681
|
-
end
|
682
|
-
|
683
|
-
def externalDocs(inline_keys = nil, &block)
|
684
|
-
self.data[:externalDocs] = Swagger::Blocks::ExternalDocsNode.call(version: version, inline_keys: inline_keys, &block)
|
685
|
-
end
|
686
|
-
end
|
687
|
-
|
688
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#headerObject
|
689
|
-
class HeaderNode < Node
|
690
|
-
def items(inline_keys = nil, &block)
|
691
|
-
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
|
692
|
-
end
|
693
|
-
end
|
694
|
-
|
695
|
-
# v2.0:
|
696
|
-
class XmlNode < Node; end
|
697
|
-
|
698
|
-
# v2.0:
|
699
|
-
class ExampleNode < Node; end
|
700
|
-
|
701
|
-
# v1.2:
|
702
|
-
# v2.0:
|
703
|
-
class ItemsNode < Node
|
704
|
-
def property(name, inline_keys = nil, &block)
|
705
|
-
self.data[:properties] ||= Swagger::Blocks::PropertiesNode.new
|
706
|
-
self.data[:properties].version = version
|
707
|
-
self.data[:properties].property(name, inline_keys, &block)
|
708
|
-
end
|
709
|
-
end
|
710
|
-
|
711
|
-
# v1.2: http://goo.gl/PvwUXj#524-parameter-object
|
712
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#parameter-object
|
713
|
-
class ParameterNode < Node
|
714
|
-
def schema(inline_keys = nil, &block)
|
715
|
-
raise NotSupportedError unless is_swagger_2_0?
|
716
|
-
|
717
|
-
self.data[:schema] = Swagger::Blocks::SchemaNode.call(version: version, inline_keys: inline_keys, &block)
|
718
|
-
end
|
719
|
-
|
720
|
-
def items(inline_keys = nil, &block)
|
721
|
-
raise NotSupportedError unless is_swagger_2_0?
|
722
|
-
|
723
|
-
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
|
724
|
-
end
|
725
|
-
end
|
726
|
-
|
727
|
-
# v2.0: https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md#tag-object
|
728
|
-
class TagNode < Node
|
729
|
-
|
730
|
-
# TODO support ^x- Vendor Extensions
|
731
|
-
|
732
|
-
def externalDocs(inline_keys = nil, &block)
|
733
|
-
self.data[:externalDocs] = Swagger::Blocks::ExternalDocsNode.call(version: version, inline_keys: inline_keys, &block)
|
734
|
-
end
|
735
|
-
end
|
736
|
-
|
737
|
-
# -----
|
738
|
-
# v1.2: Nodes for Models.
|
739
|
-
# -----
|
740
|
-
|
741
|
-
# v1.2: http://goo.gl/PvwUXj#526-models-object
|
742
|
-
class ModelsNode < Node
|
743
|
-
def merge!(other_models_node)
|
744
|
-
self.data.merge!(other_models_node.data)
|
745
|
-
end
|
746
|
-
|
747
|
-
def model(name, inline_keys, &block)
|
748
|
-
self.data[name] ||= Swagger::Blocks::ModelNode.call(version: version, inline_keys: inline_keys, &block)
|
749
|
-
end
|
750
|
-
end
|
751
|
-
|
752
|
-
# v1.2: http://goo.gl/PvwUXj#527-model-object
|
753
|
-
class ModelNode < Node
|
754
|
-
def property(name, inline_keys = nil, &block)
|
755
|
-
self.data[:properties] ||= Swagger::Blocks::PropertiesNode.new
|
756
|
-
self.data[:properties].version = version
|
757
|
-
self.data[:properties].property(name, inline_keys, &block)
|
758
|
-
end
|
759
|
-
end
|
760
|
-
|
761
|
-
# v1.2: http://goo.gl/PvwUXj#527-model-object
|
762
|
-
class PropertiesNode < Node
|
763
|
-
def property(name, inline_keys = nil, &block)
|
764
|
-
self.data[name] = Swagger::Blocks::PropertyNode.call(version: version, inline_keys: inline_keys, &block)
|
765
|
-
end
|
766
|
-
end
|
767
|
-
|
768
|
-
# v1.2: http://goo.gl/PvwUXj#527-model-object
|
769
|
-
class PropertyNode < Node
|
770
|
-
def items(inline_keys = nil, &block)
|
771
|
-
self.data[:items] = Swagger::Blocks::ItemsNode.call(version: version, inline_keys: inline_keys, &block)
|
772
|
-
end
|
773
|
-
|
774
|
-
def property(name, inline_keys = nil, &block)
|
775
|
-
self.data[:properties] ||= Swagger::Blocks::PropertiesNode.new
|
776
|
-
self.data[:properties].version = version
|
777
|
-
self.data[:properties].property(name, inline_keys, &block)
|
778
|
-
end
|
8
|
+
autoload :Node, 'swagger/blocks/node'
|
9
|
+
|
10
|
+
module Nodes
|
11
|
+
autoload :AllOfNode, 'swagger/blocks/nodes/all_of_node'
|
12
|
+
autoload :ContactNode, 'swagger/blocks/nodes/contact_node'
|
13
|
+
autoload :ExampleNode, 'swagger/blocks/nodes/example_node'
|
14
|
+
autoload :ExternalDocsNode, 'swagger/blocks/nodes/external_docs_node'
|
15
|
+
autoload :HeaderNode, 'swagger/blocks/nodes/header_node'
|
16
|
+
autoload :InfoNode, 'swagger/blocks/nodes/info_node'
|
17
|
+
autoload :ItemsNode, 'swagger/blocks/nodes/items_node'
|
18
|
+
autoload :LicenseNode, 'swagger/blocks/nodes/license_node'
|
19
|
+
autoload :OperationNode, 'swagger/blocks/nodes/operation_node'
|
20
|
+
autoload :ParameterNode, 'swagger/blocks/nodes/parameter_node'
|
21
|
+
autoload :PathNode, 'swagger/blocks/nodes/path_node'
|
22
|
+
autoload :PropertiesNode, 'swagger/blocks/nodes/properties_node'
|
23
|
+
autoload :PropertyNode, 'swagger/blocks/nodes/property_node'
|
24
|
+
autoload :ResponseNode, 'swagger/blocks/nodes/response_node'
|
25
|
+
autoload :RootNode, 'swagger/blocks/nodes/root_node'
|
26
|
+
autoload :SchemaNode, 'swagger/blocks/nodes/schema_node'
|
27
|
+
autoload :ScopesNode, 'swagger/blocks/nodes/scopes_node'
|
28
|
+
autoload :SecurityRequirementNode, 'swagger/blocks/nodes/security_requirement_node'
|
29
|
+
autoload :SecuritySchemeNode, 'swagger/blocks/nodes/security_scheme_node'
|
30
|
+
autoload :TagNode, 'swagger/blocks/nodes/tag_node'
|
31
|
+
autoload :XmlNode, 'swagger/blocks/nodes/xml_node'
|
779
32
|
end
|
780
33
|
end
|
781
34
|
end
|