openapi3_parser 0.6.1 → 0.9.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 (71) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +23 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +18 -3
  5. data/.ruby-version +1 -1
  6. data/CHANGELOG.md +41 -0
  7. data/README.md +7 -4
  8. data/TODO.md +1 -1
  9. data/lib/openapi3_parser.rb +2 -3
  10. data/lib/openapi3_parser/array_sentence.rb +2 -1
  11. data/lib/openapi3_parser/document.rb +3 -2
  12. data/lib/openapi3_parser/error.rb +11 -1
  13. data/lib/openapi3_parser/node/array.rb +9 -1
  14. data/lib/openapi3_parser/node/context.rb +34 -4
  15. data/lib/openapi3_parser/node/map.rb +17 -1
  16. data/lib/openapi3_parser/node/object.rb +17 -0
  17. data/lib/openapi3_parser/node/operation.rb +8 -0
  18. data/lib/openapi3_parser/node/path_item.rb +8 -0
  19. data/lib/openapi3_parser/node/placeholder.rb +16 -12
  20. data/lib/openapi3_parser/node/schema.rb +50 -3
  21. data/lib/openapi3_parser/node_factory.rb +1 -1
  22. data/lib/openapi3_parser/node_factory/array.rb +34 -26
  23. data/lib/openapi3_parser/node_factory/context.rb +9 -2
  24. data/lib/openapi3_parser/node_factory/discriminator.rb +2 -0
  25. data/lib/openapi3_parser/node_factory/field.rb +2 -0
  26. data/lib/openapi3_parser/node_factory/fields/reference.rb +1 -0
  27. data/lib/openapi3_parser/node_factory/map.rb +12 -10
  28. data/lib/openapi3_parser/node_factory/media_type.rb +1 -0
  29. data/lib/openapi3_parser/node_factory/object.rb +4 -1
  30. data/lib/openapi3_parser/node_factory/object_factory/dsl.rb +7 -5
  31. data/lib/openapi3_parser/node_factory/object_factory/field_config.rb +9 -7
  32. data/lib/openapi3_parser/node_factory/object_factory/node_builder.rb +12 -13
  33. data/lib/openapi3_parser/node_factory/object_factory/validator.rb +25 -21
  34. data/lib/openapi3_parser/node_factory/openapi.rb +2 -0
  35. data/lib/openapi3_parser/node_factory/operation.rb +9 -0
  36. data/lib/openapi3_parser/node_factory/parameter.rb +2 -0
  37. data/lib/openapi3_parser/node_factory/parameter_like.rb +2 -1
  38. data/lib/openapi3_parser/node_factory/path_item.rb +27 -5
  39. data/lib/openapi3_parser/node_factory/paths.rb +1 -1
  40. data/lib/openapi3_parser/node_factory/reference.rb +9 -1
  41. data/lib/openapi3_parser/node_factory/request_body.rb +2 -4
  42. data/lib/openapi3_parser/node_factory/response.rb +1 -0
  43. data/lib/openapi3_parser/node_factory/responses.rb +1 -1
  44. data/lib/openapi3_parser/node_factory/schema.rb +5 -2
  45. data/lib/openapi3_parser/node_factory/server_variable.rb +1 -0
  46. data/lib/openapi3_parser/node_factory/type_checker.rb +6 -0
  47. data/lib/openapi3_parser/source.rb +2 -0
  48. data/lib/openapi3_parser/source/location.rb +6 -0
  49. data/lib/openapi3_parser/source/pointer.rb +9 -4
  50. data/lib/openapi3_parser/source_input.rb +9 -9
  51. data/lib/openapi3_parser/source_input/file.rb +3 -1
  52. data/lib/openapi3_parser/source_input/raw.rb +4 -1
  53. data/lib/openapi3_parser/source_input/resolve_next.rb +1 -0
  54. data/lib/openapi3_parser/source_input/string_parser.rb +3 -2
  55. data/lib/openapi3_parser/source_input/url.rb +3 -1
  56. data/lib/openapi3_parser/validation/error.rb +2 -0
  57. data/lib/openapi3_parser/validation/error_collection.rb +1 -1
  58. data/lib/openapi3_parser/validation/input_validator.rb +1 -1
  59. data/lib/openapi3_parser/validators/component_keys.rb +1 -1
  60. data/lib/openapi3_parser/validators/duplicate_parameters.rb +1 -0
  61. data/lib/openapi3_parser/validators/email.rb +3 -3
  62. data/lib/openapi3_parser/validators/media_type.rb +1 -1
  63. data/lib/openapi3_parser/validators/mutually_exclusive_fields.rb +8 -8
  64. data/lib/openapi3_parser/validators/reference.rb +2 -0
  65. data/lib/openapi3_parser/validators/required_fields.rb +2 -2
  66. data/lib/openapi3_parser/validators/unexpected_fields.rb +3 -2
  67. data/lib/openapi3_parser/validators/url.rb +2 -7
  68. data/lib/openapi3_parser/version.rb +1 -1
  69. data/openapi3_parser.gemspec +12 -8
  70. metadata +81 -25
  71. data/.travis.yml +0 -11
@@ -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,
@@ -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
@@ -4,14 +4,9 @@ module Openapi3Parser
4
4
  module Validators
5
5
  class Url
6
6
  def self.call(input)
7
- message = %("#{input}" is not a valid URL)
8
- uri = URI.parse(input)
9
-
10
- message if !uri.relative? &&
11
- !uri.is_a?(URI::HTTP) &&
12
- !uri.is_a?(URI::HTTPS)
7
+ URI.parse(input) && nil
13
8
  rescue URI::InvalidURIError
14
- message
9
+ %("#{input}" is not a valid URL)
15
10
  end
16
11
  end
17
12
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Openapi3Parser
4
- VERSION = "0.6.1"
4
+ VERSION = "0.9.0"
5
5
  end
@@ -24,14 +24,18 @@ Gem::Specification.new do |spec|
24
24
  f.match(%r{^spec/})
25
25
  end
26
26
 
27
- spec.required_ruby_version = ">= 2.4.0"
27
+ spec.required_ruby_version = ">= 2.5.0"
28
28
 
29
29
  spec.add_dependency "commonmarker", "~> 0.17"
30
-
31
- spec.add_development_dependency "bundler", "~> 1.15"
32
- spec.add_development_dependency "byebug", "~> 10.0"
33
- spec.add_development_dependency "rake", "~> 10.0"
34
- spec.add_development_dependency "rspec", "~> 3.6"
35
- spec.add_development_dependency "rubocop", "~> 0.53.0"
36
- spec.add_development_dependency "webmock", "~> 3.1"
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"
35
+ spec.add_development_dependency "rspec", "~> 3.9"
36
+ spec.add_development_dependency "rubocop", "~> 1"
37
+ spec.add_development_dependency "rubocop-rake", "~> 0.5"
38
+ spec.add_development_dependency "rubocop-rspec", "~> 2"
39
+ spec.add_development_dependency "simplecov", "~> 0.19"
40
+ spec.add_development_dependency "webmock", "~> 3.8"
37
41
  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.6.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Dew
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-09 00:00:00.000000000 Z
11
+ date: 2021-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commonmarker
@@ -25,89 +25,145 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.17'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: psych
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.15'
34
- type: :development
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.15'
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: '10.0'
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: '10.0'
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: '10.0'
75
+ version: '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: '10.0'
82
+ version: '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.6'
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.6'
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.53.0
103
+ version: '1'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.5'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.5'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '2'
90
132
  type: :development
91
133
  prerelease: false
92
134
  version_requirements: !ruby/object:Gem::Requirement
93
135
  requirements:
94
136
  - - "~>"
95
137
  - !ruby/object:Gem::Version
96
- version: 0.53.0
138
+ version: '2'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.19'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.19'
97
153
  - !ruby/object:Gem::Dependency
98
154
  name: webmock
99
155
  requirement: !ruby/object:Gem::Requirement
100
156
  requirements:
101
157
  - - "~>"
102
158
  - !ruby/object:Gem::Version
103
- version: '3.1'
159
+ version: '3.8'
104
160
  type: :development
105
161
  prerelease: false
106
162
  version_requirements: !ruby/object:Gem::Requirement
107
163
  requirements:
108
164
  - - "~>"
109
165
  - !ruby/object:Gem::Version
110
- version: '3.1'
166
+ version: '3.8'
111
167
  description: |2
112
168
  A tool to parse and validate OpenAPI V3 files.
113
169
  Aims to provide complete compatibility with the OpenAPI specification and
@@ -117,11 +173,11 @@ executables: []
117
173
  extensions: []
118
174
  extra_rdoc_files: []
119
175
  files:
176
+ - ".github/workflows/ci.yml"
120
177
  - ".gitignore"
121
178
  - ".rspec"
122
179
  - ".rubocop.yml"
123
180
  - ".ruby-version"
124
- - ".travis.yml"
125
181
  - CHANGELOG.md
126
182
  - Gemfile
127
183
  - LICENCE
@@ -245,7 +301,7 @@ homepage: https://github.com/kevindew/openapi_parser
245
301
  licenses:
246
302
  - MIT
247
303
  metadata: {}
248
- post_install_message:
304
+ post_install_message:
249
305
  rdoc_options: []
250
306
  require_paths:
251
307
  - lib
@@ -253,16 +309,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
253
309
  requirements:
254
310
  - - ">="
255
311
  - !ruby/object:Gem::Version
256
- version: 2.4.0
312
+ version: 2.5.0
257
313
  required_rubygems_version: !ruby/object:Gem::Requirement
258
314
  requirements:
259
315
  - - ">="
260
316
  - !ruby/object:Gem::Version
261
317
  version: '0'
262
318
  requirements: []
263
- rubyforge_project:
264
- rubygems_version: 2.6.14.4
265
- signing_key:
319
+ rubyforge_project:
320
+ rubygems_version: 2.7.6.2
321
+ signing_key:
266
322
  specification_version: 4
267
323
  summary: An OpenAPI V3 parser for Ruby
268
324
  test_files: []
data/.travis.yml DELETED
@@ -1,11 +0,0 @@
1
- language: ruby
2
- sudo: false
3
- rvm:
4
- - 2.4.6
5
- - 2.5.5
6
- - 2.6.4
7
- - ruby-head
8
- matrix:
9
- allow_failures:
10
- - rvm: ruby-head
11
- fast_finish: true