openapi3_parser 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -0
  3. data/.travis.yml +3 -5
  4. data/CHANGELOG.md +7 -0
  5. data/README.md +2 -2
  6. data/TODO.md +9 -2
  7. data/lib/openapi3_parser/context/pointer.rb +2 -0
  8. data/lib/openapi3_parser/document.rb +54 -18
  9. data/lib/openapi3_parser/markdown.rb +15 -0
  10. data/lib/openapi3_parser/{nodes → node}/array.rb +1 -1
  11. data/lib/openapi3_parser/{nodes → node}/callback.rb +2 -4
  12. data/lib/openapi3_parser/{nodes → node}/components.rb +2 -4
  13. data/lib/openapi3_parser/{nodes → node}/contact.rb +2 -4
  14. data/lib/openapi3_parser/{nodes → node}/discriminator.rb +2 -4
  15. data/lib/openapi3_parser/{nodes → node}/encoding.rb +2 -4
  16. data/lib/openapi3_parser/{nodes → node}/example.rb +7 -4
  17. data/lib/openapi3_parser/{nodes → node}/external_documentation.rb +7 -4
  18. data/lib/openapi3_parser/{nodes → node}/header.rb +4 -5
  19. data/lib/openapi3_parser/{nodes → node}/info.rb +9 -6
  20. data/lib/openapi3_parser/{nodes → node}/license.rb +2 -4
  21. data/lib/openapi3_parser/{nodes → node}/link.rb +7 -4
  22. data/lib/openapi3_parser/node/map.rb +1 -1
  23. data/lib/openapi3_parser/{nodes → node}/media_type.rb +2 -4
  24. data/lib/openapi3_parser/{nodes → node}/oauth_flow.rb +2 -4
  25. data/lib/openapi3_parser/{nodes → node}/oauth_flows.rb +2 -4
  26. data/lib/openapi3_parser/node/object.rb +11 -1
  27. data/lib/openapi3_parser/{nodes → node}/openapi.rb +6 -8
  28. data/lib/openapi3_parser/{nodes → node}/operation.rb +11 -8
  29. data/lib/openapi3_parser/{nodes → node}/parameter.rb +3 -4
  30. data/lib/openapi3_parser/node/parameter_like.rb +70 -0
  31. data/lib/openapi3_parser/{nodes → node}/path_item.rb +9 -6
  32. data/lib/openapi3_parser/{nodes → node}/paths.rb +2 -4
  33. data/lib/openapi3_parser/{nodes → node}/request_body.rb +7 -4
  34. data/lib/openapi3_parser/{nodes → node}/response.rb +7 -4
  35. data/lib/openapi3_parser/{nodes → node}/responses.rb +2 -4
  36. data/lib/openapi3_parser/{nodes → node}/schema.rb +12 -9
  37. data/lib/openapi3_parser/{nodes → node}/security_requirement.rb +2 -4
  38. data/lib/openapi3_parser/{nodes → node}/security_scheme.rb +7 -5
  39. data/lib/openapi3_parser/{nodes → node}/server.rb +7 -4
  40. data/lib/openapi3_parser/{nodes → node}/server_variable.rb +8 -5
  41. data/lib/openapi3_parser/{nodes → node}/tag.rb +7 -4
  42. data/lib/openapi3_parser/{nodes → node}/xml.rb +2 -4
  43. data/lib/openapi3_parser/node_factories/array.rb +10 -4
  44. data/lib/openapi3_parser/node_factories/callback.rb +2 -2
  45. data/lib/openapi3_parser/node_factories/components.rb +5 -3
  46. data/lib/openapi3_parser/node_factories/contact.rb +10 -4
  47. data/lib/openapi3_parser/node_factories/discriminator.rb +2 -2
  48. data/lib/openapi3_parser/node_factories/encoding.rb +7 -3
  49. data/lib/openapi3_parser/node_factories/example.rb +8 -3
  50. data/lib/openapi3_parser/node_factories/external_documentation.rb +7 -3
  51. data/lib/openapi3_parser/node_factories/header.rb +2 -2
  52. data/lib/openapi3_parser/node_factories/info.rb +6 -3
  53. data/lib/openapi3_parser/node_factories/license.rb +6 -3
  54. data/lib/openapi3_parser/node_factories/link.rb +4 -2
  55. data/lib/openapi3_parser/node_factories/map.rb +12 -4
  56. data/lib/openapi3_parser/node_factories/media_type.rb +36 -5
  57. data/lib/openapi3_parser/node_factories/oauth_flow.rb +2 -2
  58. data/lib/openapi3_parser/node_factories/oauth_flows.rb +2 -2
  59. data/lib/openapi3_parser/node_factories/openapi.rb +13 -3
  60. data/lib/openapi3_parser/node_factories/operation.rb +11 -3
  61. data/lib/openapi3_parser/node_factories/parameter.rb +28 -3
  62. data/lib/openapi3_parser/node_factories/parameter/parameter_like.rb +9 -5
  63. data/lib/openapi3_parser/node_factories/path_item.rb +26 -7
  64. data/lib/openapi3_parser/node_factories/paths.rb +51 -2
  65. data/lib/openapi3_parser/node_factories/reference.rb +4 -0
  66. data/lib/openapi3_parser/node_factories/request_body.rb +32 -3
  67. data/lib/openapi3_parser/node_factories/response.rb +24 -4
  68. data/lib/openapi3_parser/node_factories/responses.rb +28 -2
  69. data/lib/openapi3_parser/node_factories/schema.rb +17 -3
  70. data/lib/openapi3_parser/node_factories/security_requirement.rb +2 -2
  71. data/lib/openapi3_parser/node_factories/security_scheme.rb +2 -2
  72. data/lib/openapi3_parser/node_factories/server.rb +2 -2
  73. data/lib/openapi3_parser/node_factories/server_variable.rb +2 -2
  74. data/lib/openapi3_parser/node_factories/tag.rb +2 -2
  75. data/lib/openapi3_parser/node_factories/xml.rb +6 -3
  76. data/lib/openapi3_parser/node_factory.rb +10 -4
  77. data/lib/openapi3_parser/node_factory/fields/reference.rb +4 -0
  78. data/lib/openapi3_parser/node_factory/map.rb +10 -0
  79. data/lib/openapi3_parser/node_factory/object.rb +29 -0
  80. data/lib/openapi3_parser/node_factory/object/validator.rb +69 -6
  81. data/lib/openapi3_parser/source/reference.rb +2 -0
  82. data/lib/openapi3_parser/source/reference_resolver.rb +5 -1
  83. data/lib/openapi3_parser/validators/absolute_uri.rb +14 -0
  84. data/lib/openapi3_parser/validators/component_keys.rb +17 -0
  85. data/lib/openapi3_parser/validators/duplicate_parameters.rb +30 -0
  86. data/lib/openapi3_parser/validators/email.rb +23 -0
  87. data/lib/openapi3_parser/validators/media_type.rb +20 -0
  88. data/lib/openapi3_parser/validators/url.rb +18 -0
  89. data/lib/openapi3_parser/version.rb +1 -1
  90. data/openapi3_parser.gemspec +5 -2
  91. metadata +70 -36
  92. data/lib/openapi3_parser/nodes/map.rb +0 -17
  93. data/lib/openapi3_parser/nodes/parameter/parameter_like.rb +0 -67
@@ -3,11 +3,9 @@
3
3
  require "openapi3_parser/node/object"
4
4
 
5
5
  module Openapi3Parser
6
- module Nodes
6
+ module Node
7
7
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#linkObject
8
- class Link
9
- include Node::Object
10
-
8
+ class Link < Node::Object
11
9
  # @return [String, nil]
12
10
  def operation_ref
13
11
  node_data["operationRef"]
@@ -33,6 +31,11 @@ module Openapi3Parser
33
31
  node_data["description"]
34
32
  end
35
33
 
34
+ # @return [String, nil]
35
+ def description_html
36
+ render_markdown(description)
37
+ end
38
+
36
39
  # @return [Server, nil]
37
40
  def server
38
41
  node_data["server"]
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Openapi3Parser
4
4
  module Node
5
- module Map
5
+ class Map
6
6
  include Enumerable
7
7
 
8
8
  attr_reader :node_data, :node_context
@@ -3,11 +3,9 @@
3
3
  require "openapi3_parser/node/object"
4
4
 
5
5
  module Openapi3Parser
6
- module Nodes
6
+ module Node
7
7
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#mediaTypeObject
8
- class MediaType
9
- include Node::Object
10
-
8
+ class MediaType < Node::Object
11
9
  # @return [Schema, nil]
12
10
  def schema
13
11
  node_data["schema"]
@@ -3,11 +3,9 @@
3
3
  require "openapi3_parser/node/object"
4
4
 
5
5
  module Openapi3Parser
6
- module Nodes
6
+ module Node
7
7
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#oauthFlowObject
8
- class OauthFlow
9
- include Node::Object
10
-
8
+ class OauthFlow < Node::Object
11
9
  # @return [String, nil]
12
10
  def authorization_url
13
11
  node_data["authorizationUrl"]
@@ -3,11 +3,9 @@
3
3
  require "openapi3_parser/node/object"
4
4
 
5
5
  module Openapi3Parser
6
- module Nodes
6
+ module Node
7
7
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#oauthFlowsObject
8
- class OauthFlows
9
- include Node::Object
10
-
8
+ class OauthFlows < Node::Object
11
9
  # @return [OauthFlow, nil]
12
10
  def implicit
13
11
  node_data["implicit"]
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "openapi3_parser/markdown"
4
+
3
5
  module Openapi3Parser
4
6
  module Node
5
- module Object
7
+ class Object
6
8
  include Enumerable
7
9
 
8
10
  attr_reader :node_data, :node_context
@@ -48,6 +50,14 @@ module Openapi3Parser
48
50
  def each(&block)
49
51
  node_data.each(&block)
50
52
  end
53
+
54
+ # Used to render fields that can be in markdown syntax into HTML
55
+ # @param [String, nil] value
56
+ # @return [String, nil]
57
+ def render_markdown(value)
58
+ return if value.nil?
59
+ Markdown.to_html(value)
60
+ end
51
61
  end
52
62
  end
53
63
  end
@@ -1,15 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "openapi3_parser/node/object"
4
- require "openapi3_parser/nodes/components"
4
+ require "openapi3_parser/node/components"
5
5
 
6
6
  module Openapi3Parser
7
- module Nodes
7
+ module Node
8
8
  # OpenAPI Root Object
9
9
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#oasObject
10
- class Openapi
11
- include Node::Object
12
-
10
+ class Openapi < Node::Object
13
11
  # @return [String]
14
12
  def openapi
15
13
  node_data["openapi"]
@@ -20,7 +18,7 @@ module Openapi3Parser
20
18
  node_data["info"]
21
19
  end
22
20
 
23
- # @return [Nodes::Array<Server>]
21
+ # @return [Node::Array<Server>]
24
22
  def servers
25
23
  node_data["servers"]
26
24
  end
@@ -35,12 +33,12 @@ module Openapi3Parser
35
33
  node_data["components"]
36
34
  end
37
35
 
38
- # @return [Nodes::Array<SecurityRequirement>]
36
+ # @return [Node::Array<SecurityRequirement>]
39
37
  def security
40
38
  node_data["security"]
41
39
  end
42
40
 
43
- # @return [Nodes::Array<Tag>]
41
+ # @return [Node::Array<Tag>]
44
42
  def tags
45
43
  node_data["tags"]
46
44
  end
@@ -3,12 +3,10 @@
3
3
  require "openapi3_parser/node/object"
4
4
 
5
5
  module Openapi3Parser
6
- module Nodes
6
+ module Node
7
7
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#operationObject
8
- class Operation
9
- include Node::Object
10
-
11
- # @return [Nodes::Array<String>]
8
+ class Operation < Node::Object
9
+ # @return [Node::Array<String>]
12
10
  def tags
13
11
  node_data["tags"]
14
12
  end
@@ -23,6 +21,11 @@ module Openapi3Parser
23
21
  node_data["description"]
24
22
  end
25
23
 
24
+ # @return [String, nil]
25
+ def description_html
26
+ render_markdown(description)
27
+ end
28
+
26
29
  # @return [ExternalDocumentation, nil]
27
30
  def external_docs
28
31
  node_data["externalDocs"]
@@ -33,7 +36,7 @@ module Openapi3Parser
33
36
  node_data["operationId"]
34
37
  end
35
38
 
36
- # @return [Nodes::Array<Parameter>]
39
+ # @return [Node::Array<Parameter>]
37
40
  def parameters
38
41
  node_data["parameters"]
39
42
  end
@@ -58,12 +61,12 @@ module Openapi3Parser
58
61
  node_data["deprecated"]
59
62
  end
60
63
 
61
- # @return [Nodes::Array<SecurityRequirement>]
64
+ # @return [Node::Array<SecurityRequirement>]
62
65
  def security
63
66
  node_data["security"]
64
67
  end
65
68
 
66
- # @return [Nodes::Array<Server>]
69
+ # @return [Node::Array<Server>]
67
70
  def servers
68
71
  node_data["servers"]
69
72
  end
@@ -1,13 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "openapi3_parser/node/object"
4
- require "openapi3_parser/nodes/parameter/parameter_like"
4
+ require "openapi3_parser/node/parameter_like"
5
5
 
6
6
  module Openapi3Parser
7
- module Nodes
7
+ module Node
8
8
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#parameterObject
9
- class Parameter
10
- include Node::Object
9
+ class Parameter < Node::Object
11
10
  include ParameterLike
12
11
 
13
12
  # @return [String]
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Openapi3Parser
4
+ module Node
5
+ # This contains methods that are shared between nodes that act like a
6
+ # Parameter, at the time of writing this was {Header}[../Header.html]
7
+ # and {Parameter}[../Paramater.html]
8
+ module ParameterLike
9
+ # @return [String]
10
+ def description
11
+ node_data["description"]
12
+ end
13
+
14
+ # @return [String, nil]
15
+ def description_html
16
+ render_markdown(description)
17
+ end
18
+
19
+ # @return [Boolean]
20
+ def required?
21
+ node_data["required"]
22
+ end
23
+
24
+ # @return [Boolean]
25
+ def deprecated?
26
+ node_data["deprecated"]
27
+ end
28
+
29
+ # @return [Boolean]
30
+ def allow_empty_value?
31
+ node_data["allowEmptyValue"]
32
+ end
33
+
34
+ # @return [String, nil]
35
+ def style
36
+ node_data["style"]
37
+ end
38
+
39
+ # @return [Boolean]
40
+ def explode?
41
+ node_data["explode"]
42
+ end
43
+
44
+ # @return [Boolean]
45
+ def allow_reserved?
46
+ node_data["allowReserved"]
47
+ end
48
+
49
+ # @return [Schema, nil]
50
+ def schema
51
+ node_data["schema"]
52
+ end
53
+
54
+ # @return [Any]
55
+ def example
56
+ node_data["example"]
57
+ end
58
+
59
+ # @return [Map<String, Example>, nil]
60
+ def examples
61
+ node_data["examples"]
62
+ end
63
+
64
+ # @return [Map<String, MediaType>, nil]
65
+ def content
66
+ node_data["content"]
67
+ end
68
+ end
69
+ end
70
+ end
@@ -3,11 +3,9 @@
3
3
  require "openapi3_parser/node/object"
4
4
 
5
5
  module Openapi3Parser
6
- module Nodes
6
+ module Node
7
7
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#pathItemObject
8
- class PathItem
9
- include Node::Object
10
-
8
+ class PathItem < Node::Object
11
9
  # @return [String, nil]
12
10
  def summary
13
11
  node_data["summary"]
@@ -18,6 +16,11 @@ module Openapi3Parser
18
16
  node_data["description"]
19
17
  end
20
18
 
19
+ # @return [String, nil]
20
+ def description_html
21
+ render_markdown(description)
22
+ end
23
+
21
24
  # @return [Operation, nil]
22
25
  def get
23
26
  node_data["get"]
@@ -58,12 +61,12 @@ module Openapi3Parser
58
61
  node_data["trace"]
59
62
  end
60
63
 
61
- # @return [Nodes::Array<Server>]
64
+ # @return [Node::Array<Server>]
62
65
  def servers
63
66
  node_data["servers"]
64
67
  end
65
68
 
66
- # @return [Nodes::Array<Parameter>]
69
+ # @return [Node::Array<Parameter>]
67
70
  def parameters
68
71
  node_data["parameters"]
69
72
  end
@@ -3,10 +3,8 @@
3
3
  require "openapi3_parser/node/map"
4
4
 
5
5
  module Openapi3Parser
6
- module Nodes
6
+ module Node
7
7
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#pathsObject
8
- class Paths
9
- include Node::Map
10
- end
8
+ class Paths < Node::Map; end
11
9
  end
12
10
  end
@@ -3,16 +3,19 @@
3
3
  require "openapi3_parser/node/object"
4
4
 
5
5
  module Openapi3Parser
6
- module Nodes
6
+ module Node
7
7
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#requestBodyObject
8
- class RequestBody
9
- include Node::Object
10
-
8
+ class RequestBody < Node::Object
11
9
  # @return [String, nil]
12
10
  def description
13
11
  node_data["description"]
14
12
  end
15
13
 
14
+ # @return [String, nil]
15
+ def description_html
16
+ render_markdown(description)
17
+ end
18
+
16
19
  # @return [Map<String, MediaType>]
17
20
  def content
18
21
  node_data["content"]
@@ -3,16 +3,19 @@
3
3
  require "openapi3_parser/node/object"
4
4
 
5
5
  module Openapi3Parser
6
- module Nodes
6
+ module Node
7
7
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#responseObject
8
- class Response
9
- include Node::Object
10
-
8
+ class Response < Node::Object
11
9
  # @return [String]
12
10
  def description
13
11
  node_data["description"]
14
12
  end
15
13
 
14
+ # @return [String]
15
+ def description_html
16
+ render_markdown(description)
17
+ end
18
+
16
19
  # @return [Map<String, Header>]
17
20
  def headers
18
21
  node_data["headers"]
@@ -3,11 +3,9 @@
3
3
  require "openapi3_parser/node/map"
4
4
 
5
5
  module Openapi3Parser
6
- module Nodes
6
+ module Node
7
7
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#responsesObject
8
- class Responses
9
- include Node::Map
10
-
8
+ class Responses < Node::Map
11
9
  # @return [Response]
12
10
  def default
13
11
  node_data["default"]
@@ -3,12 +3,10 @@
3
3
  require "openapi3_parser/node/object"
4
4
 
5
5
  module Openapi3Parser
6
- module Nodes
6
+ module Node
7
7
  # @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#schemaObject
8
8
  # rubocop:disable ClassLength
9
- class Schema
10
- include Node::Object
11
-
9
+ class Schema < Node::Object
12
10
  # @return [String, nil]
13
11
  def title
14
12
  node_data["title"]
@@ -79,12 +77,12 @@ module Openapi3Parser
79
77
  node_data["minProperties"]
80
78
  end
81
79
 
82
- # @return [Nodes::Array<String>, nil]
80
+ # @return [Node::Array<String>, nil]
83
81
  def required
84
82
  node_data["required"]
85
83
  end
86
84
 
87
- # @return [Nodes::Array<Object>, nil]
85
+ # @return [Node::Array<Object>, nil]
88
86
  def enum
89
87
  node_data["enum"]
90
88
  end
@@ -94,17 +92,17 @@ module Openapi3Parser
94
92
  node_data["type"]
95
93
  end
96
94
 
97
- # @return [Nodes::Array<Schema>, nil]
95
+ # @return [Node::Array<Schema>, nil]
98
96
  def all_of
99
97
  node_data["allOf"]
100
98
  end
101
99
 
102
- # @return [Nodes::Array<Schema>, nil]
100
+ # @return [Node::Array<Schema>, nil]
103
101
  def one_of
104
102
  node_data["oneOf"]
105
103
  end
106
104
 
107
- # @return [Nodes::Array<Schema>, nil]
105
+ # @return [Node::Array<Schema>, nil]
108
106
  def any_of
109
107
  node_data["anyOf"]
110
108
  end
@@ -141,6 +139,11 @@ module Openapi3Parser
141
139
  node_data["description"]
142
140
  end
143
141
 
142
+ # @return [String, nil]
143
+ def description_html
144
+ render_markdown(description)
145
+ end
146
+
144
147
  # @return [String, nil]
145
148
  def format
146
149
  node_data["format"]