openapi3_parser 0.6.1 → 0.7.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +1 -1
- data/lib/openapi3_parser/document.rb +1 -1
- data/lib/openapi3_parser/node/array.rb +8 -0
- data/lib/openapi3_parser/node/context.rb +10 -1
- data/lib/openapi3_parser/node/map.rb +16 -0
- data/lib/openapi3_parser/node/object.rb +16 -0
- data/lib/openapi3_parser/node/schema.rb +46 -0
- data/lib/openapi3_parser/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4d2e3dac62b0199c892ea6d0e9ed34dcea67c9d
|
4
|
+
data.tar.gz: 93839047c652d0342d0a6a6700863c4a143e3c21
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06c8d624f8a4a3e95f8838f60682a7a2861e333cfcb4c43a5f9fc4961406c1aeb5ad91da57e1664fa9a9d62eb7deaade81314ec924dec8e09b6eda1b00fb0d2b
|
7
|
+
data.tar.gz: 1304885f64188113d219df891a3584259cff0a628c696ad74902fd5667da994e9f2116ab880436f4e3c5a31a21605bb3f0c21a1202499780b6a861bb482713ad
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
# 0.7.0
|
2
|
+
|
3
|
+
- Add `#values` method to `Node::Object` and `Node#Map` to have a method that
|
4
|
+
pairs with `#keys`
|
5
|
+
- Add `Node::Schema#requires?` method to simplify checking whether a property
|
6
|
+
is required by a particular schema.
|
7
|
+
- Add `#==` methods to Node objects. This allows checking whether two nodes
|
8
|
+
are from the same source location even if they're referenced in different
|
9
|
+
places.
|
10
|
+
- Add `Node::Schema#name` method that looks up the name of a Schema based
|
11
|
+
on it's contextual position in a document. Allows accessing the `Pet` value
|
12
|
+
from `#/components/schemas/Pet`.
|
13
|
+
|
1
14
|
# 0.6.1
|
2
15
|
|
3
16
|
- Fix bug where Node::Object and Node::Map iterated arrays rather than hashes
|
data/README.md
CHANGED
@@ -60,7 +60,7 @@ module Openapi3Parser
|
|
60
60
|
# @!method external_docs
|
61
61
|
# The value of the external_docs field on the OpenAPI document
|
62
62
|
# @see Node::Openapi#external_docs
|
63
|
-
# @return [Node::ExternalDocumentation]
|
63
|
+
# @return [Node::ExternalDocumentation, nil]
|
64
64
|
# @!method extension
|
65
65
|
# Look up an extension field provided for the root object of the document
|
66
66
|
# @see Node::Object#extension
|
@@ -35,6 +35,14 @@ module Openapi3Parser
|
|
35
35
|
Placeholder.each(node_data, &block)
|
36
36
|
end
|
37
37
|
|
38
|
+
# @param [Any] other
|
39
|
+
#
|
40
|
+
# @return [Boolean]
|
41
|
+
def ==(other)
|
42
|
+
other.instance_of?(self.class) &&
|
43
|
+
node_context.same_data_and_source?(other.node_context)
|
44
|
+
end
|
45
|
+
|
38
46
|
# Used to access a node relative to this node
|
39
47
|
# @param [Source::Pointer, ::Array, ::String] pointer_like
|
40
48
|
# @return anything
|
@@ -65,10 +65,19 @@ module Openapi3Parser
|
|
65
65
|
@source_location = source_location
|
66
66
|
end
|
67
67
|
|
68
|
+
# @param [Context] other
|
68
69
|
# @return [Boolean]
|
69
70
|
def ==(other)
|
71
|
+
document_location == other.document_location &&
|
72
|
+
same_data_and_source?(other)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Check that contexts are the same without concern for document location
|
76
|
+
#
|
77
|
+
# @param [Context] other
|
78
|
+
# @return [Boolean]
|
79
|
+
def same_data_and_source?(other)
|
70
80
|
input == other.input &&
|
71
|
-
document_location == other.document_location &&
|
72
81
|
source_location == other.source_location
|
73
82
|
end
|
74
83
|
|
@@ -48,6 +48,14 @@ module Openapi3Parser
|
|
48
48
|
self["x-#{value}"]
|
49
49
|
end
|
50
50
|
|
51
|
+
# @param [Any] other
|
52
|
+
#
|
53
|
+
# @return [Boolean]
|
54
|
+
def ==(other)
|
55
|
+
other.instance_of?(self.class) &&
|
56
|
+
node_context.same_data_and_source?(other.node_context)
|
57
|
+
end
|
58
|
+
|
51
59
|
# Iterates through the data of this node, used by Enumerable
|
52
60
|
#
|
53
61
|
# @return [Object]
|
@@ -55,6 +63,14 @@ module Openapi3Parser
|
|
55
63
|
Placeholder.each(node_data, &block)
|
56
64
|
end
|
57
65
|
|
66
|
+
# Provide an array of values for this object, a partner to the #keys
|
67
|
+
# method
|
68
|
+
#
|
69
|
+
# @return [Array]
|
70
|
+
def values
|
71
|
+
map(&:last)
|
72
|
+
end
|
73
|
+
|
58
74
|
# Used to access a node relative to this node
|
59
75
|
# @param [Source::Pointer, ::Array, ::String] pointer_like
|
60
76
|
# @return anything
|
@@ -48,6 +48,14 @@ module Openapi3Parser
|
|
48
48
|
self["x-#{value}"]
|
49
49
|
end
|
50
50
|
|
51
|
+
# @param [Any] other
|
52
|
+
#
|
53
|
+
# @return [Boolean]
|
54
|
+
def ==(other)
|
55
|
+
other.instance_of?(self.class) &&
|
56
|
+
node_context.same_data_and_source?(other.node_context)
|
57
|
+
end
|
58
|
+
|
51
59
|
# Iterates through the data of this node, used by Enumerable
|
52
60
|
#
|
53
61
|
# @return [Object]
|
@@ -55,6 +63,14 @@ module Openapi3Parser
|
|
55
63
|
Placeholder.each(node_data, &block)
|
56
64
|
end
|
57
65
|
|
66
|
+
# Provide an array of values for this object, a partner to the #keys
|
67
|
+
# method
|
68
|
+
#
|
69
|
+
# @return [Array]
|
70
|
+
def values
|
71
|
+
map(&:last)
|
72
|
+
end
|
73
|
+
|
58
74
|
# Used to render fields that can be in markdown syntax into HTML
|
59
75
|
# @param [String, nil] value
|
60
76
|
# @return [String, nil]
|
@@ -7,6 +7,37 @@ module Openapi3Parser
|
|
7
7
|
# @see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#schemaObject
|
8
8
|
# rubocop:disable ClassLength
|
9
9
|
class Schema < Node::Object
|
10
|
+
# This is used to provide a name for the schema based on it's position in
|
11
|
+
# an OpenAPI document.
|
12
|
+
#
|
13
|
+
# For example it's common to have an OpenAPI document structured like so:
|
14
|
+
# components:
|
15
|
+
# schemas:
|
16
|
+
# Product:
|
17
|
+
# properties:
|
18
|
+
# product_id:
|
19
|
+
# type: string
|
20
|
+
# description:
|
21
|
+
# type: string
|
22
|
+
#
|
23
|
+
# and there is then implied meaning in the field name of Product, ie
|
24
|
+
# that schema now represents a product. This data is not easily or
|
25
|
+
# consistently made available as it is part of the path to the data
|
26
|
+
# rather than the data itself. Instead the field that would be more
|
27
|
+
# appropriate would be "title" within a schema.
|
28
|
+
#
|
29
|
+
# As this is a common pattern in OpenAPI docs this provides a method
|
30
|
+
# to look up this contextual name of the schema so it can be referenced
|
31
|
+
# when working with the document, it only considers a field to be
|
32
|
+
# name if it is within a group called schemas (as is the case
|
33
|
+
# in #/components/schemas)
|
34
|
+
#
|
35
|
+
# @return [String, nil]
|
36
|
+
def name
|
37
|
+
segments = node_context.source_location.pointer.segments
|
38
|
+
segments[-1] if segments[-2] == "schemas"
|
39
|
+
end
|
40
|
+
|
10
41
|
# @return [String, nil]
|
11
42
|
def title
|
12
43
|
self["title"]
|
@@ -82,6 +113,21 @@ module Openapi3Parser
|
|
82
113
|
self["required"]
|
83
114
|
end
|
84
115
|
|
116
|
+
# Returns whether a property is a required field or not. Can accept the
|
117
|
+
# property name or a schema
|
118
|
+
#
|
119
|
+
# @param [String, Schema] property
|
120
|
+
# @return [Boolean]
|
121
|
+
def requires?(property)
|
122
|
+
if property.is_a?(Schema)
|
123
|
+
properties.to_h
|
124
|
+
.select { |k, _| required.to_a.include?(k) }
|
125
|
+
.any? { |_, schema| schema == property }
|
126
|
+
else
|
127
|
+
required.to_a.include?(property)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
85
131
|
# @return [Node::Array<Object>, nil]
|
86
132
|
def enum
|
87
133
|
self["enum"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openapi3_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Dew
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commonmarker
|