openapi_parser_firetail 1.0.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 +7 -0
  2. data/.github/workflows/ci.yaml +25 -0
  3. data/.gitignore +15 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +13 -0
  6. data/.rubocop_ignore.yml +6 -0
  7. data/.ruby-version +1 -0
  8. data/CHANGELOG.md +132 -0
  9. data/CODE_OF_CONDUCT.md +74 -0
  10. data/Gemfile +6 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +112 -0
  13. data/Rakefile +10 -0
  14. data/Steepfile +11 -0
  15. data/bin/console +14 -0
  16. data/bin/setup +8 -0
  17. data/lib/openapi_parser/concern.rb +5 -0
  18. data/lib/openapi_parser/concerns/expandable.rb +87 -0
  19. data/lib/openapi_parser/concerns/findable.rb +54 -0
  20. data/lib/openapi_parser/concerns/media_type_selectable.rb +29 -0
  21. data/lib/openapi_parser/concerns/parameter_validatable.rb +62 -0
  22. data/lib/openapi_parser/concerns/parser/core.rb +21 -0
  23. data/lib/openapi_parser/concerns/parser/hash.rb +10 -0
  24. data/lib/openapi_parser/concerns/parser/hash_body.rb +12 -0
  25. data/lib/openapi_parser/concerns/parser/list.rb +10 -0
  26. data/lib/openapi_parser/concerns/parser/object.rb +14 -0
  27. data/lib/openapi_parser/concerns/parser/value.rb +14 -0
  28. data/lib/openapi_parser/concerns/parser.rb +45 -0
  29. data/lib/openapi_parser/concerns/schema_loader/base.rb +28 -0
  30. data/lib/openapi_parser/concerns/schema_loader/creator.rb +48 -0
  31. data/lib/openapi_parser/concerns/schema_loader/hash_body_loader.rb +37 -0
  32. data/lib/openapi_parser/concerns/schema_loader/hash_objects_loader.rb +29 -0
  33. data/lib/openapi_parser/concerns/schema_loader/list_loader.rb +28 -0
  34. data/lib/openapi_parser/concerns/schema_loader/objects_loader.rb +21 -0
  35. data/lib/openapi_parser/concerns/schema_loader/values_loader.rb +10 -0
  36. data/lib/openapi_parser/concerns/schema_loader.rb +58 -0
  37. data/lib/openapi_parser/config.rb +55 -0
  38. data/lib/openapi_parser/errors.rb +281 -0
  39. data/lib/openapi_parser/parameter_validator.rb +33 -0
  40. data/lib/openapi_parser/path_item_finder.rb +161 -0
  41. data/lib/openapi_parser/reference_expander.rb +9 -0
  42. data/lib/openapi_parser/request_operation.rb +90 -0
  43. data/lib/openapi_parser/schema_validator/all_of_validator.rb +40 -0
  44. data/lib/openapi_parser/schema_validator/any_of_validator.rb +18 -0
  45. data/lib/openapi_parser/schema_validator/array_validator.rb +32 -0
  46. data/lib/openapi_parser/schema_validator/base.rb +39 -0
  47. data/lib/openapi_parser/schema_validator/boolean_validator.rb +29 -0
  48. data/lib/openapi_parser/schema_validator/enumable.rb +13 -0
  49. data/lib/openapi_parser/schema_validator/float_validator.rb +34 -0
  50. data/lib/openapi_parser/schema_validator/integer_validator.rb +32 -0
  51. data/lib/openapi_parser/schema_validator/minimum_maximum.rb +38 -0
  52. data/lib/openapi_parser/schema_validator/nil_validator.rb +11 -0
  53. data/lib/openapi_parser/schema_validator/object_validator.rb +56 -0
  54. data/lib/openapi_parser/schema_validator/one_of_validator.rb +22 -0
  55. data/lib/openapi_parser/schema_validator/options.rb +29 -0
  56. data/lib/openapi_parser/schema_validator/string_validator.rb +108 -0
  57. data/lib/openapi_parser/schema_validator/unspecified_type_validator.rb +8 -0
  58. data/lib/openapi_parser/schema_validator.rb +164 -0
  59. data/lib/openapi_parser/schemas/base.rb +28 -0
  60. data/lib/openapi_parser/schemas/classes.rb +22 -0
  61. data/lib/openapi_parser/schemas/components.rb +32 -0
  62. data/lib/openapi_parser/schemas/discriminator.rb +11 -0
  63. data/lib/openapi_parser/schemas/header.rb +18 -0
  64. data/lib/openapi_parser/schemas/info.rb +6 -0
  65. data/lib/openapi_parser/schemas/media_type.rb +18 -0
  66. data/lib/openapi_parser/schemas/openapi.rb +63 -0
  67. data/lib/openapi_parser/schemas/operation.rb +50 -0
  68. data/lib/openapi_parser/schemas/parameter.rb +20 -0
  69. data/lib/openapi_parser/schemas/path_item.rb +22 -0
  70. data/lib/openapi_parser/schemas/paths.rb +7 -0
  71. data/lib/openapi_parser/schemas/reference.rb +7 -0
  72. data/lib/openapi_parser/schemas/request_body.rb +34 -0
  73. data/lib/openapi_parser/schemas/response.rb +54 -0
  74. data/lib/openapi_parser/schemas/responses.rb +56 -0
  75. data/lib/openapi_parser/schemas/schema.rb +117 -0
  76. data/lib/openapi_parser/schemas/security.rb +7 -0
  77. data/lib/openapi_parser/schemas/security_schemes.rb +20 -0
  78. data/lib/openapi_parser/schemas.rb +20 -0
  79. data/lib/openapi_parser/version.rb +3 -0
  80. data/lib/openapi_parser.rb +108 -0
  81. data/openapi_parser.gemspec +43 -0
  82. data/sig/openapi_parser/config.rbs +19 -0
  83. data/sig/openapi_parser/errors.rbs +22 -0
  84. data/sig/openapi_parser/reference_expander.rbs +3 -0
  85. data/sig/openapi_parser/schema_validator.rbs +46 -0
  86. data/sig/openapi_parser/schema_validators/base.rbs +18 -0
  87. data/sig/openapi_parser/schema_validators/options.rbs +17 -0
  88. data/sig/openapi_parser/schemas/base.rbs +17 -0
  89. data/sig/openapi_parser/version.rbs +3 -0
  90. data/sig/openapi_parser.rbs +19 -0
  91. data/sig/types.rbs +13 -0
  92. data/sig/wip_types.rbs +64 -0
  93. metadata +288 -0
@@ -0,0 +1,62 @@
1
+ module OpenAPIParser::ParameterValidatable
2
+ # @param [Hash] path_params path parameters
3
+ # @param [OpenAPIParser::SchemaValidator::Options] options request validator options
4
+ def validate_path_params(path_params, options)
5
+ OpenAPIParser::ParameterValidator.validate_parameter(path_parameter_hash, path_params, object_reference, options)
6
+ end
7
+
8
+ # @param [Hash] params parameter hash
9
+ # @param [Hash] headers headers hash
10
+ # @param [OpenAPIParser::SchemaValidator::Options] options request validator options
11
+ def validate_request_parameter(params, headers, options)
12
+ validate_header_parameter(headers, object_reference, options) if options.validate_header
13
+ validate_query_parameter(params, object_reference, options)
14
+ end
15
+
16
+ # @param [PathItem] path_item parent
17
+ def set_parent_path_item(path_item)
18
+ @merged_parameter = (parameters || []) + (path_item.parameters || [])
19
+ nil
20
+ end
21
+
22
+ private
23
+
24
+ # @param [Hash] params query parameter hash
25
+ # @param [String] object_reference
26
+ # @param [OpenAPIParser::SchemaValidator::Options] options request validator options
27
+ def validate_query_parameter(params, object_reference, options)
28
+ OpenAPIParser::ParameterValidator.validate_parameter(query_parameter_hash, params, object_reference, options)
29
+ end
30
+
31
+ # @param [Hash] headers header hash
32
+ # @param [String] object_reference
33
+ # @param [OpenAPIParser::SchemaValidator::Options] options request validator options
34
+ def validate_header_parameter(headers, object_reference, options)
35
+ OpenAPIParser::ParameterValidator.validate_parameter(header_parameter_hash, headers, object_reference, options, true)
36
+ end
37
+
38
+ def header_parameter_hash
39
+ divided_parameter_hash['header'] || []
40
+ end
41
+
42
+ def path_parameter_hash
43
+ divided_parameter_hash['path'] || []
44
+ end
45
+
46
+ def query_parameter_hash
47
+ divided_parameter_hash['query'] || []
48
+ end
49
+
50
+ # @return [Hash{String => Hash{String => Parameter}}] hash[in][name] => Parameter
51
+ def divided_parameter_hash
52
+ @divided_parameter_hash ||=
53
+ (@merged_parameter || []).
54
+ group_by(&:in).
55
+ map { |in_type, params| # rubocop:disable Style/BlockDelimiters
56
+ [
57
+ in_type,
58
+ params.map { |param| [param.name, param] }.to_h,
59
+ ]
60
+ }.to_h
61
+ end
62
+ end
@@ -0,0 +1,21 @@
1
+ require_relative './value'
2
+ require_relative './object'
3
+ require_relative './list'
4
+ require_relative './hash'
5
+ require_relative './hash_body'
6
+
7
+ class OpenAPIParser::Parser::Core
8
+ include OpenAPIParser::Parser::Value
9
+ include OpenAPIParser::Parser::Object
10
+ include OpenAPIParser::Parser::List
11
+ include OpenAPIParser::Parser::Hash
12
+ include OpenAPIParser::Parser::HashBody
13
+
14
+ def initialize(target_klass)
15
+ @target_klass = target_klass
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :target_klass
21
+ end
@@ -0,0 +1,10 @@
1
+ module OpenAPIParser::Parser::Hash
2
+ def _openapi_attr_hash_objects
3
+ @_openapi_attr_hash_objects ||= {}
4
+ end
5
+
6
+ def openapi_attr_hash_object(name, klass, options = {})
7
+ target_klass.send(:attr_reader, name)
8
+ _openapi_attr_hash_objects[name] = ::OpenAPIParser::SchemaLoader::HashObjectsLoader.new(name, options.merge(klass: klass))
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ module OpenAPIParser::Parser::HashBody
2
+ def _openapi_attr_hash_body_objects
3
+ @_openapi_attr_hash_body_objects ||= {}
4
+ end
5
+
6
+ def openapi_attr_hash_body_objects(name, klass, options = {})
7
+ # options[:reject_keys] = options[:reject_keys] ? options[:reject_keys].map(&:to_s) : []
8
+
9
+ target_klass.send(:attr_reader, name)
10
+ _openapi_attr_hash_body_objects[name] = ::OpenAPIParser::SchemaLoader::HashBodyLoader.new(name, options.merge(klass: klass))
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module OpenAPIParser::Parser::List
2
+ def _openapi_attr_list_objects
3
+ @_openapi_attr_list_objects ||= {}
4
+ end
5
+
6
+ def openapi_attr_list_object(name, klass, options = {})
7
+ target_klass.send(:attr_reader, name)
8
+ _openapi_attr_list_objects[name] = OpenAPIParser::SchemaLoader::ListLoader.new(name, options.merge(klass: klass))
9
+ end
10
+ end
@@ -0,0 +1,14 @@
1
+ module OpenAPIParser::Parser::Object
2
+ def _openapi_attr_objects
3
+ @_openapi_attr_objects ||= {}
4
+ end
5
+
6
+ def openapi_attr_objects(*names, klass)
7
+ names.each { |name| openapi_attr_object(name, klass) }
8
+ end
9
+
10
+ def openapi_attr_object(name, klass, options = {})
11
+ target_klass.send(:attr_reader, name)
12
+ _openapi_attr_objects[name] = OpenAPIParser::SchemaLoader::ObjectsLoader.new(name, options.merge(klass: klass))
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module OpenAPIParser::Parser::Value
2
+ def _openapi_attr_values
3
+ @_openapi_attr_values ||= {}
4
+ end
5
+
6
+ def openapi_attr_values(*names)
7
+ names.each { |name| openapi_attr_value(name) }
8
+ end
9
+
10
+ def openapi_attr_value(name, options = {})
11
+ target_klass.send(:attr_reader, name)
12
+ _openapi_attr_values[name] = OpenAPIParser::SchemaLoader::ValuesLoader.new(name, options)
13
+ end
14
+ end
@@ -0,0 +1,45 @@
1
+ module OpenAPIParser::Parser
2
+ end
3
+
4
+ require 'forwardable'
5
+
6
+ require_relative './parser/core'
7
+ require_relative './schema_loader'
8
+
9
+ module OpenAPIParser::Parser
10
+ def self.included(base)
11
+ base.extend(ClassMethods)
12
+ end
13
+ module ClassMethods
14
+ extend Forwardable
15
+
16
+ def_delegators :_parser_core, :_openapi_attr_values, :openapi_attr_value, :openapi_attr_values
17
+ def_delegators :_parser_core, :_openapi_attr_objects, :openapi_attr_objects, :openapi_attr_object
18
+ def_delegators :_parser_core, :_openapi_attr_list_objects, :openapi_attr_list_object
19
+ def_delegators :_parser_core, :_openapi_attr_hash_objects, :openapi_attr_hash_object
20
+ def_delegators :_parser_core, :_openapi_attr_hash_body_objects, :openapi_attr_hash_body_objects
21
+
22
+ def _parser_core
23
+ @_parser_core ||= OpenAPIParser::Parser::Core.new(self)
24
+ end
25
+ end
26
+
27
+ # @param [OpenAPIParser::Schemas::Base] old
28
+ # @param [OpenAPIParser::Schemas::Base] new
29
+ def _update_child_object(old, new)
30
+ _openapi_all_child_objects[old.object_reference] = new
31
+ end
32
+
33
+ # @return [Hash{String => OpenAPIParser::Schemas::Base}]
34
+ def _openapi_all_child_objects
35
+ @_openapi_all_child_objects ||= {}
36
+ end
37
+
38
+ # load data by schema definition in core and set children to _openapi_all_child_objects
39
+ # @return nil
40
+ def load_data
41
+ loader = ::OpenAPIParser::SchemaLoader.new(self, self.class._parser_core)
42
+ @_openapi_all_child_objects = loader.load_data
43
+ nil
44
+ end
45
+ end
@@ -0,0 +1,28 @@
1
+ # loader base class
2
+ class OpenAPIParser::SchemaLoader::Base
3
+ # @param [String] variable_name
4
+ # @param [Hash] options
5
+ def initialize(variable_name, options)
6
+ @variable_name = variable_name
7
+ @schema_key = options[:schema_key] || variable_name
8
+ end
9
+
10
+ # @param [OpenAPIParser::Schemas::Base] _target_object
11
+ # @param [Hash] _raw_schema
12
+ # @return [Array<OpenAPIParser::Schemas::Base>, nil]
13
+ def load_data(_target_object, _raw_schema)
14
+ raise 'need implement'
15
+ end
16
+
17
+ private
18
+
19
+ attr_reader :variable_name, :schema_key
20
+
21
+ # create instance variable @variable_name using data
22
+ # @param [OpenAPIParser::Schemas::Base] target
23
+ # @param [String] variable_name
24
+ # @param [Object] data
25
+ def variable_set(target, variable_name, data)
26
+ target.instance_variable_set("@#{variable_name}", data)
27
+ end
28
+ end
@@ -0,0 +1,48 @@
1
+ # loader base class for create OpenAPI::Schemas::Base object
2
+ class OpenAPIParser::SchemaLoader::Creator < OpenAPIParser::SchemaLoader::Base
3
+ # @param [String] variable_name
4
+ # @param [Hash] options
5
+ def initialize(variable_name, options)
6
+ super(variable_name, options)
7
+
8
+ @klass = options[:klass]
9
+ @allow_reference = options[:reference] || false
10
+ @allow_data_type = options[:allow_data_type]
11
+ end
12
+
13
+ private
14
+
15
+ attr_reader :klass, :allow_reference, :allow_data_type
16
+
17
+ def build_object_reference_from_base(base, names)
18
+ names = [names] unless names.kind_of?(Array)
19
+ ref = names.map { |n| escape_reference(n) }.join('/')
20
+
21
+ "#{base}/#{ref}"
22
+ end
23
+
24
+ # @return Boolean
25
+ def check_reference_schema?(check_schema)
26
+ check_object_schema?(check_schema) && !check_schema['$ref'].nil?
27
+ end
28
+
29
+ def check_object_schema?(check_schema)
30
+ check_schema.kind_of?(::Hash)
31
+ end
32
+
33
+ def escape_reference(str)
34
+ str.to_s.gsub('/', '~1')
35
+ end
36
+
37
+ def build_openapi_object_from_option(target_object, ref, schema)
38
+ return nil if schema.nil?
39
+
40
+ if @allow_data_type && !check_object_schema?(schema)
41
+ schema
42
+ elsif @allow_reference && check_reference_schema?(schema)
43
+ OpenAPIParser::Schemas::Reference.new(ref, target_object, target_object.root, schema)
44
+ else
45
+ @klass.new(ref, target_object, target_object.root, schema)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,37 @@
1
+ # hash body object loader
2
+ class OpenAPIParser::SchemaLoader::HashBodyLoader < OpenAPIParser::SchemaLoader::Creator
3
+ # @param [String] variable_name
4
+ # @param [Hash] options
5
+ def initialize(variable_name, options)
6
+ super(variable_name, options)
7
+
8
+ @reject_keys = options[:reject_keys] ? options[:reject_keys].map(&:to_s) : []
9
+ end
10
+
11
+ # @param [OpenAPIParser::Schemas::Base] target_object
12
+ # @param [Hash] raw_schema
13
+ # @return [Array<OpenAPIParser::Schemas::Base>, nil]
14
+ def load_data(target_object, raw_schema)
15
+ # raw schema always exist because if not exist' this object don't create
16
+ create_hash_body_objects(target_object, raw_schema)
17
+ end
18
+
19
+ private
20
+
21
+ # for responses and paths object
22
+ def create_hash_body_objects(target_object, raw_schema)
23
+ object_list = raw_schema.reject { |k, _| reject_keys.include?(k) }.map do |child_name, child_schema|
24
+ ref = build_object_reference_from_base(target_object.object_reference, escape_reference(child_name))
25
+ [
26
+ child_name.to_s, # support string key only in OpenAPI3
27
+ build_openapi_object_from_option(target_object, ref, child_schema),
28
+ ]
29
+ end
30
+
31
+ objects = object_list.to_h
32
+ variable_set(target_object, variable_name, objects)
33
+ objects.values
34
+ end
35
+
36
+ attr_reader :reject_keys
37
+ end
@@ -0,0 +1,29 @@
1
+ # hash object loader
2
+ class OpenAPIParser::SchemaLoader::HashObjectsLoader < OpenAPIParser::SchemaLoader::Creator
3
+ # @param [OpenAPIParser::Schemas::Base] target_object
4
+ # @param [Hash] raw_schema
5
+ # @return [Array<OpenAPIParser::Schemas::Base>, nil]
6
+ def load_data(target_object, raw_schema)
7
+ create_attr_hash_object(target_object, raw_schema[ref_name_base.to_s])
8
+ end
9
+
10
+ private
11
+
12
+ def create_attr_hash_object(target_object, hash_schema)
13
+ unless hash_schema
14
+ variable_set(target_object, variable_name, nil)
15
+ return
16
+ end
17
+
18
+ data_list = hash_schema.map do |key, s|
19
+ ref = build_object_reference_from_base(target_object.object_reference, [ref_name_base, key])
20
+ [key, build_openapi_object_from_option(target_object, ref, s)]
21
+ end
22
+
23
+ data = data_list.to_h
24
+ variable_set(target_object, variable_name, data)
25
+ data.values
26
+ end
27
+
28
+ alias_method :ref_name_base, :schema_key
29
+ end
@@ -0,0 +1,28 @@
1
+ # list object loader
2
+ class OpenAPIParser::SchemaLoader::ListLoader < OpenAPIParser::SchemaLoader::Creator
3
+ # @param [OpenAPIParser::Schemas::Base] target_object
4
+ # @param [Hash] raw_schema
5
+ # @return [Array<OpenAPIParser::Schemas::Base>, nil]
6
+ def load_data(target_object, raw_schema)
7
+ create_attr_list_object(target_object, raw_schema[ref_name_base.to_s])
8
+ end
9
+
10
+ private
11
+
12
+ def create_attr_list_object(target_object, array_schema)
13
+ unless array_schema
14
+ variable_set(target_object, variable_name, nil)
15
+ return
16
+ end
17
+
18
+ data = array_schema.map.with_index do |s, idx|
19
+ ref = build_object_reference_from_base(target_object.object_reference, [ref_name_base, idx])
20
+ build_openapi_object_from_option(target_object, ref, s)
21
+ end
22
+
23
+ variable_set(target_object, variable_name, data)
24
+ data
25
+ end
26
+
27
+ alias_method :ref_name_base, :schema_key
28
+ end
@@ -0,0 +1,21 @@
1
+ # Specific Object loader (defined by klass option)
2
+ class OpenAPIParser::SchemaLoader::ObjectsLoader < OpenAPIParser::SchemaLoader::Creator
3
+ # @param [OpenAPIParser::Schemas::Base] target_object
4
+ # @param [Hash] raw_schema
5
+ # @return [Array<OpenAPIParser::Schemas::Base>, nil]
6
+ def load_data(target_object, raw_schema)
7
+ obj = create_attr_object(target_object, raw_schema[schema_key.to_s])
8
+ [obj]
9
+ end
10
+
11
+ private
12
+
13
+ # @return [OpenAPIParser::Schemas::Base]
14
+ def create_attr_object(target_object, schema)
15
+ ref = build_object_reference_from_base(target_object.object_reference, schema_key)
16
+
17
+ data = build_openapi_object_from_option(target_object, ref, schema)
18
+ variable_set(target_object, variable_name, data)
19
+ data
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ # data type values loader
2
+ class OpenAPIParser::SchemaLoader::ValuesLoader < OpenAPIParser::SchemaLoader::Base
3
+ # @param [OpenAPIParser::Schemas::Base] target_object
4
+ # @param [Hash] raw_schema
5
+ # @return [Array<OpenAPIParser::Schemas::Base>, nil]
6
+ def load_data(target_object, raw_schema)
7
+ variable_set(target_object, variable_name, raw_schema[schema_key.to_s])
8
+ nil # this loader not return schema object
9
+ end
10
+ end
@@ -0,0 +1,58 @@
1
+ class OpenAPIParser::SchemaLoader
2
+ end
3
+
4
+ require_relative './schema_loader/base'
5
+ require_relative './schema_loader/creator'
6
+ require_relative './schema_loader/values_loader'
7
+ require_relative './schema_loader/list_loader'
8
+ require_relative './schema_loader/objects_loader'
9
+ require_relative './schema_loader/hash_objects_loader'
10
+ require_relative './schema_loader/hash_body_loader'
11
+
12
+ # load data to target_object by schema definition in core
13
+ class OpenAPIParser::SchemaLoader
14
+ # @param [OpenAPIParser::Schemas::Base] target_object
15
+ # @param [OpenAPIParser::Parser::Core] core
16
+ def initialize(target_object, core)
17
+ @target_object = target_object
18
+ @core = core
19
+ @children = {}
20
+ end
21
+
22
+ # @!attribute [r] children
23
+ # @return [Array<OpenAPIParser::Schemas::Base>]
24
+ attr_reader :children
25
+
26
+ # execute load data
27
+ # return data is equal to :children
28
+ # @return [Array<OpenAPIParser::Schemas::Base>]
29
+ def load_data
30
+ all_loader.each { |l| load_data_by_schema_loader(l) }
31
+ children
32
+ end
33
+
34
+ private
35
+
36
+ attr_reader :core, :target_object
37
+
38
+ # @param [OpenAPIParser::SchemaLoader::Base] schema_loader
39
+ def load_data_by_schema_loader(schema_loader)
40
+ children = schema_loader.load_data(target_object, target_object.raw_schema)
41
+
42
+ children.each { |c| register_child(c) } if children
43
+ end
44
+
45
+ def register_child(object)
46
+ return unless object.kind_of?(OpenAPIParser::Parser)
47
+
48
+ @children[object.object_reference] = object
49
+ end
50
+
51
+ def all_loader
52
+ core._openapi_attr_values.values +
53
+ core._openapi_attr_objects.values +
54
+ core._openapi_attr_list_objects.values +
55
+ core._openapi_attr_hash_objects.values +
56
+ core._openapi_attr_hash_body_objects.values
57
+ end
58
+ end
@@ -0,0 +1,55 @@
1
+ class OpenAPIParser::Config
2
+ def initialize(config)
3
+ # TODO: This deprecation warning can be removed after we set the default to `true`
4
+ # in a later (major?) version update.
5
+ unless config.key?(:strict_reference_validation)
6
+ msg = "[DEPRECATION] strict_reference_validation config is not set. It defaults to `false` now, " +
7
+ "but will be `true` in a future version. Please explicitly set to `false` " +
8
+ "if you want to skip reference validation on schema load."
9
+ warn(msg)
10
+ end
11
+ @config = config
12
+ end
13
+
14
+ def datetime_coerce_class
15
+ @config[:datetime_coerce_class]
16
+ end
17
+
18
+ def coerce_value
19
+ @config[:coerce_value]
20
+ end
21
+
22
+ def expand_reference
23
+ @config.fetch(:expand_reference, true)
24
+ end
25
+
26
+ def strict_response_validation
27
+ # TODO: in a major version update, change this to default to `true`.
28
+ # https://github.com/ota42y/openapi_parser/pull/123/files#r767142217
29
+ @config.fetch(:strict_response_validation, false)
30
+ end
31
+
32
+ def strict_reference_validation
33
+ @config.fetch(:strict_reference_validation, false)
34
+ end
35
+
36
+ def validate_header
37
+ @config.fetch(:validate_header, true)
38
+ end
39
+
40
+ # @return [OpenAPIParser::SchemaValidator::Options]
41
+ def request_validator_options
42
+ @request_validator_options ||= OpenAPIParser::SchemaValidator::Options.new(coerce_value: coerce_value,
43
+ datetime_coerce_class: datetime_coerce_class,
44
+ validate_header: validate_header)
45
+ end
46
+
47
+ alias_method :request_body_options, :request_validator_options
48
+ alias_method :path_params_options, :request_validator_options
49
+
50
+ # @return [OpenAPIParser::SchemaValidator::ResponseValidateOptions]
51
+ def response_validate_options
52
+ @response_validate_options ||= OpenAPIParser::SchemaValidator::ResponseValidateOptions.
53
+ new(strict: strict_response_validation, validate_header: validate_header)
54
+ end
55
+ end