Skip to content

Commit 429b74e

Browse files
committed
Extract response body parsing
1 parent 2e205d8 commit 429b74e

File tree

4 files changed

+37
-25
lines changed

4 files changed

+37
-25
lines changed

lib/direct_admin/request.rb

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# frozen_string_literal: true
2+
23
require "uri"
3-
require "cgi"
44
require "http"
5+
require_relative "response_body"
56

67
module DirectAdmin
78
class Request
@@ -22,7 +23,7 @@ def call
2223
raise DirectAdmin::Error, "Invalid URL: #{url}"
2324
end
2425

25-
parsed_body = _parse_response(response.to_s)
26+
parsed_body = ResponseBody.build(response.to_s)
2627

2728
unless response.code == 200
2829
raise DirectAdmin::Error, parsed_body["reason"]
@@ -35,17 +36,5 @@ def _make_request
3536
HTTP.basic_auth(user: client.server_username, pass: client.server_password)
3637
.public_send(method, url, form: params)
3738
end
38-
39-
def _parse_response(response)
40-
CGI.parse(response).reduce({}) do |memo, (key, value)|
41-
if value.is_a?(Array) && value.length == 1
42-
memo[key] = value.first
43-
else
44-
memo[key] = value
45-
end
46-
47-
memo
48-
end
49-
end
5039
end
5140
end

lib/direct_admin/response_body.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# frozen-string-literal: true
2+
3+
require "cgi"
4+
require "forwardable"
5+
6+
module DirectAdmin
7+
class ResponseBody < DelegateClass(Hash)
8+
def self.build(raw_body)
9+
new(CGI.parse(raw_body).reduce({}) do |memo, (key, value)|
10+
if value.is_a?(Array) && value.length == 1
11+
memo[key] = value.first
12+
else
13+
memo[key] = value
14+
end
15+
16+
memo
17+
end)
18+
end
19+
end
20+
end

test/test_request.rb

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,6 @@
22
require "direct_admin/request"
33

44
class TestRequest < Minitest::Test
5-
def test_parse_response_basic
6-
response = "error=0&text=text&details=details"
7-
8-
request = DirectAdmin::Request.new(nil, nil, nil, nil)
9-
parsed_response = request._parse_response(response)
10-
11-
assert_equal "0", parsed_response["error"]
12-
assert_equal "text", parsed_response["text"]
13-
assert_equal "details", parsed_response["details"]
14-
end
15-
165
def test_call
176
skip
187
end

test/test_response_body.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
require "minitest/autorun"
2+
require "direct_admin/response_body"
3+
4+
class TestResponseBody < Minitest::Test
5+
def test_parse_basic_response
6+
raw_body = "error=0&text=text&details=details"
7+
8+
parsed_response = DirectAdmin::ResponseBody.build(raw_body)
9+
10+
assert_equal "0", parsed_response["error"]
11+
assert_equal "text", parsed_response["text"]
12+
assert_equal "details", parsed_response["details"]
13+
end
14+
end

0 commit comments

Comments
 (0)