diff --git a/lib/openapi_parser/request_operation.rb b/lib/openapi_parser/request_operation.rb index d0312b9..cfd0df9 100644 --- a/lib/openapi_parser/request_operation.rb +++ b/lib/openapi_parser/request_operation.rb @@ -5,11 +5,11 @@ class << self # @param [OpenAPIParser::Config] config # @param [OpenAPIParser::PathItemFinder] path_item_finder # @return [OpenAPIParser::RequestOperation, nil] - def create(http_method, request_path, path_item_finder, config) + def create(http_method, request_path, path_item_finder, config, servers) result = path_item_finder.operation_object(http_method, request_path) return nil unless result - self.new(http_method, result, config) + self.new(http_method, result, config, servers) end end @@ -25,18 +25,23 @@ def create(http_method, request_path, path_item_finder, config) # @return [String] # @!attribute [r] path_item # @return [OpenAPIParser::Schemas::PathItem] - attr_reader :operation_object, :path_params, :config, :http_method, :original_path, :path_item + attr_reader :operation_object, :path_params, :config, :http_method, :original_path, :path_item, :servers # @param [String] http_method # @param [OpenAPIParser::PathItemFinder::Result] result # @param [OpenAPIParser::Config] config - def initialize(http_method, result, config) + def initialize(http_method, result, config, servers) @http_method = http_method.to_s @original_path = result.original_path @operation_object = result.operation_object @path_params = result.path_params || {} @path_item = result.path_item_object @config = config + @servers = servers + end + + def validate_servers(servers) + operation_object.validate_servers(servers) end def validate_path_params(options = nil) @@ -50,6 +55,7 @@ def validate_path_params(options = nil) def validate_request_body(content_type, params, options = nil) options ||= config.request_body_options operation_object&.validate_request_body(content_type, params, options) + validate_servers(servers) end # @param [OpenAPIParser::RequestOperation::ValidatableResponseBody] response_body diff --git a/lib/openapi_parser/schemas.rb b/lib/openapi_parser/schemas.rb index 97a184a..9cf7844 100644 --- a/lib/openapi_parser/schemas.rb +++ b/lib/openapi_parser/schemas.rb @@ -15,3 +15,4 @@ require_relative 'schemas/media_type' require_relative 'schemas/schema' require_relative 'schemas/header' +require_relative 'schemas/servers' diff --git a/lib/openapi_parser/schemas/classes.rb b/lib/openapi_parser/schemas/classes.rb index eb385d9..7984f06 100644 --- a/lib/openapi_parser/schemas/classes.rb +++ b/lib/openapi_parser/schemas/classes.rb @@ -16,4 +16,5 @@ class MediaType < Base; end class Schema < Base; end class Components < Base; end class Header < Base; end + class Servers < Base; end end diff --git a/lib/openapi_parser/schemas/openapi.rb b/lib/openapi_parser/schemas/openapi.rb index b55a557..7c1be3c 100644 --- a/lib/openapi_parser/schemas/openapi.rb +++ b/lib/openapi_parser/schemas/openapi.rb @@ -29,9 +29,13 @@ def initialize(raw_schema, config, uri: nil, schema_registry: {}) # @return [Components, nil] openapi_attr_object :components, Components, reference: false + # @!attribute [r] servers + # @return [Servers, nil] + openapi_attr_list_object :servers, Servers, reference: false + # @return [OpenAPIParser::RequestOperation, nil] def request_operation(http_method, request_path) - OpenAPIParser::RequestOperation.create(http_method, request_path, @path_item_finder, @config) + OpenAPIParser::RequestOperation.create(http_method, request_path, @path_item_finder, @config, servers) end # load another schema with shared config and schema_registry diff --git a/lib/openapi_parser/schemas/operation.rb b/lib/openapi_parser/schemas/operation.rb index 96b729c..2c64ce9 100644 --- a/lib/openapi_parser/schemas/operation.rb +++ b/lib/openapi_parser/schemas/operation.rb @@ -30,5 +30,12 @@ def validate_request_body(content_type, params, options) def validate_response(response_body, response_validate_options) responses&.validate(response_body, response_validate_options) end + + def validate_servers(servers) + servers.each do |server| + #puts "server url: #{server.url}" + #puts "server description: #{server.description}" + end + end end end diff --git a/lib/openapi_parser/schemas/servers.rb b/lib/openapi_parser/schemas/servers.rb new file mode 100644 index 0000000..cf0e6c3 --- /dev/null +++ b/lib/openapi_parser/schemas/servers.rb @@ -0,0 +1,6 @@ +module OpenAPIParser::Schemas + class Servers < Base + + openapi_attr_values :url, :description + end +end