skeleton 0.3.3 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +140 -65
  4. data/Rakefile +10 -3
  5. data/lib/skeleton.rb +6 -10
  6. data/lib/skeleton/contact.rb +1 -13
  7. data/lib/skeleton/error.rb +4 -0
  8. data/lib/skeleton/graph.rb +56 -0
  9. data/lib/skeleton/header.rb +2 -63
  10. data/lib/skeleton/items.rb +34 -0
  11. data/lib/skeleton/license.rb +1 -12
  12. data/lib/skeleton/model.rb +13 -17
  13. data/lib/skeleton/operation.rb +50 -121
  14. data/lib/skeleton/parameter.rb +31 -88
  15. data/lib/skeleton/parameters.rb +40 -0
  16. data/lib/skeleton/path.rb +42 -80
  17. data/lib/skeleton/presenter.rb +19 -0
  18. data/lib/skeleton/property.rb +6 -0
  19. data/lib/skeleton/response.rb +24 -45
  20. data/lib/skeleton/schema.rb +80 -63
  21. data/lib/skeleton/scope.rb +18 -0
  22. data/lib/skeleton/security_scheme.rb +19 -37
  23. data/lib/skeleton/serializers/options.rb +215 -0
  24. data/lib/skeleton/serializers/swagger.rb +197 -0
  25. data/lib/skeleton/structure.rb +92 -138
  26. data/lib/skeleton/swagger.rb +9 -0
  27. data/lib/skeleton/tag.rb +11 -16
  28. data/lib/skeleton/version.rb +1 -1
  29. data/skeleton.gemspec +2 -0
  30. data/test/fixtures/json-schema-draft-04.json +150 -0
  31. data/test/fixtures/schema.json +1482 -0
  32. data/test/integrations/validate_complex_schema_spec.rb +42 -0
  33. data/test/skeleton/graph_test.rb +22 -0
  34. data/test/skeleton/mapper_test.rb +84 -0
  35. data/test/skeleton/operation_test.rb +11 -0
  36. data/test/skeleton/parameter_test.rb +34 -0
  37. data/test/skeleton/parameters_test.rb +9 -0
  38. data/test/skeleton/path_test.rb +46 -0
  39. data/test/skeleton/property_test.rb +8 -0
  40. data/test/skeleton/serializers/options_test.rb +68 -0
  41. data/test/skeleton/serializers/swagger_test.rb +30 -0
  42. data/test/support/factories/structure_factory.rb +86 -0
  43. data/test/support/fixtures.rb +6 -0
  44. data/test/support/kissmetrics/core_api.rb +542 -0
  45. data/{spec/spec_helper.rb → test/test_helper.rb} +7 -1
  46. metadata +73 -25
  47. data/lib/skeleton/config.rb +0 -37
  48. data/lib/skeleton/documentation.rb +0 -17
  49. data/lib/skeleton/example.rb +0 -31
  50. data/lib/skeleton/headers.rb +0 -50
  51. data/lib/skeleton/helpers/controller_helpers.rb +0 -25
  52. data/lib/skeleton/info.rb +0 -40
  53. data/lib/skeleton/item.rb +0 -99
  54. data/lib/skeleton/responses.rb +0 -59
  55. data/lib/skeleton/scopes.rb +0 -24
  56. data/lib/skeleton/security_definitions.rb +0 -46
  57. data/lib/skeleton/security_requirement.rb +0 -29
  58. data/spec/integrations/use_case_spec.rb +0 -131
  59. data/spec/skeleton/operation_spec.rb +0 -113
  60. data/spec/skeleton/serializers/contact_spec.rb +0 -30
  61. data/spec/skeleton/serializers/documentation_spec.rb +0 -23
  62. data/spec/skeleton/serializers/header_spec.rb +0 -57
@@ -0,0 +1,1482 @@
1
+ {
2
+ "title": "A JSON Schema for Swagger 2.0 API.",
3
+ "$schema": "http://json-schema.org/draft-04/schema#",
4
+ "type": "object",
5
+ "required": [
6
+ "swagger",
7
+ "info",
8
+ "paths"
9
+ ],
10
+ "additionalProperties": false,
11
+ "patternProperties": {
12
+ "^x-": {
13
+ "$ref": "#/definitions/vendorExtension"
14
+ }
15
+ },
16
+ "properties": {
17
+ "swagger": {
18
+ "type": "string",
19
+ "enum": [
20
+ "2.0"
21
+ ],
22
+ "description": "The Swagger version of this document."
23
+ },
24
+ "info": {
25
+ "$ref": "#/definitions/info"
26
+ },
27
+ "host": {
28
+ "type": "string",
29
+ "format": "uri",
30
+ "pattern": "^[^{}/ :\\\\]+(?::\\d+)?$",
31
+ "description": "The fully qualified URI to the host of the API."
32
+ },
33
+ "basePath": {
34
+ "type": "string",
35
+ "pattern": "^/",
36
+ "description": "The base path to the API. Example: '/api'."
37
+ },
38
+ "schemes": {
39
+ "$ref": "#/definitions/schemesList"
40
+ },
41
+ "consumes": {
42
+ "description": "A list of MIME types accepted by the API.",
43
+ "$ref": "#/definitions/mediaTypeList"
44
+ },
45
+ "produces": {
46
+ "description": "A list of MIME types the API can produce.",
47
+ "$ref": "#/definitions/mediaTypeList"
48
+ },
49
+ "paths": {
50
+ "$ref": "#/definitions/paths"
51
+ },
52
+ "definitions": {
53
+ "$ref": "#/definitions/definitions"
54
+ },
55
+ "parameters": {
56
+ "$ref": "#/definitions/parameterDefinitions"
57
+ },
58
+ "responses": {
59
+ "$ref": "#/definitions/responseDefinitions"
60
+ },
61
+ "security": {
62
+ "$ref": "#/definitions/security"
63
+ },
64
+ "securityDefinitions": {
65
+ "$ref": "#/definitions/securityDefinitions"
66
+ },
67
+ "tags": {
68
+ "type": "array",
69
+ "items": {
70
+ "$ref": "#/definitions/tag"
71
+ },
72
+ "uniqueItems": true
73
+ },
74
+ "externalDocs": {
75
+ "$ref": "#/definitions/externalDocs"
76
+ }
77
+ },
78
+ "definitions": {
79
+ "info": {
80
+ "type": "object",
81
+ "description": "General information about the API.",
82
+ "required": [
83
+ "version",
84
+ "title"
85
+ ],
86
+ "additionalProperties": false,
87
+ "patternProperties": {
88
+ "^x-": {
89
+ "$ref": "#/definitions/vendorExtension"
90
+ }
91
+ },
92
+ "properties": {
93
+ "title": {
94
+ "type": "string",
95
+ "description": "A unique and precise title of the API."
96
+ },
97
+ "version": {
98
+ "type": "string",
99
+ "description": "A semantic version number of the API."
100
+ },
101
+ "description": {
102
+ "type": "string",
103
+ "description": "A longer description of the API. Should be different from the title. Github-flavored markdown is allowed."
104
+ },
105
+ "termsOfService": {
106
+ "type": "string",
107
+ "description": "The terms of service for the API."
108
+ },
109
+ "contact": {
110
+ "$ref": "#/definitions/contact"
111
+ },
112
+ "license": {
113
+ "$ref": "#/definitions/license"
114
+ }
115
+ }
116
+ },
117
+ "contact": {
118
+ "type": "object",
119
+ "description": "Contact information for the owners of the API.",
120
+ "additionalProperties": false,
121
+ "properties": {
122
+ "name": {
123
+ "type": "string",
124
+ "description": "The identifying name of the contact person/organization."
125
+ },
126
+ "url": {
127
+ "type": "string",
128
+ "description": "The URL pointing to the contact information.",
129
+ "format": "uri"
130
+ },
131
+ "email": {
132
+ "type": "string",
133
+ "description": "The email address of the contact person/organization.",
134
+ "format": "email"
135
+ }
136
+ }
137
+ },
138
+ "license": {
139
+ "type": "object",
140
+ "required": [
141
+ "name"
142
+ ],
143
+ "additionalProperties": false,
144
+ "properties": {
145
+ "name": {
146
+ "type": "string",
147
+ "description": "The name of the license type. It's encouraged to use an OSI compatible license."
148
+ },
149
+ "url": {
150
+ "type": "string",
151
+ "description": "The URL pointing to the license.",
152
+ "format": "uri"
153
+ }
154
+ }
155
+ },
156
+ "paths": {
157
+ "type": "object",
158
+ "description": "Relative paths to the individual endpoints. They must be relative to the 'basePath'.",
159
+ "patternProperties": {
160
+ "^x-": {
161
+ "$ref": "#/definitions/vendorExtension"
162
+ },
163
+ "^/": {
164
+ "$ref": "#/definitions/pathItem"
165
+ }
166
+ },
167
+ "additionalProperties": false
168
+ },
169
+ "definitions": {
170
+ "type": "object",
171
+ "additionalProperties": {
172
+ "$ref": "#/definitions/schema"
173
+ },
174
+ "description": "One or more JSON objects describing the schemas being consumed and produced by the API."
175
+ },
176
+ "parameterDefinitions": {
177
+ "type": "object",
178
+ "additionalProperties": {
179
+ "$ref": "#/definitions/parameter"
180
+ },
181
+ "description": "One or more JSON representations for parameters"
182
+ },
183
+ "responseDefinitions": {
184
+ "type": "object",
185
+ "additionalProperties": {
186
+ "$ref": "#/definitions/response"
187
+ },
188
+ "description": "One or more JSON representations for parameters"
189
+ },
190
+ "externalDocs": {
191
+ "type": "object",
192
+ "additionalProperties": false,
193
+ "description": "information about external documentation",
194
+ "required": [
195
+ "url"
196
+ ],
197
+ "properties": {
198
+ "description": {
199
+ "type": "string"
200
+ },
201
+ "url": {
202
+ "type": "string",
203
+ "format": "uri"
204
+ }
205
+ }
206
+ },
207
+ "examples": {
208
+ "type": "object",
209
+ "patternProperties": {
210
+ "^[a-z0-9-]+/[a-z0-9\\-+]+$": {}
211
+ },
212
+ "additionalProperties": false
213
+ },
214
+ "mimeType": {
215
+ "type": "string",
216
+ "pattern": "^[\\sa-z0-9\\-+;\\.=\\/]+$",
217
+ "description": "The MIME type of the HTTP message."
218
+ },
219
+ "operation": {
220
+ "type": "object",
221
+ "required": [
222
+ "responses"
223
+ ],
224
+ "additionalProperties": false,
225
+ "patternProperties": {
226
+ "^x-": {
227
+ "$ref": "#/definitions/vendorExtension"
228
+ }
229
+ },
230
+ "properties": {
231
+ "tags": {
232
+ "type": "array",
233
+ "items": {
234
+ "type": "string"
235
+ },
236
+ "uniqueItems": true
237
+ },
238
+ "summary": {
239
+ "type": "string",
240
+ "description": "A brief summary of the operation."
241
+ },
242
+ "description": {
243
+ "type": "string",
244
+ "description": "A longer description of the operation, github-flavored markdown is allowed."
245
+ },
246
+ "externalDocs": {
247
+ "$ref": "#/definitions/externalDocs"
248
+ },
249
+ "operationId": {
250
+ "type": "string",
251
+ "description": "A friendly name of the operation"
252
+ },
253
+ "produces": {
254
+ "description": "A list of MIME types the API can produce.",
255
+ "$ref": "#/definitions/mediaTypeList"
256
+ },
257
+ "consumes": {
258
+ "description": "A list of MIME types the API can consume.",
259
+ "$ref": "#/definitions/mediaTypeList"
260
+ },
261
+ "parameters": {
262
+ "$ref": "#/definitions/parametersList"
263
+ },
264
+ "responses": {
265
+ "$ref": "#/definitions/responses"
266
+ },
267
+ "schemes": {
268
+ "$ref": "#/definitions/schemesList"
269
+ },
270
+ "deprecated": {
271
+ "type": "boolean",
272
+ "default": false
273
+ },
274
+ "security": {
275
+ "$ref": "#/definitions/security"
276
+ }
277
+ }
278
+ },
279
+ "pathItem": {
280
+ "type": "object",
281
+ "additionalProperties": false,
282
+ "patternProperties": {
283
+ "^x-": {
284
+ "$ref": "#/definitions/vendorExtension"
285
+ }
286
+ },
287
+ "properties": {
288
+ "$ref": {
289
+ "type": "string"
290
+ },
291
+ "get": {
292
+ "$ref": "#/definitions/operation"
293
+ },
294
+ "put": {
295
+ "$ref": "#/definitions/operation"
296
+ },
297
+ "post": {
298
+ "$ref": "#/definitions/operation"
299
+ },
300
+ "delete": {
301
+ "$ref": "#/definitions/operation"
302
+ },
303
+ "options": {
304
+ "$ref": "#/definitions/operation"
305
+ },
306
+ "head": {
307
+ "$ref": "#/definitions/operation"
308
+ },
309
+ "patch": {
310
+ "$ref": "#/definitions/operation"
311
+ },
312
+ "parameters": {
313
+ "$ref": "#/definitions/parametersList"
314
+ }
315
+ }
316
+ },
317
+ "responses": {
318
+ "type": "object",
319
+ "description": "Response objects names can either be any valid HTTP status code or 'default'.",
320
+ "minProperties": 1,
321
+ "additionalProperties": false,
322
+ "patternProperties": {
323
+ "^([0-9]{3})$|^(default)$": {
324
+ "$ref": "#/definitions/responseValue"
325
+ },
326
+ "^x-": {
327
+ "$ref": "#/definitions/vendorExtension"
328
+ }
329
+ },
330
+ "not": {
331
+ "type": "object",
332
+ "additionalProperties": false,
333
+ "patternProperties": {
334
+ "^x-": {
335
+ "$ref": "#/definitions/vendorExtension"
336
+ }
337
+ }
338
+ }
339
+ },
340
+ "responseValue": {
341
+ "oneOf": [
342
+ {
343
+ "$ref": "#/definitions/response"
344
+ },
345
+ {
346
+ "$ref": "#/definitions/jsonReference"
347
+ }
348
+ ]
349
+ },
350
+ "response": {
351
+ "type": "object",
352
+ "required": [
353
+ "description"
354
+ ],
355
+ "properties": {
356
+ "description": {
357
+ "type": "string"
358
+ },
359
+ "schema": {
360
+ "$ref": "#/definitions/schema"
361
+ },
362
+ "headers": {
363
+ "$ref": "#/definitions/headers"
364
+ },
365
+ "examples": {
366
+ "$ref": "#/definitions/examples"
367
+ }
368
+ },
369
+ "additionalProperties": false
370
+ },
371
+ "headers": {
372
+ "type": "object",
373
+ "additionalProperties": {
374
+ "$ref": "#/definitions/header"
375
+ }
376
+ },
377
+ "header": {
378
+ "type": "object",
379
+ "additionalProperties": false,
380
+ "required": [
381
+ "type"
382
+ ],
383
+ "properties": {
384
+ "type": {
385
+ "type": "string",
386
+ "enum": [
387
+ "string",
388
+ "number",
389
+ "integer",
390
+ "boolean",
391
+ "array"
392
+ ]
393
+ },
394
+ "format": {
395
+ "type": "string"
396
+ },
397
+ "items": {
398
+ "$ref": "#/definitions/primitivesItems"
399
+ },
400
+ "collectionFormat": {
401
+ "$ref": "#/definitions/collectionFormat"
402
+ },
403
+ "default": {
404
+ "$ref": "#/definitions/default"
405
+ },
406
+ "maximum": {
407
+ "$ref": "#/definitions/maximum"
408
+ },
409
+ "exclusiveMaximum": {
410
+ "$ref": "#/definitions/exclusiveMaximum"
411
+ },
412
+ "minimum": {
413
+ "$ref": "#/definitions/minimum"
414
+ },
415
+ "exclusiveMinimum": {
416
+ "$ref": "#/definitions/exclusiveMinimum"
417
+ },
418
+ "maxLength": {
419
+ "$ref": "#/definitions/maxLength"
420
+ },
421
+ "minLength": {
422
+ "$ref": "#/definitions/minLength"
423
+ },
424
+ "pattern": {
425
+ "$ref": "#/definitions/pattern"
426
+ },
427
+ "maxItems": {
428
+ "$ref": "#/definitions/maxItems"
429
+ },
430
+ "minItems": {
431
+ "$ref": "#/definitions/minItems"
432
+ },
433
+ "uniqueItems": {
434
+ "$ref": "#/definitions/uniqueItems"
435
+ },
436
+ "enum": {
437
+ "$ref": "#/definitions/enum"
438
+ },
439
+ "multipleOf": {
440
+ "$ref": "#/definitions/multipleOf"
441
+ },
442
+ "description": {
443
+ "type": "string"
444
+ }
445
+ }
446
+ },
447
+ "vendorExtension": {
448
+ "description": "Any property starting with x- is valid.",
449
+ "additionalProperties": true,
450
+ "additionalItems": true
451
+ },
452
+ "bodyParameter": {
453
+ "type": "object",
454
+ "required": [
455
+ "name",
456
+ "in",
457
+ "schema"
458
+ ],
459
+ "patternProperties": {
460
+ "^x-": {
461
+ "$ref": "#/definitions/vendorExtension"
462
+ }
463
+ },
464
+ "properties": {
465
+ "description": {
466
+ "type": "string",
467
+ "description": "A brief description of the parameter. This could contain examples of use. Github-flavored markdown is allowed."
468
+ },
469
+ "name": {
470
+ "type": "string",
471
+ "description": "The name of the parameter."
472
+ },
473
+ "in": {
474
+ "type": "string",
475
+ "description": "Determines the location of the parameter.",
476
+ "enum": [
477
+ "body"
478
+ ]
479
+ },
480
+ "required": {
481
+ "type": "boolean",
482
+ "description": "Determines whether or not this parameter is required or optional.",
483
+ "default": false
484
+ },
485
+ "schema": {
486
+ "$ref": "#/definitions/schema"
487
+ }
488
+ },
489
+ "additionalProperties": false
490
+ },
491
+ "headerParameterSubSchema": {
492
+ "additionalProperties": false,
493
+ "patternProperties": {
494
+ "^x-": {
495
+ "$ref": "#/definitions/vendorExtension"
496
+ }
497
+ },
498
+ "properties": {
499
+ "required": {
500
+ "type": "boolean",
501
+ "description": "Determines whether or not this parameter is required or optional.",
502
+ "default": false
503
+ },
504
+ "in": {
505
+ "type": "string",
506
+ "description": "Determines the location of the parameter.",
507
+ "enum": [
508
+ "header"
509
+ ]
510
+ },
511
+ "description": {
512
+ "type": "string",
513
+ "description": "A brief description of the parameter. This could contain examples of use. Github-flavored markdown is allowed."
514
+ },
515
+ "name": {
516
+ "type": "string",
517
+ "description": "The name of the parameter."
518
+ },
519
+ "type": {
520
+ "type": "string",
521
+ "enum": [
522
+ "string",
523
+ "number",
524
+ "boolean",
525
+ "integer",
526
+ "array"
527
+ ]
528
+ },
529
+ "format": {
530
+ "type": "string"
531
+ },
532
+ "items": {
533
+ "$ref": "#/definitions/primitivesItems"
534
+ },
535
+ "collectionFormat": {
536
+ "$ref": "#/definitions/collectionFormat"
537
+ },
538
+ "default": {
539
+ "$ref": "#/definitions/default"
540
+ },
541
+ "maximum": {
542
+ "$ref": "#/definitions/maximum"
543
+ },
544
+ "exclusiveMaximum": {
545
+ "$ref": "#/definitions/exclusiveMaximum"
546
+ },
547
+ "minimum": {
548
+ "$ref": "#/definitions/minimum"
549
+ },
550
+ "exclusiveMinimum": {
551
+ "$ref": "#/definitions/exclusiveMinimum"
552
+ },
553
+ "maxLength": {
554
+ "$ref": "#/definitions/maxLength"
555
+ },
556
+ "minLength": {
557
+ "$ref": "#/definitions/minLength"
558
+ },
559
+ "pattern": {
560
+ "$ref": "#/definitions/pattern"
561
+ },
562
+ "maxItems": {
563
+ "$ref": "#/definitions/maxItems"
564
+ },
565
+ "minItems": {
566
+ "$ref": "#/definitions/minItems"
567
+ },
568
+ "uniqueItems": {
569
+ "$ref": "#/definitions/uniqueItems"
570
+ },
571
+ "enum": {
572
+ "$ref": "#/definitions/enum"
573
+ },
574
+ "multipleOf": {
575
+ "$ref": "#/definitions/multipleOf"
576
+ }
577
+ }
578
+ },
579
+ "queryParameterSubSchema": {
580
+ "additionalProperties": false,
581
+ "patternProperties": {
582
+ "^x-": {
583
+ "$ref": "#/definitions/vendorExtension"
584
+ }
585
+ },
586
+ "properties": {
587
+ "required": {
588
+ "type": "boolean",
589
+ "description": "Determines whether or not this parameter is required or optional.",
590
+ "default": false
591
+ },
592
+ "in": {
593
+ "type": "string",
594
+ "description": "Determines the location of the parameter.",
595
+ "enum": [
596
+ "query"
597
+ ]
598
+ },
599
+ "description": {
600
+ "type": "string",
601
+ "description": "A brief description of the parameter. This could contain examples of use. Github-flavored markdown is allowed."
602
+ },
603
+ "name": {
604
+ "type": "string",
605
+ "description": "The name of the parameter."
606
+ },
607
+ "type": {
608
+ "type": "string",
609
+ "enum": [
610
+ "string",
611
+ "number",
612
+ "boolean",
613
+ "integer",
614
+ "array"
615
+ ]
616
+ },
617
+ "format": {
618
+ "type": "string"
619
+ },
620
+ "items": {
621
+ "$ref": "#/definitions/primitivesItems"
622
+ },
623
+ "collectionFormat": {
624
+ "$ref": "#/definitions/collectionFormatWithMulti"
625
+ },
626
+ "default": {
627
+ "$ref": "#/definitions/default"
628
+ },
629
+ "maximum": {
630
+ "$ref": "#/definitions/maximum"
631
+ },
632
+ "exclusiveMaximum": {
633
+ "$ref": "#/definitions/exclusiveMaximum"
634
+ },
635
+ "minimum": {
636
+ "$ref": "#/definitions/minimum"
637
+ },
638
+ "exclusiveMinimum": {
639
+ "$ref": "#/definitions/exclusiveMinimum"
640
+ },
641
+ "maxLength": {
642
+ "$ref": "#/definitions/maxLength"
643
+ },
644
+ "minLength": {
645
+ "$ref": "#/definitions/minLength"
646
+ },
647
+ "pattern": {
648
+ "$ref": "#/definitions/pattern"
649
+ },
650
+ "maxItems": {
651
+ "$ref": "#/definitions/maxItems"
652
+ },
653
+ "minItems": {
654
+ "$ref": "#/definitions/minItems"
655
+ },
656
+ "uniqueItems": {
657
+ "$ref": "#/definitions/uniqueItems"
658
+ },
659
+ "enum": {
660
+ "$ref": "#/definitions/enum"
661
+ },
662
+ "multipleOf": {
663
+ "$ref": "#/definitions/multipleOf"
664
+ }
665
+ }
666
+ },
667
+ "formDataParameterSubSchema": {
668
+ "additionalProperties": false,
669
+ "patternProperties": {
670
+ "^x-": {
671
+ "$ref": "#/definitions/vendorExtension"
672
+ }
673
+ },
674
+ "properties": {
675
+ "required": {
676
+ "type": "boolean",
677
+ "description": "Determines whether or not this parameter is required or optional.",
678
+ "default": false
679
+ },
680
+ "in": {
681
+ "type": "string",
682
+ "description": "Determines the location of the parameter.",
683
+ "enum": [
684
+ "formData"
685
+ ]
686
+ },
687
+ "description": {
688
+ "type": "string",
689
+ "description": "A brief description of the parameter. This could contain examples of use. Github-flavored markdown is allowed."
690
+ },
691
+ "name": {
692
+ "type": "string",
693
+ "description": "The name of the parameter."
694
+ },
695
+ "type": {
696
+ "type": "string",
697
+ "enum": [
698
+ "string",
699
+ "number",
700
+ "boolean",
701
+ "integer",
702
+ "array",
703
+ "file"
704
+ ]
705
+ },
706
+ "format": {
707
+ "type": "string"
708
+ },
709
+ "items": {
710
+ "$ref": "#/definitions/primitivesItems"
711
+ },
712
+ "collectionFormat": {
713
+ "$ref": "#/definitions/collectionFormatWithMulti"
714
+ },
715
+ "default": {
716
+ "$ref": "#/definitions/default"
717
+ },
718
+ "maximum": {
719
+ "$ref": "#/definitions/maximum"
720
+ },
721
+ "exclusiveMaximum": {
722
+ "$ref": "#/definitions/exclusiveMaximum"
723
+ },
724
+ "minimum": {
725
+ "$ref": "#/definitions/minimum"
726
+ },
727
+ "exclusiveMinimum": {
728
+ "$ref": "#/definitions/exclusiveMinimum"
729
+ },
730
+ "maxLength": {
731
+ "$ref": "#/definitions/maxLength"
732
+ },
733
+ "minLength": {
734
+ "$ref": "#/definitions/minLength"
735
+ },
736
+ "pattern": {
737
+ "$ref": "#/definitions/pattern"
738
+ },
739
+ "maxItems": {
740
+ "$ref": "#/definitions/maxItems"
741
+ },
742
+ "minItems": {
743
+ "$ref": "#/definitions/minItems"
744
+ },
745
+ "uniqueItems": {
746
+ "$ref": "#/definitions/uniqueItems"
747
+ },
748
+ "enum": {
749
+ "$ref": "#/definitions/enum"
750
+ },
751
+ "multipleOf": {
752
+ "$ref": "#/definitions/multipleOf"
753
+ }
754
+ }
755
+ },
756
+ "pathParameterSubSchema": {
757
+ "additionalProperties": false,
758
+ "patternProperties": {
759
+ "^x-": {
760
+ "$ref": "#/definitions/vendorExtension"
761
+ }
762
+ },
763
+ "properties": {
764
+ "required": {
765
+ "type": "boolean",
766
+ "enum": [
767
+ true
768
+ ],
769
+ "description": "Determines whether or not this parameter is required or optional."
770
+ },
771
+ "in": {
772
+ "type": "string",
773
+ "description": "Determines the location of the parameter.",
774
+ "enum": [
775
+ "path"
776
+ ]
777
+ },
778
+ "description": {
779
+ "type": "string",
780
+ "description": "A brief description of the parameter. This could contain examples of use. Github-flavored markdown is allowed."
781
+ },
782
+ "name": {
783
+ "type": "string",
784
+ "description": "The name of the parameter."
785
+ },
786
+ "type": {
787
+ "type": "string",
788
+ "enum": [
789
+ "string",
790
+ "number",
791
+ "boolean",
792
+ "integer",
793
+ "array"
794
+ ]
795
+ },
796
+ "format": {
797
+ "type": "string"
798
+ },
799
+ "items": {
800
+ "$ref": "#/definitions/primitivesItems"
801
+ },
802
+ "collectionFormat": {
803
+ "$ref": "#/definitions/collectionFormat"
804
+ },
805
+ "default": {
806
+ "$ref": "#/definitions/default"
807
+ },
808
+ "maximum": {
809
+ "$ref": "#/definitions/maximum"
810
+ },
811
+ "exclusiveMaximum": {
812
+ "$ref": "#/definitions/exclusiveMaximum"
813
+ },
814
+ "minimum": {
815
+ "$ref": "#/definitions/minimum"
816
+ },
817
+ "exclusiveMinimum": {
818
+ "$ref": "#/definitions/exclusiveMinimum"
819
+ },
820
+ "maxLength": {
821
+ "$ref": "#/definitions/maxLength"
822
+ },
823
+ "minLength": {
824
+ "$ref": "#/definitions/minLength"
825
+ },
826
+ "pattern": {
827
+ "$ref": "#/definitions/pattern"
828
+ },
829
+ "maxItems": {
830
+ "$ref": "#/definitions/maxItems"
831
+ },
832
+ "minItems": {
833
+ "$ref": "#/definitions/minItems"
834
+ },
835
+ "uniqueItems": {
836
+ "$ref": "#/definitions/uniqueItems"
837
+ },
838
+ "enum": {
839
+ "$ref": "#/definitions/enum"
840
+ },
841
+ "multipleOf": {
842
+ "$ref": "#/definitions/multipleOf"
843
+ }
844
+ }
845
+ },
846
+ "nonBodyParameter": {
847
+ "type": "object",
848
+ "required": [
849
+ "name",
850
+ "in",
851
+ "type"
852
+ ],
853
+ "oneOf": [
854
+ {
855
+ "$ref": "#/definitions/headerParameterSubSchema"
856
+ },
857
+ {
858
+ "$ref": "#/definitions/formDataParameterSubSchema"
859
+ },
860
+ {
861
+ "$ref": "#/definitions/queryParameterSubSchema"
862
+ },
863
+ {
864
+ "$ref": "#/definitions/pathParameterSubSchema"
865
+ }
866
+ ]
867
+ },
868
+ "parameter": {
869
+ "oneOf": [
870
+ {
871
+ "$ref": "#/definitions/bodyParameter"
872
+ },
873
+ {
874
+ "$ref": "#/definitions/nonBodyParameter"
875
+ }
876
+ ]
877
+ },
878
+ "schema": {
879
+ "type": "object",
880
+ "description": "A deterministic version of a JSON Schema object.",
881
+ "patternProperties": {
882
+ "^x-": {
883
+ "$ref": "#/definitions/vendorExtension"
884
+ }
885
+ },
886
+ "properties": {
887
+ "$ref": {
888
+ "type": "string"
889
+ },
890
+ "format": {
891
+ "type": "string"
892
+ },
893
+ "title": {
894
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/title"
895
+ },
896
+ "description": {
897
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/description"
898
+ },
899
+ "default": {
900
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/default"
901
+ },
902
+ "multipleOf": {
903
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/multipleOf"
904
+ },
905
+ "maximum": {
906
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/maximum"
907
+ },
908
+ "exclusiveMaximum": {
909
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"
910
+ },
911
+ "minimum": {
912
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/minimum"
913
+ },
914
+ "exclusiveMinimum": {
915
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"
916
+ },
917
+ "maxLength": {
918
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
919
+ },
920
+ "minLength": {
921
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
922
+ },
923
+ "pattern": {
924
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/pattern"
925
+ },
926
+ "maxItems": {
927
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
928
+ },
929
+ "minItems": {
930
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
931
+ },
932
+ "uniqueItems": {
933
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/uniqueItems"
934
+ },
935
+ "maxProperties": {
936
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
937
+ },
938
+ "minProperties": {
939
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
940
+ },
941
+ "required": {
942
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray"
943
+ },
944
+ "enum": {
945
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/enum"
946
+ },
947
+ "type": {
948
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/type"
949
+ },
950
+ "items": {
951
+ "anyOf": [
952
+ {
953
+ "$ref": "#/definitions/schema"
954
+ },
955
+ {
956
+ "type": "array",
957
+ "minItems": 1,
958
+ "items": {
959
+ "$ref": "#/definitions/schema"
960
+ }
961
+ }
962
+ ],
963
+ "default": {}
964
+ },
965
+ "allOf": {
966
+ "type": "array",
967
+ "minItems": 1,
968
+ "items": {
969
+ "$ref": "#/definitions/schema"
970
+ }
971
+ },
972
+ "properties": {
973
+ "type": "object",
974
+ "additionalProperties": {
975
+ "$ref": "#/definitions/schema"
976
+ },
977
+ "default": {}
978
+ },
979
+ "discriminator": {
980
+ "type": "string"
981
+ },
982
+ "readOnly": {
983
+ "type": "boolean",
984
+ "default": false
985
+ },
986
+ "xml": {
987
+ "$ref": "#/definitions/xml"
988
+ },
989
+ "externalDocs": {
990
+ "$ref": "#/definitions/externalDocs"
991
+ },
992
+ "example": {}
993
+ }
994
+ },
995
+ "primitivesItems": {
996
+ "type": "object",
997
+ "additionalProperties": false,
998
+ "properties": {
999
+ "type": {
1000
+ "type": "string",
1001
+ "enum": [
1002
+ "string",
1003
+ "number",
1004
+ "integer",
1005
+ "boolean",
1006
+ "array"
1007
+ ]
1008
+ },
1009
+ "format": {
1010
+ "type": "string"
1011
+ },
1012
+ "items": {
1013
+ "$ref": "#/definitions/primitivesItems"
1014
+ },
1015
+ "collectionFormat": {
1016
+ "$ref": "#/definitions/collectionFormat"
1017
+ },
1018
+ "default": {
1019
+ "$ref": "#/definitions/default"
1020
+ },
1021
+ "maximum": {
1022
+ "$ref": "#/definitions/maximum"
1023
+ },
1024
+ "exclusiveMaximum": {
1025
+ "$ref": "#/definitions/exclusiveMaximum"
1026
+ },
1027
+ "minimum": {
1028
+ "$ref": "#/definitions/minimum"
1029
+ },
1030
+ "exclusiveMinimum": {
1031
+ "$ref": "#/definitions/exclusiveMinimum"
1032
+ },
1033
+ "maxLength": {
1034
+ "$ref": "#/definitions/maxLength"
1035
+ },
1036
+ "minLength": {
1037
+ "$ref": "#/definitions/minLength"
1038
+ },
1039
+ "pattern": {
1040
+ "$ref": "#/definitions/pattern"
1041
+ },
1042
+ "maxItems": {
1043
+ "$ref": "#/definitions/maxItems"
1044
+ },
1045
+ "minItems": {
1046
+ "$ref": "#/definitions/minItems"
1047
+ },
1048
+ "uniqueItems": {
1049
+ "$ref": "#/definitions/uniqueItems"
1050
+ },
1051
+ "enum": {
1052
+ "$ref": "#/definitions/enum"
1053
+ },
1054
+ "multipleOf": {
1055
+ "$ref": "#/definitions/multipleOf"
1056
+ }
1057
+ }
1058
+ },
1059
+ "security": {
1060
+ "type": "array",
1061
+ "items": {
1062
+ "$ref": "#/definitions/securityRequirement"
1063
+ },
1064
+ "uniqueItems": true
1065
+ },
1066
+ "securityRequirement": {
1067
+ "type": "object",
1068
+ "additionalProperties": {
1069
+ "type": "array",
1070
+ "items": {
1071
+ "type": "string"
1072
+ },
1073
+ "uniqueItems": true
1074
+ }
1075
+ },
1076
+ "xml": {
1077
+ "type": "object",
1078
+ "additionalProperties": false,
1079
+ "properties": {
1080
+ "name": {
1081
+ "type": "string"
1082
+ },
1083
+ "namespace": {
1084
+ "type": "string"
1085
+ },
1086
+ "prefix": {
1087
+ "type": "string"
1088
+ },
1089
+ "attribute": {
1090
+ "type": "boolean",
1091
+ "default": false
1092
+ },
1093
+ "wrapped": {
1094
+ "type": "boolean",
1095
+ "default": false
1096
+ }
1097
+ }
1098
+ },
1099
+ "tag": {
1100
+ "type": "object",
1101
+ "additionalProperties": false,
1102
+ "required": [
1103
+ "name"
1104
+ ],
1105
+ "properties": {
1106
+ "name": {
1107
+ "type": "string"
1108
+ },
1109
+ "description": {
1110
+ "type": "string"
1111
+ },
1112
+ "externalDocs": {
1113
+ "$ref": "#/definitions/externalDocs"
1114
+ }
1115
+ },
1116
+ "patternProperties": {
1117
+ "^x-": {
1118
+ "$ref": "#/definitions/vendorExtension"
1119
+ }
1120
+ }
1121
+ },
1122
+ "securityDefinitions": {
1123
+ "type": "object",
1124
+ "additionalProperties": {
1125
+ "oneOf": [
1126
+ {
1127
+ "$ref": "#/definitions/basicAuthenticationSecurity"
1128
+ },
1129
+ {
1130
+ "$ref": "#/definitions/apiKeySecurity"
1131
+ },
1132
+ {
1133
+ "$ref": "#/definitions/oauth2ImplicitSecurity"
1134
+ },
1135
+ {
1136
+ "$ref": "#/definitions/oauth2PasswordSecurity"
1137
+ },
1138
+ {
1139
+ "$ref": "#/definitions/oauth2ApplicationSecurity"
1140
+ },
1141
+ {
1142
+ "$ref": "#/definitions/oauth2AccessCodeSecurity"
1143
+ }
1144
+ ]
1145
+ }
1146
+ },
1147
+ "basicAuthenticationSecurity": {
1148
+ "type": "object",
1149
+ "additionalProperties": false,
1150
+ "required": [
1151
+ "type"
1152
+ ],
1153
+ "properties": {
1154
+ "type": {
1155
+ "type": "string",
1156
+ "enum": [
1157
+ "basic"
1158
+ ]
1159
+ },
1160
+ "description": {
1161
+ "type": "string"
1162
+ }
1163
+ },
1164
+ "patternProperties": {
1165
+ "^x-": {
1166
+ "$ref": "#/definitions/vendorExtension"
1167
+ }
1168
+ }
1169
+ },
1170
+ "apiKeySecurity": {
1171
+ "type": "object",
1172
+ "additionalProperties": false,
1173
+ "required": [
1174
+ "type",
1175
+ "name",
1176
+ "in"
1177
+ ],
1178
+ "properties": {
1179
+ "type": {
1180
+ "type": "string",
1181
+ "enum": [
1182
+ "apiKey"
1183
+ ]
1184
+ },
1185
+ "name": {
1186
+ "type": "string"
1187
+ },
1188
+ "in": {
1189
+ "type": "string",
1190
+ "enum": [
1191
+ "header",
1192
+ "query"
1193
+ ]
1194
+ },
1195
+ "description": {
1196
+ "type": "string"
1197
+ }
1198
+ },
1199
+ "patternProperties": {
1200
+ "^x-": {
1201
+ "$ref": "#/definitions/vendorExtension"
1202
+ }
1203
+ }
1204
+ },
1205
+ "oauth2ImplicitSecurity": {
1206
+ "type": "object",
1207
+ "additionalProperties": false,
1208
+ "required": [
1209
+ "type",
1210
+ "flow",
1211
+ "authorizationUrl"
1212
+ ],
1213
+ "properties": {
1214
+ "type": {
1215
+ "type": "string",
1216
+ "enum": [
1217
+ "oauth2"
1218
+ ]
1219
+ },
1220
+ "flow": {
1221
+ "type": "string",
1222
+ "enum": [
1223
+ "implicit"
1224
+ ]
1225
+ },
1226
+ "scopes": {
1227
+ "$ref": "#/definitions/oauth2Scopes"
1228
+ },
1229
+ "authorizationUrl": {
1230
+ "type": "string",
1231
+ "format": "uri"
1232
+ },
1233
+ "description": {
1234
+ "type": "string"
1235
+ }
1236
+ },
1237
+ "patternProperties": {
1238
+ "^x-": {
1239
+ "$ref": "#/definitions/vendorExtension"
1240
+ }
1241
+ }
1242
+ },
1243
+ "oauth2PasswordSecurity": {
1244
+ "type": "object",
1245
+ "additionalProperties": false,
1246
+ "required": [
1247
+ "type",
1248
+ "flow",
1249
+ "tokenUrl"
1250
+ ],
1251
+ "properties": {
1252
+ "type": {
1253
+ "type": "string",
1254
+ "enum": [
1255
+ "oauth2"
1256
+ ]
1257
+ },
1258
+ "flow": {
1259
+ "type": "string",
1260
+ "enum": [
1261
+ "password"
1262
+ ]
1263
+ },
1264
+ "scopes": {
1265
+ "$ref": "#/definitions/oauth2Scopes"
1266
+ },
1267
+ "tokenUrl": {
1268
+ "type": "string",
1269
+ "format": "uri"
1270
+ },
1271
+ "description": {
1272
+ "type": "string"
1273
+ }
1274
+ },
1275
+ "patternProperties": {
1276
+ "^x-": {
1277
+ "$ref": "#/definitions/vendorExtension"
1278
+ }
1279
+ }
1280
+ },
1281
+ "oauth2ApplicationSecurity": {
1282
+ "type": "object",
1283
+ "additionalProperties": false,
1284
+ "required": [
1285
+ "type",
1286
+ "flow",
1287
+ "tokenUrl"
1288
+ ],
1289
+ "properties": {
1290
+ "type": {
1291
+ "type": "string",
1292
+ "enum": [
1293
+ "oauth2"
1294
+ ]
1295
+ },
1296
+ "flow": {
1297
+ "type": "string",
1298
+ "enum": [
1299
+ "application"
1300
+ ]
1301
+ },
1302
+ "scopes": {
1303
+ "$ref": "#/definitions/oauth2Scopes"
1304
+ },
1305
+ "tokenUrl": {
1306
+ "type": "string",
1307
+ "format": "uri"
1308
+ },
1309
+ "description": {
1310
+ "type": "string"
1311
+ }
1312
+ },
1313
+ "patternProperties": {
1314
+ "^x-": {
1315
+ "$ref": "#/definitions/vendorExtension"
1316
+ }
1317
+ }
1318
+ },
1319
+ "oauth2AccessCodeSecurity": {
1320
+ "type": "object",
1321
+ "additionalProperties": false,
1322
+ "required": [
1323
+ "type",
1324
+ "flow",
1325
+ "authorizationUrl",
1326
+ "tokenUrl"
1327
+ ],
1328
+ "properties": {
1329
+ "type": {
1330
+ "type": "string",
1331
+ "enum": [
1332
+ "oauth2"
1333
+ ]
1334
+ },
1335
+ "flow": {
1336
+ "type": "string",
1337
+ "enum": [
1338
+ "accessCode"
1339
+ ]
1340
+ },
1341
+ "scopes": {
1342
+ "$ref": "#/definitions/oauth2Scopes"
1343
+ },
1344
+ "authorizationUrl": {
1345
+ "type": "string",
1346
+ "format": "uri"
1347
+ },
1348
+ "tokenUrl": {
1349
+ "type": "string",
1350
+ "format": "uri"
1351
+ },
1352
+ "description": {
1353
+ "type": "string"
1354
+ }
1355
+ },
1356
+ "patternProperties": {
1357
+ "^x-": {
1358
+ "$ref": "#/definitions/vendorExtension"
1359
+ }
1360
+ }
1361
+ },
1362
+ "oauth2Scopes": {
1363
+ "type": "object",
1364
+ "additionalProperties": {
1365
+ "type": "string"
1366
+ }
1367
+ },
1368
+ "mediaTypeList": {
1369
+ "type": "array",
1370
+ "items": {
1371
+ "$ref": "#/definitions/mimeType"
1372
+ },
1373
+ "uniqueItems": true
1374
+ },
1375
+ "parametersList": {
1376
+ "type": "array",
1377
+ "description": "The parameters needed to send a valid API call.",
1378
+ "minItems": 1,
1379
+ "additionalItems": false,
1380
+ "items": {
1381
+ "oneOf": [
1382
+ {
1383
+ "$ref": "#/definitions/parameter"
1384
+ },
1385
+ {
1386
+ "$ref": "#/definitions/jsonReference"
1387
+ }
1388
+ ]
1389
+ },
1390
+ "uniqueItems": true
1391
+ },
1392
+ "schemesList": {
1393
+ "type": "array",
1394
+ "description": "The transfer protocol of the API.",
1395
+ "items": {
1396
+ "type": "string",
1397
+ "enum": [
1398
+ "http",
1399
+ "https",
1400
+ "ws",
1401
+ "wss"
1402
+ ]
1403
+ },
1404
+ "uniqueItems": true
1405
+ },
1406
+ "collectionFormat": {
1407
+ "type": "string",
1408
+ "enum": [
1409
+ "csv",
1410
+ "ssv",
1411
+ "tsv",
1412
+ "pipes"
1413
+ ],
1414
+ "default": "csv"
1415
+ },
1416
+ "collectionFormatWithMulti": {
1417
+ "type": "string",
1418
+ "enum": [
1419
+ "csv",
1420
+ "ssv",
1421
+ "tsv",
1422
+ "pipes",
1423
+ "multi"
1424
+ ],
1425
+ "default": "csv"
1426
+ },
1427
+ "title": {
1428
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/title"
1429
+ },
1430
+ "description": {
1431
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/description"
1432
+ },
1433
+ "default": {
1434
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/default"
1435
+ },
1436
+ "multipleOf": {
1437
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/multipleOf"
1438
+ },
1439
+ "maximum": {
1440
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/maximum"
1441
+ },
1442
+ "exclusiveMaximum": {
1443
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"
1444
+ },
1445
+ "minimum": {
1446
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/minimum"
1447
+ },
1448
+ "exclusiveMinimum": {
1449
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"
1450
+ },
1451
+ "maxLength": {
1452
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
1453
+ },
1454
+ "minLength": {
1455
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
1456
+ },
1457
+ "pattern": {
1458
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/pattern"
1459
+ },
1460
+ "maxItems": {
1461
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
1462
+ },
1463
+ "minItems": {
1464
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
1465
+ },
1466
+ "uniqueItems": {
1467
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/uniqueItems"
1468
+ },
1469
+ "enum": {
1470
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/enum"
1471
+ },
1472
+ "jsonReference": {
1473
+ "type": "object",
1474
+ "additionalProperties": false,
1475
+ "properties": {
1476
+ "$ref": {
1477
+ "type": "string"
1478
+ }
1479
+ }
1480
+ }
1481
+ }
1482
+ }