Skip to content

Commit 4899a56

Browse files
authored
fix: Split up the build_request function to logical component functions to reduce method complexity (#67)
1 parent 14ca086 commit 4899a56

File tree

1 file changed

+35
-23
lines changed

1 file changed

+35
-23
lines changed

lib/ruby_http_client.rb

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -141,29 +141,10 @@ def build_url(query_params: nil)
141141
#
142142
def build_request(name, args)
143143
build_args(args) if args
144-
uri = build_url(query_params: @query_params)
145-
@http = build_http(uri.host, uri.port)
146-
net_http = Kernel.const_get('Net::HTTP::' + name.to_s.capitalize)
147-
@request = build_request_headers(net_http.new(uri.request_uri))
148-
if @request_body &&
149-
(!@request_headers.key?('Content-Type') ||
150-
@request_headers['Content-Type'] == 'application/json')
151-
152-
# If body is a hash, encode it; else leave it alone
153-
@request.body = if @request_body.class == Hash
154-
@request_body.to_json
155-
else
156-
@request_body
157-
end
158-
@request['Content-Type'] = 'application/json'
159-
elsif !@request_body && (name.to_s == 'post')
160-
@request['Content-Type'] = ''
161-
else
162-
@request.body = @request_body
163-
end
164-
@http_options.each do |attribute, value|
165-
@http.send("#{attribute}=", value)
166-
end
144+
# build the request & http object
145+
build_http_request(name)
146+
# set the content type & request body
147+
update_content_type(name)
167148
make_request(@http, @request)
168149
end
169150

@@ -245,6 +226,37 @@ def method_missing(name, *args, &_block)
245226
# Add a segment to the URL
246227
_(name)
247228
end
229+
230+
private
231+
232+
def build_http_request(http_method)
233+
uri = build_url(query_params: @query_params)
234+
net_http = Kernel.const_get('Net::HTTP::' + http_method.to_s.capitalize)
235+
236+
@http = build_http(uri.host, uri.port)
237+
@request = build_request_headers(net_http.new(uri.request_uri))
238+
end
239+
240+
def update_content_type(http_method)
241+
if @request_body && content_type_json?
242+
# If body is a hash, encode it; else leave it alone
243+
@request.body = if @request_body.class == Hash
244+
@request_body.to_json
245+
else
246+
@request_body
247+
end
248+
@request['Content-Type'] = 'application/json'
249+
elsif !@request_body && http_method.to_s == 'post'
250+
@request['Content-Type'] = ''
251+
else
252+
@request.body = @request_body
253+
end
254+
end
255+
256+
def content_type_json?
257+
!@request_headers.key?('Content-Type') ||
258+
@request_headers['Content-Type'] == 'application/json'
259+
end
248260
# rubocop:enable Style/MethodMissingSuper
249261
# rubocop:enable Style/MissingRespondToMissing
250262
end

0 commit comments

Comments
 (0)