openapi3_parser 0.3.0 → 0.4.0

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 (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"]