swagger_parser 0.0.1
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 +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +11 -0
- data/Rakefile +1 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/examples/swagger.json +1038 -0
- data/examples/swagger.yml +701 -0
- data/lib/swagger_parser/contact.rb +20 -0
- data/lib/swagger_parser/definitions.rb +13 -0
- data/lib/swagger_parser/enumerable_object.rb +30 -0
- data/lib/swagger_parser/errors/base_error.rb +6 -0
- data/lib/swagger_parser/errors/file_parsing_error.rb +8 -0
- data/lib/swagger_parser/examples.rb +12 -0
- data/lib/swagger_parser/extendable.rb +10 -0
- data/lib/swagger_parser/external_docs_attributable.rb +12 -0
- data/lib/swagger_parser/external_documentation.rb +6 -0
- data/lib/swagger_parser/file_parser.rb +58 -0
- data/lib/swagger_parser/header.rb +6 -0
- data/lib/swagger_parser/headers.rb +13 -0
- data/lib/swagger_parser/info.rb +40 -0
- data/lib/swagger_parser/items.rb +8 -0
- data/lib/swagger_parser/json_schema.rb +23 -0
- data/lib/swagger_parser/license.rb +15 -0
- data/lib/swagger_parser/minimal_json_schema.rb +91 -0
- data/lib/swagger_parser/operation.rb +67 -0
- data/lib/swagger_parser/parameter.rb +59 -0
- data/lib/swagger_parser/parameters.rb +13 -0
- data/lib/swagger_parser/path.rb +65 -0
- data/lib/swagger_parser/paths.rb +16 -0
- data/lib/swagger_parser/referable.rb +8 -0
- data/lib/swagger_parser/reference.rb +8 -0
- data/lib/swagger_parser/response.rb +31 -0
- data/lib/swagger_parser/response_definitions.rb +13 -0
- data/lib/swagger_parser/responses.rb +18 -0
- data/lib/swagger_parser/schema.rb +29 -0
- data/lib/swagger_parser/scopes.rb +12 -0
- data/lib/swagger_parser/security.rb +12 -0
- data/lib/swagger_parser/security_definitions.rb +13 -0
- data/lib/swagger_parser/security_scheme.rb +51 -0
- data/lib/swagger_parser/source_based_object.rb +10 -0
- data/lib/swagger_parser/swagger.rb +112 -0
- data/lib/swagger_parser/tag.rb +20 -0
- data/lib/swagger_parser/version.rb +3 -0
- data/lib/swagger_parser/xml.rb +30 -0
- data/lib/swagger_parser.rb +2 -0
- data/swagger_parser.gemspec +20 -0
- metadata +137 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
require "swagger_parser/enumerable_object"
|
2
|
+
require "swagger_parser/schema"
|
3
|
+
|
4
|
+
module SwaggerParser
|
5
|
+
class Definitions < EnumerableObject
|
6
|
+
private
|
7
|
+
|
8
|
+
# @note Implementation for SwaggerParser::EnumerableObject
|
9
|
+
def build_element(value)
|
10
|
+
SwaggerParser::Schema.new(value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "swagger_parser/source_based_object"
|
2
|
+
|
3
|
+
module SwaggerParser
|
4
|
+
class EnumerableObject < SourceBasedObject
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
# @note Implementation for Enumerable
|
8
|
+
def each(&block)
|
9
|
+
source.each do |key, value|
|
10
|
+
block.call([key, build_element(value)])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# @param [String]
|
15
|
+
# @return [SwaggerParser::SourceBasedObject, nil]
|
16
|
+
def [](key)
|
17
|
+
value = source[key]
|
18
|
+
build_element(value) if value
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
# @note Override me
|
24
|
+
# @param [Object] value
|
25
|
+
# @return [Class]
|
26
|
+
def build_element(value)
|
27
|
+
raise NotImplementedError
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "swagger_parser/external_documentation"
|
2
|
+
|
3
|
+
module SwaggerParser
|
4
|
+
module ExternalDocsAttributable
|
5
|
+
# @return [SwaggerParser::ExternalDocumentation, nil]
|
6
|
+
def external_docs
|
7
|
+
if source["external_docs"]
|
8
|
+
SwaggerParser::ExternalDocumentation.new(source["external_docs"])
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require "json"
|
2
|
+
require "swagger_parser/errors/file_parsing_error"
|
3
|
+
require "swagger_parser/swagger"
|
4
|
+
require "yaml"
|
5
|
+
|
6
|
+
module SwaggerParser
|
7
|
+
class FileParser
|
8
|
+
YAML_EXTNAMES = %w(.yaml .yml)
|
9
|
+
|
10
|
+
class << self
|
11
|
+
# @param [String] path
|
12
|
+
# @return [SwaggerParser::Swagger]
|
13
|
+
def parse(path)
|
14
|
+
new(path).parse
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param [String] path
|
19
|
+
def initialize(path)
|
20
|
+
@path = path
|
21
|
+
end
|
22
|
+
|
23
|
+
# @return [SwaggerParser::Swagger]
|
24
|
+
# @raise [SwaggerParser::Errors::FileParsingError]
|
25
|
+
def parse
|
26
|
+
SwaggerParser::Swagger.new(parse_file)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# @return [String]
|
32
|
+
def content
|
33
|
+
File.read(path)
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Object]
|
37
|
+
# @raise [SwaggerParser::Errors::FileParsingError]
|
38
|
+
def parse_file
|
39
|
+
if yaml?
|
40
|
+
YAML.load(content)
|
41
|
+
else
|
42
|
+
JSON.parse(content)
|
43
|
+
end
|
44
|
+
rescue => exception
|
45
|
+
raise SwaggerParser::Errors::FileParsingError, exception
|
46
|
+
end
|
47
|
+
|
48
|
+
# @return [String]
|
49
|
+
def path
|
50
|
+
@path
|
51
|
+
end
|
52
|
+
|
53
|
+
# @return [false, true]
|
54
|
+
def yaml?
|
55
|
+
YAML_EXTNAMES.include?(File.extname(path))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "swagger_parser/enumerable_object"
|
2
|
+
require "swagger_parser/header"
|
3
|
+
|
4
|
+
module SwaggerParser
|
5
|
+
class Headers < EnumerableObject
|
6
|
+
private
|
7
|
+
|
8
|
+
# @note Implementation for SwaggerParser::EnumerableObject
|
9
|
+
def build_element(value)
|
10
|
+
SwaggerParser::Header.new(value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "swagger_parser/contact"
|
2
|
+
require "swagger_parser/extendable"
|
3
|
+
require "swagger_parser/license"
|
4
|
+
require "swagger_parser/source_based_object"
|
5
|
+
|
6
|
+
module SwaggerParser
|
7
|
+
class Info < SourceBasedObject
|
8
|
+
include SwaggerParser::Extendable
|
9
|
+
|
10
|
+
# @return [Object]
|
11
|
+
def contact
|
12
|
+
SwaggerParser::Contact.new(source["contact"])
|
13
|
+
end
|
14
|
+
|
15
|
+
# @return [Object]
|
16
|
+
def description
|
17
|
+
source["description"]
|
18
|
+
end
|
19
|
+
|
20
|
+
# @return [Object]
|
21
|
+
def license
|
22
|
+
SwaggerParser::License.new(source["license"])
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [Object]
|
26
|
+
def terms_of_service
|
27
|
+
source["termsOfService"]
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [Object]
|
31
|
+
def title
|
32
|
+
source["title"]
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [Object]
|
36
|
+
def version
|
37
|
+
source["version"]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "swagger_parser/minimal_json_schema"
|
2
|
+
require "swagger_parser/referable"
|
3
|
+
|
4
|
+
module SwaggerParser
|
5
|
+
class JsonSchema < MinimalJsonSchema
|
6
|
+
include SwaggerParser::Referable
|
7
|
+
|
8
|
+
# @return [Object]
|
9
|
+
def max_properties
|
10
|
+
source["maxProperties"]
|
11
|
+
end
|
12
|
+
|
13
|
+
# @return [Object]
|
14
|
+
def min_properties
|
15
|
+
source["minProperties"]
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [Object]
|
19
|
+
def required
|
20
|
+
source["required"]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require "swagger_parser/source_based_object"
|
2
|
+
|
3
|
+
module SwaggerParser
|
4
|
+
# JSON Schema without $ref and properties for object definition.
|
5
|
+
class MinimalJsonSchema < SourceBasedObject
|
6
|
+
# @return [Object]
|
7
|
+
def default
|
8
|
+
source["default"]
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return [Object]
|
12
|
+
def description
|
13
|
+
source["description"]
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Object]
|
17
|
+
def enum
|
18
|
+
source["enum"]
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [false, true]
|
22
|
+
def exclusive_maximum
|
23
|
+
!!source["exclusiveMaximum"]
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [false, true]
|
27
|
+
def exclusive_minimum
|
28
|
+
!!source["exclusiveMinimum"]
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Object]
|
32
|
+
def format
|
33
|
+
source["format"]
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Object]
|
37
|
+
def maximum
|
38
|
+
source["maximum"]
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [Object]
|
42
|
+
def maxItems
|
43
|
+
source["maxItems"]
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [Object]
|
47
|
+
def max_length
|
48
|
+
source["maxLength"]
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Object]
|
52
|
+
def minimum
|
53
|
+
source["minimum"]
|
54
|
+
end
|
55
|
+
|
56
|
+
# @return [Object]
|
57
|
+
def min_items
|
58
|
+
source["minItems"]
|
59
|
+
end
|
60
|
+
|
61
|
+
# @return [Object]
|
62
|
+
def min_length
|
63
|
+
source["minLength"]
|
64
|
+
end
|
65
|
+
|
66
|
+
# @return [Object]
|
67
|
+
def multiple_of
|
68
|
+
source["multipleOf"]
|
69
|
+
end
|
70
|
+
|
71
|
+
# @return [Object]
|
72
|
+
def pattern
|
73
|
+
source["pattern"]
|
74
|
+
end
|
75
|
+
|
76
|
+
# @return [Object]
|
77
|
+
def title
|
78
|
+
source["title"]
|
79
|
+
end
|
80
|
+
|
81
|
+
# @return [Object]
|
82
|
+
def type
|
83
|
+
source["type"]
|
84
|
+
end
|
85
|
+
|
86
|
+
# @return [false, true]
|
87
|
+
def unique_items
|
88
|
+
!!source["uniqueItems"]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require "swagger_parser/extendable"
|
2
|
+
require "swagger_parser/external_docs_attributable"
|
3
|
+
require "swagger_parser/responses"
|
4
|
+
require "swagger_parser/security"
|
5
|
+
require "swagger_parser/source_based_object"
|
6
|
+
|
7
|
+
module SwaggerParser
|
8
|
+
class Operation < SourceBasedObject
|
9
|
+
include SwaggerParser::Extendable
|
10
|
+
include SwaggerParser::ExternalDocsAttributable
|
11
|
+
|
12
|
+
# @return [Object]
|
13
|
+
def consumes
|
14
|
+
source["consumes"] || []
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [false, true]
|
18
|
+
def deprecated
|
19
|
+
!!source["deprecated"]
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Object]
|
23
|
+
def description
|
24
|
+
source["description"]
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [Object]
|
28
|
+
def operation_id
|
29
|
+
source["operationId"]
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [SwaggerParser::Parameters]
|
33
|
+
def parameters
|
34
|
+
SwaggerParser::Parameters.new(source["parameters"] || {})
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Object]
|
38
|
+
def produces
|
39
|
+
source["produces"]
|
40
|
+
end
|
41
|
+
|
42
|
+
# @return [SwaggerParser::Responses]
|
43
|
+
def responses
|
44
|
+
SwaggerParser::Responses.new(source["responses"] || {})
|
45
|
+
end
|
46
|
+
|
47
|
+
# @return [Object]
|
48
|
+
def schemes
|
49
|
+
source["schemes"]
|
50
|
+
end
|
51
|
+
|
52
|
+
# @return [Object]
|
53
|
+
def security
|
54
|
+
SwaggerParser::Security.new(source["security"] || {})
|
55
|
+
end
|
56
|
+
|
57
|
+
# @return [Object]
|
58
|
+
def summary
|
59
|
+
source["summary"]
|
60
|
+
end
|
61
|
+
|
62
|
+
# @return [Array<String>]
|
63
|
+
def tags
|
64
|
+
source["tags"] || []
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require "swagger_parser/extendable"
|
2
|
+
require "swagger_parser/items"
|
3
|
+
require "swagger_parser/json_schema"
|
4
|
+
|
5
|
+
module SwaggerParser
|
6
|
+
class Parameter < JsonSchema
|
7
|
+
include SwaggerParser::Extendable
|
8
|
+
|
9
|
+
# @return [Object]
|
10
|
+
def allow_empty_value
|
11
|
+
source["allowEmptyValue"]
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [Object]
|
15
|
+
def boolean
|
16
|
+
source["boolean"]
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [Object]
|
20
|
+
def collection_format
|
21
|
+
source["collectionFormat"]
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Object]
|
25
|
+
def in
|
26
|
+
source["in"]
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Array<SwaggerParser::Items>, nil]
|
30
|
+
def items
|
31
|
+
if source["items"]
|
32
|
+
SwaggerParser::Item.new(source["items"])
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Object]
|
37
|
+
def name
|
38
|
+
source["name"]
|
39
|
+
end
|
40
|
+
|
41
|
+
# @note Override because this "required" is different from JSON Schema's "required"
|
42
|
+
# @return [false, true]
|
43
|
+
def required
|
44
|
+
!!source["required"]
|
45
|
+
end
|
46
|
+
|
47
|
+
# @return [Object]
|
48
|
+
def schema
|
49
|
+
value = source["schema"]
|
50
|
+
SwaggerParser::Schema.new(value) if in_body?
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def in_body?
|
56
|
+
self.in == "body"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "swagger_parser/enumerable_object"
|
2
|
+
require "swagger_parser/parameter"
|
3
|
+
|
4
|
+
module SwaggerParser
|
5
|
+
class Parameters < EnumerableObject
|
6
|
+
private
|
7
|
+
|
8
|
+
# @note Implementation for SwaggerParser::EnumerableObject
|
9
|
+
def build_element(value)
|
10
|
+
SwaggerParser::Parameter.new(value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require "swagger_parser/extendable"
|
2
|
+
require "swagger_parser/operation"
|
3
|
+
require "swagger_parser/referable"
|
4
|
+
require "swagger_parser/source_based_object"
|
5
|
+
|
6
|
+
module SwaggerParser
|
7
|
+
class Path < SourceBasedObject
|
8
|
+
include SwaggerParser::Extendable
|
9
|
+
include SwaggerParser::Referable
|
10
|
+
|
11
|
+
# @return [SwaggerParser::Operation, nil]
|
12
|
+
def delete
|
13
|
+
if source["delete"]
|
14
|
+
SwaggerParser::Operation.new(source["delete"])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [SwaggerParser::Operation, nil]
|
19
|
+
def get
|
20
|
+
if source["get"]
|
21
|
+
SwaggerParser::Operation.new(source["get"])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [SwaggerParser::Operation, nil]
|
26
|
+
def head
|
27
|
+
if source["head"]
|
28
|
+
SwaggerParser::Operation.new(source["head"])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [SwaggerParser::Operation, nil]
|
33
|
+
def options
|
34
|
+
if source["options"]
|
35
|
+
SwaggerParser::Operation.new(source["options"])
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [Object]
|
40
|
+
def parameters
|
41
|
+
source["parameters"]
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [SwaggerParser::Operation, nil]
|
45
|
+
def patch
|
46
|
+
if source["patch"]
|
47
|
+
SwaggerParser::Operation.new(source["patch"])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [SwaggerParser::Operation, nil]
|
52
|
+
def post
|
53
|
+
if source["post"]
|
54
|
+
SwaggerParser::Operation.new(source["post"])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# @return [SwaggerParser::Operation, nil]
|
59
|
+
def put
|
60
|
+
if source["put"]
|
61
|
+
SwaggerParser::Operation.new(source["put"])
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "swagger_parser/enumerable_object"
|
2
|
+
require "swagger_parser/extendable"
|
3
|
+
require "swagger_parser/path"
|
4
|
+
|
5
|
+
module SwaggerParser
|
6
|
+
class Paths < EnumerableObject
|
7
|
+
include SwaggerParser::Extendable
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
# @note Implementation for SwaggerParser::EnumerableObject
|
12
|
+
def build_element(value)
|
13
|
+
SwaggerParser::Path.new(value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "swagger_parser/examples"
|
2
|
+
require "swagger_parser/headers"
|
3
|
+
require "swagger_parser/schema"
|
4
|
+
require "swagger_parser/source_based_object"
|
5
|
+
|
6
|
+
module SwaggerParser
|
7
|
+
class Response < SourceBasedObject
|
8
|
+
# @return [Object]
|
9
|
+
def description
|
10
|
+
source["description"]
|
11
|
+
end
|
12
|
+
|
13
|
+
# @return [SwaggerParser::Examples]
|
14
|
+
def examples
|
15
|
+
SwaggerParser::Examples.new(source["examples"] || {})
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [SwaggerParser::Headers]
|
19
|
+
# @return [Object]
|
20
|
+
def headers
|
21
|
+
SwaggerParser::Headers.new(source["headers"] || {})
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [SwaggerParser::Schema, nil]
|
25
|
+
def schema
|
26
|
+
if source["schema"]
|
27
|
+
SwaggerParser::Schema.new(source["schema"])
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "swagger_parser/enumerable_object"
|
2
|
+
require "swagger_parser/response"
|
3
|
+
|
4
|
+
module SwaggerParser
|
5
|
+
class ResponseDefinitions < EnumerableObject
|
6
|
+
private
|
7
|
+
|
8
|
+
# @note Implementation for SwaggerParser::EnumerableObject
|
9
|
+
def build_element(value)
|
10
|
+
SwaggerParser::Response.new(value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "swagger_parser/enumerable_object"
|
2
|
+
require "swagger_parser/reference"
|
3
|
+
require "swagger_parser/response"
|
4
|
+
|
5
|
+
module SwaggerParser
|
6
|
+
class Responses < EnumerableObject
|
7
|
+
private
|
8
|
+
|
9
|
+
# @note Implementation for SwaggerParser::EnumerableObject
|
10
|
+
def build_element(value)
|
11
|
+
if value["$ref"]
|
12
|
+
SwaggerParser::Reference.new(value)
|
13
|
+
else
|
14
|
+
SwaggerParser::Response.new(value)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|