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.
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