Class: OpenApi::Endpoints
- Inherits:
-
Object
- Object
- OpenApi::Endpoints
- Defined in:
- lib/open-api/endpoints.rb
Defined Under Namespace
Modules: Controller
Constant Summary collapse
- METADATA_MERGE =
{ tags: (lambda do |, | ||= {} return if .nil? fail 'Expected tags as an Array!' unless .is_a?(Array) + end), headers: (lambda do |headers, merge_headers, opts| OpenApi::Utils.verify_and_merge_hash(headers, merge_headers, 'header parameters', opts) end), path_params: (lambda do |path_params, merge_path_params, opts| OpenApi::Utils.verify_and_merge_hash(path_params, merge_path_params, 'path parameters', opts) end), query_string: (lambda do |query_string, merge_query_string, opts| OpenApi::Utils.verify_and_merge_hash(query_string, merge_query_string, 'query string parameters', opts) end), form_data: (lambda do |form_data, merge_form_data, opts| OpenApi::Utils.verify_and_merge_hash(form_data, merge_form_data, 'form data parameters', opts) end), body: (lambda do |body_data, merge_body_data, opts| OpenApi::Utils.verify_and_merge_hash(body_data, merge_body_data, 'body', opts) end), responses: (lambda do |responses, merge_responses, opts| merge_responses = Hash[(merge_responses.map do |key, hash| fail "Invalid response code #{key}" if key.to_s != key.to_i.to_s [key.to_i, hash] end)] OpenApi::Utils.verify_and_merge_hash(responses, merge_responses, 'responses', opts) end) }
Class Method Summary collapse
- .build_parameter_metadata(endpoint_metadata) ⇒ Object
- .check_path_filter(route, rel_path, path_filter, opts = {}) ⇒ Object
- .find_matching_routes(base_path, opts = {}) ⇒ Object
- .merge_metadata(metadata, merge_metadata, opts = {}) ⇒ Object
- .relative_path(path, base_path) ⇒ Object
- .verb_key(route_wrapper) ⇒ Object
Class Method Details
.build_parameter_metadata(endpoint_metadata) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/open-api/endpoints.rb', line 90 def () parameters = {} parameters = (parameters.is_a?(Array) ? parameters : []) + param_array(.delete(:headers), :header) + param_array(.delete(:path_params), :path) + param_array(.delete(:query_string), :query) + param_array(.delete(:form_data), :form_data) if (body_param = .delete(:body)).is_a?(Hash) parameters += param_array({ body: body_param }, :body) end return unless parameters.present? [:parameters] = OpenApi::Utils.(parameters, end_depth: 3) end |
.check_path_filter(route, rel_path, path_filter, opts = {}) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 |
# 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 = {}) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# 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 = {}) ⇒ Object
38 39 40 41 42 43 44 45 46 |
# File 'lib/open-api/endpoints.rb', line 38 def (, , opts = {}) if (body_value = [:body]).respond_to?(:to_sym) = .merge(body: { schema: { :'$ref' => body_value.to_sym } }) end if .include?(:children) = .reject { |k, _v| k == :children } end OpenApi::Utils.merge_hash(, , opts.merge(merge_by: METADATA_MERGE)) end |
.relative_path(path, base_path) ⇒ Object
48 49 50 51 52 53 |
# 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) ⇒ Object
55 56 57 |
# File 'lib/open-api/endpoints.rb', line 55 def verb_key(route_wrapper) route_wrapper.verb.to_s.downcase end |