From 3f26ddfcfb9969492b3a60b67cffa54b79713e2a Mon Sep 17 00:00:00 2001 From: Mauricio Gomes Date: Sat, 18 Oct 2025 19:38:05 -0400 Subject: [PATCH] Code Cleanup --- CHANGELOG.md | 1 + lib/api_auth/headers.rb | 12 ++--- lib/api_auth/helpers.rb | 51 +++++++++++++++++++ .../request_drivers/typhoeus_request.rb | 17 +------ 4 files changed, 59 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9b0400..38be2f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ - RSpec ~> 3.13 - Rake ~> 13.0 - Rest-Client ~> 2.1 +- Remove implicit ActiveSupport requirement from runtime - Typhoeus ~> 1.4 # 2.6.0 (2025-01-18) diff --git a/lib/api_auth/headers.rb b/lib/api_auth/headers.rb index fe7cc77..d985794 100644 --- a/lib/api_auth/headers.rb +++ b/lib/api_auth/headers.rb @@ -2,6 +2,7 @@ module ApiAuth # Builds the canonical string given a request object. class Headers include RequestDrivers + include Helpers # Mapping of request class patterns to their driver classes REQUEST_DRIVER_MAPPING = [ @@ -83,7 +84,10 @@ def canonical_string(override_method = nil, headers_to_sign = []) @request.timestamp] if headers_to_sign.is_a?(Array) && headers_to_sign.any? - headers_to_sign.each { |h| canonical_array << headers[h] if headers[h].present? } + headers_to_sign.each do |header_name| + header_value = headers[header_name] + canonical_array << header_value if value_present?(header_value) + end end canonical_array.join(',') @@ -122,11 +126,7 @@ def sign_header(header) private def parse_uri(uri) - parsed_uri = URI.parse(uri) - - return parsed_uri.request_uri if parsed_uri.respond_to?(:request_uri) - - uri.empty? ? '/' : uri + canonical_request_uri(uri) end end end diff --git a/lib/api_auth/helpers.rb b/lib/api_auth/helpers.rb index 622829f..434a4ea 100644 --- a/lib/api_auth/helpers.rb +++ b/lib/api_auth/helpers.rb @@ -1,3 +1,5 @@ +require 'uri' + module ApiAuth module Helpers # :nodoc: def b64_encode(string) @@ -18,5 +20,54 @@ def capitalize_keys(hsh) hsh.each_pair { |k, v| capitalized_hash[k.to_s.upcase] = v } capitalized_hash end + + def value_blank?(value) + case value + when nil, false + true + when String, Array, Hash + value.empty? + else + value.respond_to?(:empty?) ? value.empty? : false + end + end + + def value_present?(value) + !value_blank?(value) + end + + def canonical_request_uri(base_url, additional_query = nil) + base = base_url.to_s + return '/' if base.empty? + + uri = URI.parse(base) + merged_query = merge_query_strings(uri.query, normalize_query_component(additional_query)) + uri.query = merged_query if value_present?(merged_query) + + result = uri.respond_to?(:request_uri) ? uri.request_uri : uri.to_s + value_present?(result) ? result : '/' + rescue URI::InvalidURIError + '/' + end + + private + + def merge_query_strings(*queries) + combined = queries.compact.map(&:to_s).reject(&:empty?).join('&') + combined.empty? ? nil : combined + end + + def normalize_query_component(component) + case component + when nil + nil + when String + component.empty? ? nil : component + when Hash + component.empty? ? nil : URI.encode_www_form(component) + else + component.to_s + end + end end end diff --git a/lib/api_auth/request_drivers/typhoeus_request.rb b/lib/api_auth/request_drivers/typhoeus_request.rb index 024251e..b95a557 100644 --- a/lib/api_auth/request_drivers/typhoeus_request.rb +++ b/lib/api_auth/request_drivers/typhoeus_request.rb @@ -55,17 +55,7 @@ def original_uri end def request_uri - url = (@request.base_url || '').to_s - return '/' if url.empty? - - uri = URI.parse(url) - merged_query = merge_query(uri.query, params_query) - uri.query = merged_query unless merged_query.nil? - - path = uri.request_uri - path.nil? || path.empty? ? '/' : path - rescue URI::InvalidURIError - '/' + canonical_request_uri(@request.base_url, params_query) end def set_date @@ -116,11 +106,6 @@ def params_query end end - def merge_query(existing, additional) - segments = [existing, additional].compact.reject(&:empty?) - segments.empty? ? nil : segments.join('&') - end - def headers_hash @request.options[:headers] ||= {} end