swagger_parser 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +11 -0
  8. data/Rakefile +1 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +7 -0
  11. data/examples/swagger.json +1038 -0
  12. data/examples/swagger.yml +701 -0
  13. data/lib/swagger_parser/contact.rb +20 -0
  14. data/lib/swagger_parser/definitions.rb +13 -0
  15. data/lib/swagger_parser/enumerable_object.rb +30 -0
  16. data/lib/swagger_parser/errors/base_error.rb +6 -0
  17. data/lib/swagger_parser/errors/file_parsing_error.rb +8 -0
  18. data/lib/swagger_parser/examples.rb +12 -0
  19. data/lib/swagger_parser/extendable.rb +10 -0
  20. data/lib/swagger_parser/external_docs_attributable.rb +12 -0
  21. data/lib/swagger_parser/external_documentation.rb +6 -0
  22. data/lib/swagger_parser/file_parser.rb +58 -0
  23. data/lib/swagger_parser/header.rb +6 -0
  24. data/lib/swagger_parser/headers.rb +13 -0
  25. data/lib/swagger_parser/info.rb +40 -0
  26. data/lib/swagger_parser/items.rb +8 -0
  27. data/lib/swagger_parser/json_schema.rb +23 -0
  28. data/lib/swagger_parser/license.rb +15 -0
  29. data/lib/swagger_parser/minimal_json_schema.rb +91 -0
  30. data/lib/swagger_parser/operation.rb +67 -0
  31. data/lib/swagger_parser/parameter.rb +59 -0
  32. data/lib/swagger_parser/parameters.rb +13 -0
  33. data/lib/swagger_parser/path.rb +65 -0
  34. data/lib/swagger_parser/paths.rb +16 -0
  35. data/lib/swagger_parser/referable.rb +8 -0
  36. data/lib/swagger_parser/reference.rb +8 -0
  37. data/lib/swagger_parser/response.rb +31 -0
  38. data/lib/swagger_parser/response_definitions.rb +13 -0
  39. data/lib/swagger_parser/responses.rb +18 -0
  40. data/lib/swagger_parser/schema.rb +29 -0
  41. data/lib/swagger_parser/scopes.rb +12 -0
  42. data/lib/swagger_parser/security.rb +12 -0
  43. data/lib/swagger_parser/security_definitions.rb +13 -0
  44. data/lib/swagger_parser/security_scheme.rb +51 -0
  45. data/lib/swagger_parser/source_based_object.rb +10 -0
  46. data/lib/swagger_parser/swagger.rb +112 -0
  47. data/lib/swagger_parser/tag.rb +20 -0
  48. data/lib/swagger_parser/version.rb +3 -0
  49. data/lib/swagger_parser/xml.rb +30 -0
  50. data/lib/swagger_parser.rb +2 -0
  51. data/swagger_parser.gemspec +20 -0
  52. 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,6 @@
1
+ module SwaggerParser
2
+ module Errors
3
+ class BaseError < StandardError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ require "swagger_parser/errors/base_error"
2
+
3
+ module SwaggerParser
4
+ module Errors
5
+ class FileParsingError < BaseError
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,12 @@
1
+ require "swagger_parser/enumerable_object"
2
+
3
+ module SwaggerParser
4
+ class Examples < EnumerableObject
5
+ private
6
+
7
+ # @note Implementation for SwaggerParser::EnumerableObject
8
+ def build_element(value)
9
+ value
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module SwaggerParser
2
+ module Extendable
3
+ # @return [Hash{String => Object}]
4
+ def extensions
5
+ source.select do |key, value|
6
+ key.start_with?("x-")
7
+ end
8
+ end
9
+ end
10
+ 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,6 @@
1
+ require "swagger_parser/source_based_object"
2
+
3
+ module SwaggerParser
4
+ class ExternalDocumentation < SourceBasedObject
5
+ end
6
+ 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,6 @@
1
+ require "swagger_parser/minimal_json_schema"
2
+
3
+ module SwaggerParser
4
+ class Header < MinimalJsonSchema
5
+ end
6
+ 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,8 @@
1
+ require "swagger_parser/extendable"
2
+ require "swagger_parser/source_based_object"
3
+
4
+ module SwaggerParser
5
+ class Items < SourceBasedObject
6
+ include SwaggerParser::Extendable
7
+ end
8
+ 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,15 @@
1
+ require "swagger_parser/source_based_object"
2
+
3
+ module SwaggerParser
4
+ class License < SourceBasedObject
5
+ # @return [Object]
6
+ def name
7
+ source["name"]
8
+ end
9
+
10
+ # @return [Object]
11
+ def url
12
+ source["url"]
13
+ end
14
+ end
15
+ 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,8 @@
1
+ module SwaggerParser
2
+ module Referable
3
+ # @return [Object]
4
+ def ref
5
+ source["$ref"]
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require "swagger_parser/referable"
2
+ require "swagger_parser/source_based_object"
3
+
4
+ module SwaggerParser
5
+ class Reference < SourceBasedObject
6
+ include SwaggerParser::Referable
7
+ end
8
+ 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