Skip to content

Commit 64da504

Browse files
authored
Code Cleanup (#221)
1 parent fa0cb12 commit 64da504

File tree

4 files changed

+59
-22
lines changed

4 files changed

+59
-22
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
- RSpec ~> 3.13
3131
- Rake ~> 13.0
3232
- Rest-Client ~> 2.1
33+
- Remove implicit ActiveSupport requirement from runtime
3334
- Typhoeus ~> 1.4
3435

3536
# 2.6.0 (2025-01-18)

lib/api_auth/headers.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ module ApiAuth
22
# Builds the canonical string given a request object.
33
class Headers
44
include RequestDrivers
5+
include Helpers
56

67
# Mapping of request class patterns to their driver classes
78
REQUEST_DRIVER_MAPPING = [
@@ -83,7 +84,10 @@ def canonical_string(override_method = nil, headers_to_sign = [])
8384
@request.timestamp]
8485

8586
if headers_to_sign.is_a?(Array) && headers_to_sign.any?
86-
headers_to_sign.each { |h| canonical_array << headers[h] if headers[h].present? }
87+
headers_to_sign.each do |header_name|
88+
header_value = headers[header_name]
89+
canonical_array << header_value if value_present?(header_value)
90+
end
8791
end
8892

8993
canonical_array.join(',')
@@ -122,11 +126,7 @@ def sign_header(header)
122126
private
123127

124128
def parse_uri(uri)
125-
parsed_uri = URI.parse(uri)
126-
127-
return parsed_uri.request_uri if parsed_uri.respond_to?(:request_uri)
128-
129-
uri.empty? ? '/' : uri
129+
canonical_request_uri(uri)
130130
end
131131
end
132132
end

lib/api_auth/helpers.rb

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require 'uri'
2+
13
module ApiAuth
24
module Helpers # :nodoc:
35
def b64_encode(string)
@@ -18,5 +20,54 @@ def capitalize_keys(hsh)
1820
hsh.each_pair { |k, v| capitalized_hash[k.to_s.upcase] = v }
1921
capitalized_hash
2022
end
23+
24+
def value_blank?(value)
25+
case value
26+
when nil, false
27+
true
28+
when String, Array, Hash
29+
value.empty?
30+
else
31+
value.respond_to?(:empty?) ? value.empty? : false
32+
end
33+
end
34+
35+
def value_present?(value)
36+
!value_blank?(value)
37+
end
38+
39+
def canonical_request_uri(base_url, additional_query = nil)
40+
base = base_url.to_s
41+
return '/' if base.empty?
42+
43+
uri = URI.parse(base)
44+
merged_query = merge_query_strings(uri.query, normalize_query_component(additional_query))
45+
uri.query = merged_query if value_present?(merged_query)
46+
47+
result = uri.respond_to?(:request_uri) ? uri.request_uri : uri.to_s
48+
value_present?(result) ? result : '/'
49+
rescue URI::InvalidURIError
50+
'/'
51+
end
52+
53+
private
54+
55+
def merge_query_strings(*queries)
56+
combined = queries.compact.map(&:to_s).reject(&:empty?).join('&')
57+
combined.empty? ? nil : combined
58+
end
59+
60+
def normalize_query_component(component)
61+
case component
62+
when nil
63+
nil
64+
when String
65+
component.empty? ? nil : component
66+
when Hash
67+
component.empty? ? nil : URI.encode_www_form(component)
68+
else
69+
component.to_s
70+
end
71+
end
2172
end
2273
end

lib/api_auth/request_drivers/typhoeus_request.rb

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,7 @@ def original_uri
5555
end
5656

5757
def request_uri
58-
url = (@request.base_url || '').to_s
59-
return '/' if url.empty?
60-
61-
uri = URI.parse(url)
62-
merged_query = merge_query(uri.query, params_query)
63-
uri.query = merged_query unless merged_query.nil?
64-
65-
path = uri.request_uri
66-
path.nil? || path.empty? ? '/' : path
67-
rescue URI::InvalidURIError
68-
'/'
58+
canonical_request_uri(@request.base_url, params_query)
6959
end
7060

7161
def set_date
@@ -116,11 +106,6 @@ def params_query
116106
end
117107
end
118108

119-
def merge_query(existing, additional)
120-
segments = [existing, additional].compact.reject(&:empty?)
121-
segments.empty? ? nil : segments.join('&')
122-
end
123-
124109
def headers_hash
125110
@request.options[:headers] ||= {}
126111
end

0 commit comments

Comments
 (0)