openapi3_parser 0.5.2 → 0.6.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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +3 -3
  4. data/CHANGELOG.md +7 -1
  5. data/README.md +102 -15
  6. data/lib/openapi3_parser/document.rb +14 -14
  7. data/lib/openapi3_parser/document/reference_registry.rb +72 -0
  8. data/lib/openapi3_parser/node/array.rb +10 -2
  9. data/lib/openapi3_parser/node/components.rb +9 -9
  10. data/lib/openapi3_parser/node/contact.rb +3 -3
  11. data/lib/openapi3_parser/node/context.rb +129 -0
  12. data/lib/openapi3_parser/node/discriminator.rb +2 -2
  13. data/lib/openapi3_parser/node/encoding.rb +5 -5
  14. data/lib/openapi3_parser/node/example.rb +4 -4
  15. data/lib/openapi3_parser/node/external_documentation.rb +2 -2
  16. data/lib/openapi3_parser/node/info.rb +6 -6
  17. data/lib/openapi3_parser/node/license.rb +2 -2
  18. data/lib/openapi3_parser/node/link.rb +6 -6
  19. data/lib/openapi3_parser/node/map.rb +8 -4
  20. data/lib/openapi3_parser/node/media_type.rb +5 -5
  21. data/lib/openapi3_parser/node/oauth_flow.rb +4 -4
  22. data/lib/openapi3_parser/node/oauth_flows.rb +4 -4
  23. data/lib/openapi3_parser/node/object.rb +8 -4
  24. data/lib/openapi3_parser/node/openapi.rb +8 -8
  25. data/lib/openapi3_parser/node/operation.rb +12 -12
  26. data/lib/openapi3_parser/node/parameter.rb +2 -2
  27. data/lib/openapi3_parser/node/parameter_like.rb +11 -11
  28. data/lib/openapi3_parser/node/path_item.rb +12 -12
  29. data/lib/openapi3_parser/node/placeholder.rb +34 -0
  30. data/lib/openapi3_parser/node/request_body.rb +3 -3
  31. data/lib/openapi3_parser/node/response.rb +4 -4
  32. data/lib/openapi3_parser/node/responses.rb +1 -1
  33. data/lib/openapi3_parser/node/schema.rb +36 -36
  34. data/lib/openapi3_parser/node/security_scheme.rb +8 -8
  35. data/lib/openapi3_parser/node/server.rb +3 -3
  36. data/lib/openapi3_parser/node/server_variable.rb +3 -3
  37. data/lib/openapi3_parser/node/tag.rb +3 -3
  38. data/lib/openapi3_parser/node/xml.rb +5 -5
  39. data/lib/openapi3_parser/node_factory/array.rb +15 -13
  40. data/lib/openapi3_parser/node_factory/callback.rb +2 -2
  41. data/lib/openapi3_parser/node_factory/context.rb +111 -0
  42. data/lib/openapi3_parser/node_factory/field.rb +5 -7
  43. data/lib/openapi3_parser/node_factory/fields/reference.rb +43 -24
  44. data/lib/openapi3_parser/node_factory/link.rb +1 -1
  45. data/lib/openapi3_parser/node_factory/map.rb +14 -12
  46. data/lib/openapi3_parser/node_factory/object.rb +9 -5
  47. data/lib/openapi3_parser/node_factory/object_factory/node_builder.rb +21 -28
  48. data/lib/openapi3_parser/node_factory/optional_reference.rb +4 -0
  49. data/lib/openapi3_parser/node_factory/parameter_like.rb +0 -2
  50. data/lib/openapi3_parser/node_factory/path_item.rb +7 -4
  51. data/lib/openapi3_parser/node_factory/paths.rb +2 -2
  52. data/lib/openapi3_parser/node_factory/reference.rb +17 -10
  53. data/lib/openapi3_parser/node_factory/responses.rb +2 -2
  54. data/lib/openapi3_parser/node_factory/security_requirement.rb +2 -2
  55. data/lib/openapi3_parser/source.rb +27 -24
  56. data/lib/openapi3_parser/{context → source}/location.rb +13 -1
  57. data/lib/openapi3_parser/{context → source}/pointer.rb +2 -2
  58. data/lib/openapi3_parser/source/resolved_reference.rb +67 -0
  59. data/lib/openapi3_parser/validators/duplicate_parameters.rb +8 -4
  60. data/lib/openapi3_parser/validators/reference.rb +3 -3
  61. data/lib/openapi3_parser/version.rb +1 -1
  62. data/openapi3_parser.gemspec +1 -1
  63. metadata +11 -10
  64. data/lib/openapi3_parser/context.rb +0 -162
  65. data/lib/openapi3_parser/document/reference_register.rb +0 -48
  66. data/lib/openapi3_parser/node_factory/recursive_pointer.rb +0 -17
  67. data/lib/openapi3_parser/source/reference_resolver.rb +0 -82
@@ -9,42 +9,42 @@ module Openapi3Parser
9
9
  class Openapi < Node::Object
10
10
  # @return [String]
11
11
  def openapi
12
- node_data["openapi"]
12
+ self["openapi"]
13
13
  end
14
14
 
15
15
  # @return [Info]
16
16
  def info
17
- node_data["info"]
17
+ self["info"]
18
18
  end
19
19
 
20
20
  # @return [Node::Array<Server>]
21
21
  def servers
22
- node_data["servers"]
22
+ self["servers"]
23
23
  end
24
24
 
25
25
  # @return [Paths]
26
26
  def paths
27
- node_data["paths"]
27
+ self["paths"]
28
28
  end
29
29
 
30
30
  # @return [Components]
31
31
  def components
32
- node_data["components"]
32
+ self["components"]
33
33
  end
34
34
 
35
35
  # @return [Node::Array<SecurityRequirement>]
36
36
  def security
37
- node_data["security"]
37
+ self["security"]
38
38
  end
39
39
 
40
40
  # @return [Node::Array<Tag>]
41
41
  def tags
42
- node_data["tags"]
42
+ self["tags"]
43
43
  end
44
44
 
45
45
  # @return [ExternalDocumentation]
46
46
  def external_docs
47
- node_data["externalDocs"]
47
+ self["externalDocs"]
48
48
  end
49
49
  end
50
50
  end
@@ -8,17 +8,17 @@ module Openapi3Parser
8
8
  class Operation < Node::Object
9
9
  # @return [Node::Array<String>]
10
10
  def tags
11
- node_data["tags"]
11
+ self["tags"]
12
12
  end
13
13
 
14
14
  # @return [String, nil]
15
15
  def summary
16
- node_data["summary"]
16
+ self["summary"]
17
17
  end
18
18
 
19
19
  # @return [String, nil]
20
20
  def description
21
- node_data["description"]
21
+ self["description"]
22
22
  end
23
23
 
24
24
  # @return [String, nil]
@@ -28,47 +28,47 @@ module Openapi3Parser
28
28
 
29
29
  # @return [ExternalDocumentation, nil]
30
30
  def external_docs
31
- node_data["externalDocs"]
31
+ self["externalDocs"]
32
32
  end
33
33
 
34
34
  # @return [String, nil]
35
35
  def operation_id
36
- node_data["operationId"]
36
+ self["operationId"]
37
37
  end
38
38
 
39
39
  # @return [Node::Array<Parameter>]
40
40
  def parameters
41
- node_data["parameters"]
41
+ self["parameters"]
42
42
  end
43
43
 
44
44
  # @return [RequestBody, nil]
45
45
  def request_body
46
- node_data["requestBody"]
46
+ self["requestBody"]
47
47
  end
48
48
 
49
49
  # @return [Responses]
50
50
  def responses
51
- node_data["responses"]
51
+ self["responses"]
52
52
  end
53
53
 
54
54
  # @return [Map<String, Callback>]
55
55
  def callbacks
56
- node_data["callbacks"]
56
+ self["callbacks"]
57
57
  end
58
58
 
59
59
  # @return [Boolean]
60
60
  def deprecated?
61
- node_data["deprecated"]
61
+ self["deprecated"]
62
62
  end
63
63
 
64
64
  # @return [Node::Array<SecurityRequirement>]
65
65
  def security
66
- node_data["security"]
66
+ self["security"]
67
67
  end
68
68
 
69
69
  # @return [Node::Array<Server>]
70
70
  def servers
71
- node_data["servers"]
71
+ self["servers"]
72
72
  end
73
73
  end
74
74
  end
@@ -11,12 +11,12 @@ module Openapi3Parser
11
11
 
12
12
  # @return [String]
13
13
  def name
14
- node_data["name"]
14
+ self["name"]
15
15
  end
16
16
 
17
17
  # @return [String]
18
18
  def in
19
- node_data["in"]
19
+ self["in"]
20
20
  end
21
21
  end
22
22
  end
@@ -8,7 +8,7 @@ module Openapi3Parser
8
8
  module ParameterLike
9
9
  # @return [String]
10
10
  def description
11
- node_data["description"]
11
+ self["description"]
12
12
  end
13
13
 
14
14
  # @return [String, nil]
@@ -18,52 +18,52 @@ module Openapi3Parser
18
18
 
19
19
  # @return [Boolean]
20
20
  def required?
21
- node_data["required"]
21
+ self["required"]
22
22
  end
23
23
 
24
24
  # @return [Boolean]
25
25
  def deprecated?
26
- node_data["deprecated"]
26
+ self["deprecated"]
27
27
  end
28
28
 
29
29
  # @return [Boolean]
30
30
  def allow_empty_value?
31
- node_data["allowEmptyValue"]
31
+ self["allowEmptyValue"]
32
32
  end
33
33
 
34
34
  # @return [String, nil]
35
35
  def style
36
- node_data["style"]
36
+ self["style"]
37
37
  end
38
38
 
39
39
  # @return [Boolean]
40
40
  def explode?
41
- node_data["explode"]
41
+ self["explode"]
42
42
  end
43
43
 
44
44
  # @return [Boolean]
45
45
  def allow_reserved?
46
- node_data["allowReserved"]
46
+ self["allowReserved"]
47
47
  end
48
48
 
49
49
  # @return [Schema, nil]
50
50
  def schema
51
- node_data["schema"]
51
+ self["schema"]
52
52
  end
53
53
 
54
54
  # @return [Any]
55
55
  def example
56
- node_data["example"]
56
+ self["example"]
57
57
  end
58
58
 
59
59
  # @return [Map<String, Example>, nil]
60
60
  def examples
61
- node_data["examples"]
61
+ self["examples"]
62
62
  end
63
63
 
64
64
  # @return [Map<String, MediaType>, nil]
65
65
  def content
66
- node_data["content"]
66
+ self["content"]
67
67
  end
68
68
  end
69
69
  end
@@ -8,12 +8,12 @@ module Openapi3Parser
8
8
  class PathItem < Node::Object
9
9
  # @return [String, nil]
10
10
  def summary
11
- node_data["summary"]
11
+ self["summary"]
12
12
  end
13
13
 
14
14
  # @return [String, nil]
15
15
  def description
16
- node_data["description"]
16
+ self["description"]
17
17
  end
18
18
 
19
19
  # @return [String, nil]
@@ -23,52 +23,52 @@ module Openapi3Parser
23
23
 
24
24
  # @return [Operation, nil]
25
25
  def get
26
- node_data["get"]
26
+ self["get"]
27
27
  end
28
28
 
29
29
  # @return [Operation, nil]
30
30
  def put
31
- node_data["put"]
31
+ self["put"]
32
32
  end
33
33
 
34
34
  # @return [Operation, nil]
35
35
  def post
36
- node_data["post"]
36
+ self["post"]
37
37
  end
38
38
 
39
39
  # @return [Operation, nil]
40
40
  def delete
41
- node_data["delete"]
41
+ self["delete"]
42
42
  end
43
43
 
44
44
  # @return [Operation, nil]
45
45
  def options
46
- node_data["options"]
46
+ self["options"]
47
47
  end
48
48
 
49
49
  # @return [Operation, nil]
50
50
  def head
51
- node_data["head"]
51
+ self["head"]
52
52
  end
53
53
 
54
54
  # @return [Operation, nil]
55
55
  def patch
56
- node_data["patch"]
56
+ self["patch"]
57
57
  end
58
58
 
59
59
  # @return [Operation, nil]
60
60
  def trace
61
- node_data["trace"]
61
+ self["trace"]
62
62
  end
63
63
 
64
64
  # @return [Node::Array<Server>]
65
65
  def servers
66
- node_data["servers"]
66
+ self["servers"]
67
67
  end
68
68
 
69
69
  # @return [Node::Array<Parameter>]
70
70
  def parameters
71
- node_data["parameters"]
71
+ self["parameters"]
72
72
  end
73
73
  end
74
74
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Openapi3Parser
4
+ module Node
5
+ class Placeholder
6
+ def self.resolve(potential_placeholder)
7
+ if potential_placeholder.is_a?(Placeholder)
8
+ potential_placeholder.node
9
+ else
10
+ potential_placeholder
11
+ end
12
+ end
13
+
14
+ def initialize(node_factory, field, parent_context)
15
+ @node_factory = node_factory
16
+ @field = field
17
+ @parent_context = parent_context
18
+ end
19
+
20
+ def node
21
+ @node ||= begin
22
+ node_context = Context.next_field(parent_context,
23
+ field,
24
+ node_factory.context)
25
+ node_factory.node(node_context)
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :node_factory, :field, :parent_context
32
+ end
33
+ end
34
+ end
@@ -8,7 +8,7 @@ module Openapi3Parser
8
8
  class RequestBody < Node::Object
9
9
  # @return [String, nil]
10
10
  def description
11
- node_data["description"]
11
+ self["description"]
12
12
  end
13
13
 
14
14
  # @return [String, nil]
@@ -18,12 +18,12 @@ module Openapi3Parser
18
18
 
19
19
  # @return [Map<String, MediaType>]
20
20
  def content
21
- node_data["content"]
21
+ self["content"]
22
22
  end
23
23
 
24
24
  # @return [Boolean]
25
25
  def required?
26
- node_data["required"]
26
+ self["required"]
27
27
  end
28
28
  end
29
29
  end
@@ -8,7 +8,7 @@ module Openapi3Parser
8
8
  class Response < Node::Object
9
9
  # @return [String]
10
10
  def description
11
- node_data["description"]
11
+ self["description"]
12
12
  end
13
13
 
14
14
  # @return [String]
@@ -18,17 +18,17 @@ module Openapi3Parser
18
18
 
19
19
  # @return [Map<String, Header>]
20
20
  def headers
21
- node_data["headers"]
21
+ self["headers"]
22
22
  end
23
23
 
24
24
  # @return [Map<String, MediaType>]
25
25
  def content
26
- node_data["content"]
26
+ self["content"]
27
27
  end
28
28
 
29
29
  # @return [Map<String, Link>]
30
30
  def links
31
- node_data["links"]
31
+ self["links"]
32
32
  end
33
33
  end
34
34
  end
@@ -8,7 +8,7 @@ module Openapi3Parser
8
8
  class Responses < Node::Map
9
9
  # @return [Response]
10
10
  def default
11
- node_data["default"]
11
+ self["default"]
12
12
  end
13
13
  end
14
14
  end
@@ -9,134 +9,134 @@ module Openapi3Parser
9
9
  class Schema < Node::Object
10
10
  # @return [String, nil]
11
11
  def title
12
- node_data["title"]
12
+ self["title"]
13
13
  end
14
14
 
15
15
  # @return [Numeric, nil]
16
16
  def multiple_of
17
- node_data["multipleOf"]
17
+ self["multipleOf"]
18
18
  end
19
19
 
20
20
  # @return [Integer, nil]
21
21
  def maximum
22
- node_data["maximum"]
22
+ self["maximum"]
23
23
  end
24
24
 
25
25
  # @return [Boolean]
26
26
  def exclusive_maximum?
27
- node_data["exclusiveMaximum"]
27
+ self["exclusiveMaximum"]
28
28
  end
29
29
 
30
30
  # @return [Integer, nil]
31
31
  def minimum
32
- node_data["minimum"]
32
+ self["minimum"]
33
33
  end
34
34
 
35
35
  # @return [Boolean]
36
36
  def exclusive_minimum?
37
- node_data["exclusiveMinimum"]
37
+ self["exclusiveMinimum"]
38
38
  end
39
39
 
40
40
  # @return [Integer, nil]
41
41
  def max_length
42
- node_data["maxLength"]
42
+ self["maxLength"]
43
43
  end
44
44
 
45
45
  # @return [Integer]
46
46
  def min_length
47
- node_data["minLength"]
47
+ self["minLength"]
48
48
  end
49
49
 
50
50
  # @return [String, nil]
51
51
  def pattern
52
- node_data["pattern"]
52
+ self["pattern"]
53
53
  end
54
54
 
55
55
  # @return [Integer, nil]
56
56
  def max_items
57
- node_data["maxItems"]
57
+ self["maxItems"]
58
58
  end
59
59
 
60
60
  # @return [Integer]
61
61
  def min_items
62
- node_data["minItems"]
62
+ self["minItems"]
63
63
  end
64
64
 
65
65
  # @return [Boolean]
66
66
  def unique_items?
67
- node_data["uniqueItems"]
67
+ self["uniqueItems"]
68
68
  end
69
69
 
70
70
  # @return [Integer, nil]
71
71
  def max_properties
72
- node_data["maxProperties"]
72
+ self["maxProperties"]
73
73
  end
74
74
 
75
75
  # @return [Integer]
76
76
  def min_properties
77
- node_data["minProperties"]
77
+ self["minProperties"]
78
78
  end
79
79
 
80
80
  # @return [Node::Array<String>, nil]
81
81
  def required
82
- node_data["required"]
82
+ self["required"]
83
83
  end
84
84
 
85
85
  # @return [Node::Array<Object>, nil]
86
86
  def enum
87
- node_data["enum"]
87
+ self["enum"]
88
88
  end
89
89
 
90
90
  # @return [String, nil]
91
91
  def type
92
- node_data["type"]
92
+ self["type"]
93
93
  end
94
94
 
95
95
  # @return [Node::Array<Schema>, nil]
96
96
  def all_of
97
- node_data["allOf"]
97
+ self["allOf"]
98
98
  end
99
99
 
100
100
  # @return [Node::Array<Schema>, nil]
101
101
  def one_of
102
- node_data["oneOf"]
102
+ self["oneOf"]
103
103
  end
104
104
 
105
105
  # @return [Node::Array<Schema>, nil]
106
106
  def any_of
107
- node_data["anyOf"]
107
+ self["anyOf"]
108
108
  end
109
109
 
110
110
  # @return [Schema, nil]
111
111
  def not
112
- node_data["not"]
112
+ self["not"]
113
113
  end
114
114
 
115
115
  # @return [Schema, nil]
116
116
  def items
117
- node_data["items"]
117
+ self["items"]
118
118
  end
119
119
 
120
120
  # @return [Map<String, Schema>]
121
121
  def properties
122
- node_data["properties"]
122
+ self["properties"]
123
123
  end
124
124
 
125
125
  # @return [Boolean]
126
126
  def additional_properties?
127
- node_data["additionalProperties"] != false
127
+ self["additionalProperties"] != false
128
128
  end
129
129
 
130
130
  # @return [Schema, nil]
131
131
  def additional_properties_schema
132
- properties = node_data["additionalProperties"]
132
+ properties = self["additionalProperties"]
133
133
  return if [true, false].include?(properties)
134
134
  properties
135
135
  end
136
136
 
137
137
  # @return [String, nil]
138
138
  def description
139
- node_data["description"]
139
+ self["description"]
140
140
  end
141
141
 
142
142
  # @return [String, nil]
@@ -146,52 +146,52 @@ module Openapi3Parser
146
146
 
147
147
  # @return [String, nil]
148
148
  def format
149
- node_data["format"]
149
+ self["format"]
150
150
  end
151
151
 
152
152
  # @return [Any]
153
153
  def default
154
- node_data["default"]
154
+ self["default"]
155
155
  end
156
156
 
157
157
  # @return [Boolean]
158
158
  def nullable?
159
- node_data["nullable"]
159
+ self["nullable"]
160
160
  end
161
161
 
162
162
  # @return [Discriminator, nil]
163
163
  def disciminator
164
- node_data["discriminator"]
164
+ self["discriminator"]
165
165
  end
166
166
 
167
167
  # @return [Boolean]
168
168
  def read_only?
169
- node_data["readOnly"]
169
+ self["readOnly"]
170
170
  end
171
171
 
172
172
  # @return [Boolean]
173
173
  def write_only?
174
- node_data["writeOnly"]
174
+ self["writeOnly"]
175
175
  end
176
176
 
177
177
  # @return [Xml, nil]
178
178
  def xml
179
- node_data["xml"]
179
+ self["xml"]
180
180
  end
181
181
 
182
182
  # @return [ExternalDocumentation, nil]
183
183
  def external_docs
184
- node_data["externalDocs"]
184
+ self["externalDocs"]
185
185
  end
186
186
 
187
187
  # @return [Any]
188
188
  def example
189
- node_data["example"]
189
+ self["example"]
190
190
  end
191
191
 
192
192
  # @return [Boolean]
193
193
  def deprecated?
194
- node_data["deprecated"]
194
+ self["deprecated"]
195
195
  end
196
196
  end
197
197
  # rubocop:enable ClassLength