module Scorpio::OpenAPI::Operation
An OpenAPI
operation
Scorpio::OpenAPI::Operation
is a module common to V2
and V3
operations.
Public Instance Methods
@param a, b are passed to Scorpio::Request#initialize @return [Scorpio::Request]
# File lib/scorpio/openapi/operation.rb, line 154 def build_request(*a, &b) Scorpio::Request.new(self, *a, &b) end
@return the HTTP method of this operation as indicated by the attribute name
for this operation from the parent PathItem
# File lib/scorpio/openapi/operation.rb, line 88 def http_method return @http_method if instance_variable_defined?(:@http_method) raise(Bug) unless parent_jsi.is_a?(Scorpio::OpenAPI::V2::PathItem) || parent_jsi.is_a?(Scorpio::OpenAPI::V3::PathItem) @http_method = jsi_ptr.reference_tokens.last end
@return [String] a short identifier for this operation appropriate for an error message
# File lib/scorpio/openapi/operation.rb, line 95 def human_id operationId || "path: #{path_template_str}, method: #{http_method}" end
this method is not intended to be API-stable at the moment.
@return [#to_ary<#to_h>] the parameters specified for this operation, plus any others
scorpio considers to be parameters
# File lib/scorpio/openapi/operation.rb, line 113 def inferred_parameters parameters = self.parameters ? self.parameters.to_a.dup : [] path_template.variables.each do |var| unless parameters.any? { |p| p['in'] == 'path' && p['name'] == var } # we could instantiate this as a V2::Parameter or a V3::Parameter # or a ParameterWithContentInPath or whatever. but I can't be bothered. parameters << { 'name' => var, 'in' => 'path', 'required' => true, 'type' => 'string', } end end parameters end
@return [Scorpio::OpenAPI::V3::Response, Scorpio::OpenAPI::V2::Response]
# File lib/scorpio/openapi/operation.rb, line 100 def oa_response(status: ) status = status.to_s if status.is_a?(Numeric) if self.responses _, oa_response = self.responses.detect { |k, v| k.to_s == status } oa_response ||= self.responses['default'] end oa_response end
@return [Scorpio::OpenAPI::Document] the document whence this operation came
# File lib/scorpio/openapi/operation.rb, line 57 def openapi_document parent_jsis.detect { |p| p.is_a?(Scorpio::OpenAPI::Document) } end
@return [Addressable::Template] the path as an Addressable::Template
# File lib/scorpio/openapi/operation.rb, line 69 def path_template return @path_template if instance_variable_defined?(:@path_template) @path_template = Addressable::Template.new(path_template_str) end
# File lib/scorpio/openapi/operation.rb, line 61 def path_template_str return @path_template_str if instance_variable_defined?(:@path_template_str) raise(Bug) unless parent_jsi.is_a?(Scorpio::OpenAPI::V2::PathItem) || parent_jsi.is_a?(Scorpio::OpenAPI::V3::PathItem) raise(Bug) unless parent_jsi.parent_jsi.is_a?(Scorpio::OpenAPI::V2::Paths) || parent_jsi.parent_jsi.is_a?(Scorpio::OpenAPI::V3::Paths) @path_template_str = parent_jsi.jsi_ptr.reference_tokens.last end
@return [Module] a module with accessor methods for unambiguously named parameters of this operation.
# File lib/scorpio/openapi/operation.rb, line 131 def request_accessor_module return @request_accessor_module if instance_variable_defined?(:@request_accessor_module) @request_accessor_module = begin params_by_name = inferred_parameters.group_by { |p| p['name'] } Module.new do instance_method_modules = [Request, Request::Configurables] instance_method_names = instance_method_modules.map do |mod| (mod.instance_methods + mod.private_instance_methods).map(&:to_s) end.inject(Set.new, &:|) params_by_name.each do |name, params| next if instance_method_names.include?(name) if params.size == 1 param = params.first define_method("#{name}=") { |value| set_param_from(param['in'], param['name'], value) } define_method(name) { get_param_from(param['in'], param['name']) } end end end end end
@param a, b are passed to Scorpio::Request#initialize @return response body object
# File lib/scorpio/openapi/operation.rb, line 166 def run(*a, &b) build_request(*a, &b).run end
@param a, b are passed to Scorpio::Request#initialize @return [Scorpio::Ur] response ur
# File lib/scorpio/openapi/operation.rb, line 160 def run_ur(*a, &b) build_request(*a, &b).run_ur end
@param base_url [#to_str] the base URL to which the path template is appended @return [Addressable::Template] the URI template, consisting of the base_url
concatenated with the path template
# File lib/scorpio/openapi/operation.rb, line 77 def uri_template(base_url: self.base_url) unless base_url raise(ArgumentError, "no base_url has been specified for operation #{self}") end # we do not use Addressable::URI#join as the paths should just be concatenated, not resolved. # we use File.join just to deal with consecutive slashes. Addressable::Template.new(File.join(base_url, path_template_str)) end
@return [Boolean] v2?
# File lib/scorpio/openapi/operation.rb, line 52 def v2? is_a?(V2::Operation) end
@return [Boolean] v3?
# File lib/scorpio/openapi/operation.rb, line 47 def v3? is_a?(V3::Operation) end