class OpenApi::Endpoints
Constants
- METADATA_MERGE
Public Class Methods
build_parameter_metadata(endpoint_metadata)
click to toggle source
# File lib/open-api/endpoints.rb, line 90 def build_parameter_metadata(endpoint_metadata) parameters = {} parameters = (parameters.is_a?(Array) ? parameters : []) + param_array(endpoint_metadata.delete(:headers), :header) + param_array(endpoint_metadata.delete(:path_params), :path) + param_array(endpoint_metadata.delete(:query_string), :query) + param_array(endpoint_metadata.delete(:form_data), :form_data) if (body_param = endpoint_metadata.delete(:body)).is_a?(Hash) parameters += param_array({ body: body_param }, :body) end return unless parameters.present? endpoint_metadata[:parameters] = OpenApi::Utils.camelize_metadata(parameters, end_depth: 3) end
check_path_filter(route, rel_path, path_filter, opts = {})
click to toggle source
# File lib/open-api/endpoints.rb, line 76 def check_path_filter(route, rel_path, path_filter, opts = {}) return true unless path_filter.present? return rel_path == path_filter if path_filter.is_a?(String) return rel_path =~ path_filter if path_filter.is_a?(Regexp) return path_filter.include?(rel_path) if path_filter.is_a?(Array) if path_filter.respond_to?(:call) && path_filter.respond_to?(:parameters) route_opts = opts.merge(route: route, controller: route.defaults[:controller], action: route.defaults[:action]) rslt = path_filter.send(*([:call, rel_path, route_opts][0..path_filter.parameters.size])) return rslt ? true : false end false end
find_matching_routes(base_path, opts = {})
click to toggle source
# File lib/open-api/endpoints.rb, line 59 def find_matching_routes(base_path, opts = {}) path_filter = opts[:path_filter] if path_filter.is_a?(String) && !path_filter.starts_with?('/') path_filter = "/#{path_filter}" end matching_routes = [] Rails.application.routes.routes.each do |route| route_wrapper = ActionDispatch::Routing::RouteWrapper.new(route) if (path = route_wrapper.path.to_s).starts_with?(base_path) next unless check_path_filter(route, relative_path(path, base_path), path_filter, opts) matching_routes << route_wrapper next end end matching_routes end
merge_metadata(metadata, merge_metadata, opts = {})
click to toggle source
# File lib/open-api/endpoints.rb, line 38 def merge_metadata(metadata, merge_metadata, opts = {}) if (body_value = merge_metadata[:body]).respond_to?(:to_sym) merge_metadata = merge_metadata.merge(body: { schema: { :'$ref' => body_value.to_sym } }) end if merge_metadata.include?(:children) merge_metadata = merge_metadata.reject { |k, _v| k == :children } end OpenApi::Utils.merge_hash(metadata, merge_metadata, opts.merge(merge_by: METADATA_MERGE)) end
relative_path(path, base_path)
click to toggle source
# File lib/open-api/endpoints.rb, line 48 def relative_path(path, base_path) return path if path.blank? || base_path.blank? relative_path = path[base_path.length..-1] relative_path = "/#{relative_path}" unless relative_path.starts_with?('/') relative_path end
verb_key(route_wrapper)
click to toggle source
# File lib/open-api/endpoints.rb, line 55 def verb_key(route_wrapper) route_wrapper.verb.to_s.downcase end
Private Class Methods
param_array(hash, param_in)
click to toggle source
# File lib/open-api/endpoints.rb, line 106 def param_array(hash, param_in) return [] if hash.nil? fail "Expected Hash for parameter type '#{param_in}'!" unless hash.is_a?(Hash) hash.map do |key, value| { name: key, in: OpenApi::Utils.camelize_key(param_in) }.merge( value.reject { |k, _v| [:name, :in].include?(k) }) end end