openapi3_parser 0.7.0 → 0.8.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/.gitignore +1 -0
- data/.rubocop.yml +2 -4
- data/.travis.yml +11 -0
- data/CHANGELOG.md +13 -0
- data/README.md +4 -1
- data/TODO.md +1 -1
- data/lib/openapi3_parser.rb +2 -3
- data/lib/openapi3_parser/array_sentence.rb +1 -0
- data/lib/openapi3_parser/document.rb +2 -1
- data/lib/openapi3_parser/node/array.rb +1 -1
- data/lib/openapi3_parser/node/context.rb +23 -0
- data/lib/openapi3_parser/node/map.rb +1 -1
- data/lib/openapi3_parser/node/object.rb +1 -0
- data/lib/openapi3_parser/node/operation.rb +8 -0
- data/lib/openapi3_parser/node/path_item.rb +8 -0
- data/lib/openapi3_parser/node/placeholder.rb +8 -5
- data/lib/openapi3_parser/node/schema.rb +3 -2
- data/lib/openapi3_parser/node_factory.rb +1 -1
- data/lib/openapi3_parser/node_factory/array.rb +34 -26
- data/lib/openapi3_parser/node_factory/context.rb +9 -2
- data/lib/openapi3_parser/node_factory/discriminator.rb +2 -0
- data/lib/openapi3_parser/node_factory/field.rb +2 -0
- data/lib/openapi3_parser/node_factory/fields/reference.rb +1 -0
- data/lib/openapi3_parser/node_factory/map.rb +6 -4
- data/lib/openapi3_parser/node_factory/media_type.rb +1 -0
- data/lib/openapi3_parser/node_factory/object.rb +4 -1
- data/lib/openapi3_parser/node_factory/object_factory/dsl.rb +1 -1
- data/lib/openapi3_parser/node_factory/object_factory/field_config.rb +1 -0
- data/lib/openapi3_parser/node_factory/object_factory/node_builder.rb +1 -0
- data/lib/openapi3_parser/node_factory/object_factory/validator.rb +6 -4
- data/lib/openapi3_parser/node_factory/openapi.rb +2 -0
- data/lib/openapi3_parser/node_factory/operation.rb +11 -0
- data/lib/openapi3_parser/node_factory/parameter.rb +2 -0
- data/lib/openapi3_parser/node_factory/parameter_like.rb +1 -0
- data/lib/openapi3_parser/node_factory/path_item.rb +27 -5
- data/lib/openapi3_parser/node_factory/paths.rb +1 -1
- data/lib/openapi3_parser/node_factory/response.rb +1 -0
- data/lib/openapi3_parser/node_factory/responses.rb +1 -1
- data/lib/openapi3_parser/node_factory/schema.rb +3 -0
- data/lib/openapi3_parser/node_factory/server_variable.rb +1 -0
- data/lib/openapi3_parser/node_factory/type_checker.rb +6 -0
- data/lib/openapi3_parser/source.rb +2 -0
- data/lib/openapi3_parser/source/location.rb +6 -0
- data/lib/openapi3_parser/source/pointer.rb +5 -0
- data/lib/openapi3_parser/source_input.rb +2 -0
- data/lib/openapi3_parser/source_input/file.rb +2 -0
- data/lib/openapi3_parser/source_input/raw.rb +3 -0
- data/lib/openapi3_parser/source_input/resolve_next.rb +1 -0
- data/lib/openapi3_parser/source_input/string_parser.rb +3 -2
- data/lib/openapi3_parser/source_input/url.rb +2 -0
- data/lib/openapi3_parser/validation/error.rb +2 -0
- data/lib/openapi3_parser/validators/component_keys.rb +1 -1
- data/lib/openapi3_parser/validators/duplicate_parameters.rb +1 -0
- data/lib/openapi3_parser/validators/email.rb +1 -1
- data/lib/openapi3_parser/validators/media_type.rb +1 -1
- data/lib/openapi3_parser/validators/mutually_exclusive_fields.rb +2 -2
- data/lib/openapi3_parser/validators/reference.rb +2 -0
- data/lib/openapi3_parser/validators/required_fields.rb +2 -2
- data/lib/openapi3_parser/validators/unexpected_fields.rb +3 -2
- data/lib/openapi3_parser/version.rb +1 -1
- data/openapi3_parser.gemspec +9 -7
- metadata +44 -16
@@ -39,6 +39,7 @@ module Openapi3Parser
|
|
39
39
|
# @return [Boolean]
|
40
40
|
def ==(other)
|
41
41
|
return false unless other.instance_of?(self.class)
|
42
|
+
|
42
43
|
path == other.path &&
|
43
44
|
working_directory == other.working_directory
|
44
45
|
end
|
@@ -66,6 +67,7 @@ module Openapi3Parser
|
|
66
67
|
end
|
67
68
|
|
68
69
|
return path unless other_path
|
70
|
+
|
69
71
|
other_path ? relative_path(other_path, path) : path
|
70
72
|
end
|
71
73
|
|
@@ -44,6 +44,7 @@ module Openapi3Parser
|
|
44
44
|
# @return [Boolean]
|
45
45
|
def ==(other)
|
46
46
|
return false unless other.instance_of?(self.class)
|
47
|
+
|
47
48
|
raw_input == other.raw_input &&
|
48
49
|
base_url == other.base_url &&
|
49
50
|
working_directory == other.working_directory
|
@@ -72,6 +73,7 @@ module Openapi3Parser
|
|
72
73
|
|
73
74
|
def parse_contents
|
74
75
|
return raw_input if raw_input.respond_to?(:keys)
|
76
|
+
|
75
77
|
StringParser.call(
|
76
78
|
input_to_string(raw_input),
|
77
79
|
raw_input.respond_to?(:path) ? ::File.basename(raw_input.path) : nil
|
@@ -81,6 +83,7 @@ module Openapi3Parser
|
|
81
83
|
def input_to_string(input)
|
82
84
|
return input.read if input.respond_to?(:read)
|
83
85
|
return input.to_s if input.respond_to?(:to_s)
|
86
|
+
|
84
87
|
input
|
85
88
|
end
|
86
89
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
3
|
+
require "psych"
|
4
4
|
require "json"
|
5
5
|
|
6
6
|
module Openapi3Parser
|
@@ -27,6 +27,7 @@ module Openapi3Parser
|
|
27
27
|
|
28
28
|
def json?
|
29
29
|
return false if filename && ::File.extname(filename) == ".yaml"
|
30
|
+
|
30
31
|
json_filename = filename && ::File.extname(filename) == ".json"
|
31
32
|
json_filename || input.strip[0] == "{"
|
32
33
|
end
|
@@ -36,7 +37,7 @@ module Openapi3Parser
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def parse_yaml
|
39
|
-
|
40
|
+
Psych.safe_load(input, permitted_classes: [Date, Time], aliases: true)
|
40
41
|
end
|
41
42
|
end
|
42
43
|
end
|
@@ -32,6 +32,7 @@ module Openapi3Parser
|
|
32
32
|
# @return [Boolean]
|
33
33
|
def ==(other)
|
34
34
|
return false unless other.instance_of?(self.class)
|
35
|
+
|
35
36
|
[request_url, resolved_url].include?(other.request_url) ||
|
36
37
|
[request_url, resolved_url].include?(other.resolved_url)
|
37
38
|
end
|
@@ -89,6 +90,7 @@ module Openapi3Parser
|
|
89
90
|
|
90
91
|
def call
|
91
92
|
return to_uri.to_s if different_hosts?
|
93
|
+
|
92
94
|
relative_path
|
93
95
|
end
|
94
96
|
|
@@ -35,6 +35,7 @@ module Openapi3Parser
|
|
35
35
|
def for_type
|
36
36
|
return unless factory_class
|
37
37
|
return "(anonymous)" unless factory_class.name
|
38
|
+
|
38
39
|
factory_class.name.split("::").last
|
39
40
|
end
|
40
41
|
|
@@ -47,6 +48,7 @@ module Openapi3Parser
|
|
47
48
|
# @return [Boolean]
|
48
49
|
def ==(other)
|
49
50
|
return false unless other.instance_of?(self.class)
|
51
|
+
|
50
52
|
message == other.message &&
|
51
53
|
context == other.context &&
|
52
54
|
factory_class == other.factory_class
|
@@ -6,7 +6,7 @@ module Openapi3Parser
|
|
6
6
|
# defined for a Components node.
|
7
7
|
# As defined: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.1.md#components-object
|
8
8
|
class ComponentKeys
|
9
|
-
REGEX = /\A[a-zA-Z0-9\.\-_]+\Z
|
9
|
+
REGEX = /\A[a-zA-Z0-9\.\-_]+\Z/.freeze
|
10
10
|
|
11
11
|
def self.call(input)
|
12
12
|
invalid = input.keys.reject { |key| REGEX.match(key) }
|
@@ -21,6 +21,7 @@ module Openapi3Parser
|
|
21
21
|
|
22
22
|
def build_errors
|
23
23
|
return "Expected a string" unless given_reference.is_a?(String)
|
24
|
+
|
24
25
|
begin
|
25
26
|
uri = URI.parse(given_reference)
|
26
27
|
rescue URI::Error
|
@@ -31,6 +32,7 @@ module Openapi3Parser
|
|
31
32
|
|
32
33
|
def check_fragment(uri)
|
33
34
|
return if uri.fragment.nil? || uri.fragment.empty?
|
35
|
+
|
34
36
|
first_char = uri.fragment[0]
|
35
37
|
|
36
38
|
"Invalid JSON pointer, expected a root slash" if first_char != "/"
|
@@ -8,8 +8,8 @@ module Openapi3Parser
|
|
8
8
|
using ArraySentence
|
9
9
|
private_class_method :new
|
10
10
|
|
11
|
-
def self.call(*args)
|
12
|
-
new.call(*args)
|
11
|
+
def self.call(*args, **kwargs)
|
12
|
+
new.call(*args, **kwargs)
|
13
13
|
end
|
14
14
|
|
15
15
|
def call(validatable,
|
@@ -38,6 +38,7 @@ module Openapi3Parser
|
|
38
38
|
def unexpected_fields(input, allowed_fields, allow_extensions)
|
39
39
|
extra_keys = input.keys - allowed_fields
|
40
40
|
return extra_keys unless allow_extensions
|
41
|
+
|
41
42
|
extra_keys.reject { |key| key =~ NodeFactory::EXTENSION_REGEX }
|
42
43
|
end
|
43
44
|
end
|
data/openapi3_parser.gemspec
CHANGED
@@ -27,11 +27,13 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.required_ruby_version = ">= 2.4.0"
|
28
28
|
|
29
29
|
spec.add_dependency "commonmarker", "~> 0.17"
|
30
|
-
|
31
|
-
|
32
|
-
spec.add_development_dependency "
|
33
|
-
spec.add_development_dependency "
|
34
|
-
spec.add_development_dependency "
|
35
|
-
spec.add_development_dependency "
|
36
|
-
spec.add_development_dependency "
|
30
|
+
spec.add_dependency "psych", "~> 3.1"
|
31
|
+
|
32
|
+
spec.add_development_dependency "bundler"
|
33
|
+
spec.add_development_dependency "byebug", "~> 11.0"
|
34
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
35
|
+
spec.add_development_dependency "rspec", "~> 3.9"
|
36
|
+
spec.add_development_dependency "rubocop", "~> 0.79.0"
|
37
|
+
spec.add_development_dependency "simplecov", "~> 0.17"
|
38
|
+
spec.add_development_dependency "webmock", "~> 3.8"
|
37
39
|
end
|
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.8.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:
|
11
|
+
date: 2020-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commonmarker
|
@@ -25,89 +25,117 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.17'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: psych
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1
|
34
|
-
type: :
|
33
|
+
version: '3.1'
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1
|
40
|
+
version: '3.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: byebug
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
61
|
+
version: '11.0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
68
|
+
version: '11.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '13.0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '13.0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rspec
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '3.
|
89
|
+
version: '3.9'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '3.
|
96
|
+
version: '3.9'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rubocop
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
103
|
+
version: 0.79.0
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
110
|
+
version: 0.79.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.17'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.17'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: webmock
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
100
128
|
requirements:
|
101
129
|
- - "~>"
|
102
130
|
- !ruby/object:Gem::Version
|
103
|
-
version: '3.
|
131
|
+
version: '3.8'
|
104
132
|
type: :development
|
105
133
|
prerelease: false
|
106
134
|
version_requirements: !ruby/object:Gem::Requirement
|
107
135
|
requirements:
|
108
136
|
- - "~>"
|
109
137
|
- !ruby/object:Gem::Version
|
110
|
-
version: '3.
|
138
|
+
version: '3.8'
|
111
139
|
description: |2
|
112
140
|
A tool to parse and validate OpenAPI V3 files.
|
113
141
|
Aims to provide complete compatibility with the OpenAPI specification and
|