aitch 1.0.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/FUNDING.yml +3 -0
- data/.github/workflows/tests.yml +50 -0
- data/.rubocop.yml +26 -0
- data/Gemfile +2 -2
- data/README.md +54 -14
- data/Rakefile +5 -1
- data/aitch.gemspec +12 -7
- data/lib/aitch/configuration.rb +5 -0
- data/lib/aitch/dsl.rb +4 -3
- data/lib/aitch/engines/json.rb +15 -0
- data/lib/aitch/errors.rb +1 -0
- data/lib/aitch/ext/to_query.rb +6 -10
- data/lib/aitch/location.rb +4 -3
- data/lib/aitch/namespace.rb +38 -14
- data/lib/aitch/redirect.rb +1 -0
- data/lib/aitch/request.rb +40 -28
- data/lib/aitch/response/body.rb +1 -0
- data/lib/aitch/response/description.rb +3 -2
- data/lib/aitch/response/errors.rb +2 -1
- data/lib/aitch/response.rb +9 -5
- data/lib/aitch/response_parser/default_parser.rb +2 -1
- data/lib/aitch/response_parser/html_parser.rb +1 -0
- data/lib/aitch/response_parser/json_parser.rb +2 -1
- data/lib/aitch/response_parser/xml_parser.rb +1 -0
- data/lib/aitch/response_parser.rb +8 -5
- data/lib/aitch/uri.rb +5 -2
- data/lib/aitch/utils.rb +3 -1
- data/lib/aitch/version.rb +2 -1
- data/lib/aitch.rb +13 -13
- data/test/aitch/aitch_test.rb +1 -0
- data/test/aitch/configuration_test.rb +2 -1
- data/test/aitch/dsl_test.rb +1 -0
- data/test/aitch/execute_test.rb +1 -0
- data/test/aitch/namespace_test.rb +2 -1
- data/test/aitch/request/client_https_test.rb +1 -0
- data/test/aitch/request/follow_redirect_test.rb +4 -3
- data/test/aitch/request/json_request_test.rb +1 -0
- data/test/aitch/request/request_class_test.rb +3 -2
- data/test/aitch/request/status_code_validation_test.rb +3 -2
- data/test/aitch/request_test.rb +45 -8
- data/test/aitch/response/custom_response_parser_test.rb +1 -4
- data/test/aitch/response/default_response_parser_test.rb +14 -0
- data/test/aitch/response/errors_test.rb +1 -0
- data/test/aitch/response/html_response_test.rb +1 -0
- data/test/aitch/response/json_response_test.rb +2 -1
- data/test/aitch/response/raw_response_test.rb +1 -0
- data/test/aitch/response/status_3xx_test.rb +1 -0
- data/test/aitch/response/status_4xx_test.rb +1 -0
- data/test/aitch/response/status_5xx_test.rb +1 -0
- data/test/aitch/response/xml_response_test.rb +1 -0
- data/test/aitch/response_parser/html_parser_test.rb +1 -0
- data/test/aitch/response_parser/json_parser_test.rb +2 -1
- data/test/aitch/response_parser/xml_parser_test.rb +1 -1
- data/test/aitch/response_test.rb +1 -1
- data/test/aitch/to_query_test.rb +28 -0
- data/test/aitch/uri_test.rb +2 -1
- data/test/aitch/utils/symbolize_keys_test.rb +1 -0
- data/test/aitch/utils/underscore_test.rb +1 -0
- data/test/support/helpers.rb +5 -4
- data/test/test_helper.rb +3 -2
- metadata +77 -15
- data/.travis.yml +0 -23
data/lib/aitch/request.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Aitch
|
3
4
|
class Request
|
4
|
-
attr_accessor :request_method
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
attr_accessor :options
|
9
|
-
attr_accessor :redirects
|
5
|
+
attr_accessor :request_method, :url, :data, :headers, :options, :redirects
|
6
|
+
|
7
|
+
alias params= data=
|
8
|
+
alias body= data=
|
10
9
|
|
11
10
|
def initialize(options)
|
12
11
|
self.headers = {}
|
@@ -35,7 +34,8 @@ module Aitch
|
|
35
34
|
end
|
36
35
|
|
37
36
|
def content_type
|
38
|
-
headers["Content-Type"] ||
|
37
|
+
headers["Content-Type"] ||
|
38
|
+
options.fetch(:default_headers, {})["Content-Type"]
|
39
39
|
end
|
40
40
|
|
41
41
|
def request
|
@@ -57,29 +57,40 @@ module Aitch
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def uri
|
60
|
-
@uri ||=
|
60
|
+
@uri ||= begin
|
61
|
+
normalized_url = if url.start_with?("/") && options[:base_url]
|
62
|
+
File.join(options[:base_url], url)
|
63
|
+
else
|
64
|
+
url
|
65
|
+
end
|
66
|
+
|
67
|
+
URI.new(normalized_url, data, http_method_class::REQUEST_HAS_BODY)
|
68
|
+
end
|
61
69
|
end
|
62
70
|
|
63
71
|
def http_method_class
|
64
72
|
Net::HTTP.const_get(request_method.to_s.capitalize)
|
65
73
|
rescue NameError
|
66
|
-
raise InvalidHTTPMethodError,
|
74
|
+
raise InvalidHTTPMethodError,
|
75
|
+
"unexpected HTTP verb: #{request_method.inspect}"
|
67
76
|
end
|
68
77
|
|
69
|
-
private
|
70
|
-
def set_body(request)
|
78
|
+
private def set_body(request)
|
71
79
|
body_data = data
|
72
80
|
body_data = data.to_h if data.respond_to?(:to_h)
|
73
|
-
body_data = ResponseParser::JSONParser.engine.dump(body_data) if content_type.to_s =~ /\bjson\b/
|
74
81
|
|
75
|
-
if
|
76
|
-
|
77
|
-
else
|
78
|
-
request.body = body_data.to_s
|
82
|
+
if content_type.to_s.match?(/\bjson\b/)
|
83
|
+
body_data = ResponseParser::JSONParser.engine.dump(body_data)
|
79
84
|
end
|
85
|
+
|
86
|
+
request.body = if body_data.is_a?(Hash)
|
87
|
+
Utils.build_query(body_data)
|
88
|
+
else
|
89
|
+
body_data.to_s
|
90
|
+
end
|
80
91
|
end
|
81
92
|
|
82
|
-
def set_headers(request)
|
93
|
+
private def set_headers(request)
|
83
94
|
all_headers = options.fetch(:default_headers, {}).merge(headers)
|
84
95
|
|
85
96
|
all_headers.each do |name, value|
|
@@ -88,30 +99,31 @@ module Aitch
|
|
88
99
|
end
|
89
100
|
end
|
90
101
|
|
91
|
-
def set_credentials(request)
|
102
|
+
private def set_credentials(request)
|
92
103
|
return unless options[:user] || options[:password]
|
104
|
+
|
93
105
|
request.basic_auth(options[:user], options[:password])
|
94
106
|
end
|
95
107
|
|
96
|
-
def set_https(client)
|
108
|
+
private def set_https(client)
|
97
109
|
client.use_ssl = uri.scheme == "https"
|
98
110
|
client.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
99
111
|
end
|
100
112
|
|
101
|
-
def set_timeout(client)
|
113
|
+
private def set_timeout(client)
|
102
114
|
client.read_timeout = options[:timeout]
|
103
115
|
end
|
104
116
|
|
105
|
-
def set_logger(client)
|
117
|
+
private def set_logger(client)
|
106
118
|
logger = options[:logger]
|
107
119
|
client.set_debug_output(logger) if logger
|
108
120
|
end
|
109
121
|
|
110
|
-
def set_user_agent(request)
|
122
|
+
private def set_user_agent(request)
|
111
123
|
request["User-Agent"] = options[:user_agent]
|
112
124
|
end
|
113
125
|
|
114
|
-
def set_gzip(request)
|
126
|
+
private def set_gzip(request)
|
115
127
|
request["Accept-Encoding"] = "gzip,deflate"
|
116
128
|
end
|
117
129
|
|
@@ -119,7 +131,7 @@ module Aitch
|
|
119
131
|
defined?(Net::ReadTimeout) ? Net::ReadTimeout : Timeout::Error
|
120
132
|
end
|
121
133
|
|
122
|
-
def follow_redirect(response
|
134
|
+
private def follow_redirect(response)
|
123
135
|
return response unless response.redirect?
|
124
136
|
|
125
137
|
redirect = Redirect.new(options)
|
@@ -143,18 +155,18 @@ module Aitch
|
|
143
155
|
response
|
144
156
|
end
|
145
157
|
|
146
|
-
def validate_response!(response)
|
158
|
+
private def validate_response!(response)
|
147
159
|
return unless options[:expect]
|
148
160
|
|
149
161
|
expected = [options[:expect]].flatten
|
150
162
|
return if expected.include?(response.code)
|
151
163
|
|
152
164
|
descriptions = expected
|
153
|
-
|
154
|
-
|
165
|
+
.map {|code| Response.description_for_code(code) }
|
166
|
+
.join(", ")
|
155
167
|
|
156
168
|
raise StatusCodeError,
|
157
|
-
|
169
|
+
"Expected(#{descriptions}) <=> Actual(#{response.description})"
|
158
170
|
end
|
159
171
|
end
|
160
172
|
end
|
data/lib/aitch/response/body.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Aitch
|
3
4
|
class Response
|
4
5
|
DESCRIPTION = {
|
@@ -56,7 +57,7 @@ module Aitch
|
|
56
57
|
504 => "Gateway Time Out",
|
57
58
|
505 => "Version Not Supported",
|
58
59
|
507 => "Insufficient Storage",
|
59
|
-
511 => "Network Authentication Required"
|
60
|
-
}
|
60
|
+
511 => "Network Authentication Required"
|
61
|
+
}.freeze
|
61
62
|
end
|
62
63
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Aitch
|
3
4
|
class Response
|
4
5
|
ERRORS = {
|
@@ -35,6 +36,6 @@ module Aitch
|
|
35
36
|
505 => VersionNotSupportedError,
|
36
37
|
507 => InsufficientStorageError,
|
37
38
|
511 => NetworkAuthenticationRequiredError
|
38
|
-
}
|
39
|
+
}.freeze
|
39
40
|
end
|
40
41
|
end
|
data/lib/aitch/response.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Aitch
|
3
4
|
class Response
|
4
5
|
extend Forwardable
|
@@ -17,7 +18,9 @@ module Aitch
|
|
17
18
|
end
|
18
19
|
|
19
20
|
ERRORS.each do |status_code, exception|
|
20
|
-
method_name = Utils
|
21
|
+
method_name = Utils
|
22
|
+
.underscore(exception.name.split("::").last)
|
23
|
+
.gsub("_error", "")
|
21
24
|
|
22
25
|
define_method "#{method_name}?" do
|
23
26
|
code == status_code
|
@@ -35,7 +38,7 @@ module Aitch
|
|
35
38
|
def success?
|
36
39
|
code >= 200 && code <= 399
|
37
40
|
end
|
38
|
-
|
41
|
+
alias ok? success?
|
39
42
|
|
40
43
|
def redirect?
|
41
44
|
code >= 300 && code <= 399
|
@@ -75,11 +78,12 @@ module Aitch
|
|
75
78
|
|
76
79
|
def method_missing(name, *args, &block)
|
77
80
|
return headers[name.to_s] if headers.key?(name.to_s)
|
81
|
+
|
78
82
|
super
|
79
83
|
end
|
80
84
|
|
81
|
-
def respond_to_missing?(name,
|
82
|
-
headers.key?(name.to_s)
|
85
|
+
def respond_to_missing?(name, _include_private = false)
|
86
|
+
headers.key?(name.to_s) || super
|
83
87
|
end
|
84
88
|
|
85
89
|
def description
|
@@ -90,6 +94,6 @@ module Aitch
|
|
90
94
|
"#<#{self.class} #{description} (#{content_type})>"
|
91
95
|
end
|
92
96
|
|
93
|
-
|
97
|
+
alias to_s inspect
|
94
98
|
end
|
95
99
|
end
|
@@ -1,24 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Aitch
|
3
4
|
module ResponseParser
|
4
|
-
|
5
|
+
def self.parsers
|
6
|
+
@parsers ||= []
|
7
|
+
end
|
5
8
|
|
6
9
|
def self.prepend(name, parser)
|
7
10
|
unregister(name)
|
8
|
-
|
11
|
+
parsers.unshift parser
|
9
12
|
end
|
10
13
|
|
11
14
|
def self.append(name, parser)
|
12
15
|
unregister(name)
|
13
|
-
|
16
|
+
parsers << parser
|
14
17
|
end
|
15
18
|
|
16
19
|
def self.unregister(name)
|
17
|
-
|
20
|
+
parsers.delete_if {|parser| parser.type == name }
|
18
21
|
end
|
19
22
|
|
20
23
|
def self.find(content_type)
|
21
|
-
|
24
|
+
parsers.find {|parser| parser.match?(content_type) }
|
22
25
|
end
|
23
26
|
|
24
27
|
append :json, JSONParser
|
data/lib/aitch/uri.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Aitch
|
3
4
|
class URI
|
4
5
|
extend Forwardable
|
5
6
|
|
6
7
|
def_delegators :@uri, :host, :port, :scheme
|
7
8
|
|
8
|
-
def initialize(url, data = {}, request_has_body = false)
|
9
|
+
def initialize(url, data = {}, request_has_body = false) # rubocop:disable Style/OptionalBooleanParameter
|
9
10
|
@url = url
|
10
11
|
@data = data
|
11
12
|
@request_has_body = request_has_body
|
@@ -35,7 +36,9 @@ module Aitch
|
|
35
36
|
|
36
37
|
def query
|
37
38
|
query = [@uri.query]
|
38
|
-
|
39
|
+
if !request_has_body? && @data.respond_to?(:to_a)
|
40
|
+
query << ::URI.encode_www_form(@data.to_a)
|
41
|
+
end
|
39
42
|
query = query.compact.reject(&:empty?).join("&")
|
40
43
|
|
41
44
|
"?#{query}" unless query == ""
|
data/lib/aitch/utils.rb
CHANGED
data/lib/aitch/version.rb
CHANGED
data/lib/aitch.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "net/https"
|
3
4
|
require "forwardable"
|
4
5
|
require "json"
|
@@ -19,6 +20,7 @@ require "aitch/namespace"
|
|
19
20
|
require "aitch/location"
|
20
21
|
require "aitch/configuration"
|
21
22
|
require "aitch/errors"
|
23
|
+
require "aitch/engines/json"
|
22
24
|
require "aitch/request"
|
23
25
|
require "aitch/redirect"
|
24
26
|
require "aitch/response/errors"
|
@@ -37,21 +39,19 @@ module Aitch
|
|
37
39
|
extend Forwardable
|
38
40
|
|
39
41
|
def_delegators :namespace,
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
42
|
+
:configuration, :config,
|
43
|
+
:get, :get!,
|
44
|
+
:post, :post!,
|
45
|
+
:put, :put!,
|
46
|
+
:patch, :patch!,
|
47
|
+
:options, :options!,
|
48
|
+
:trace, :trace!,
|
49
|
+
:head, :head!,
|
50
|
+
:delete, :delete!,
|
51
|
+
:execute, :execute!,
|
52
|
+
:configure
|
51
53
|
end
|
52
54
|
|
53
|
-
private
|
54
|
-
|
55
55
|
def self.namespace
|
56
56
|
@namespace ||= Namespace.new
|
57
57
|
end
|
data/test/aitch/aitch_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "test_helper"
|
3
4
|
|
4
5
|
class ConfigurationTest < Minitest::Test
|
@@ -16,7 +17,7 @@ class ConfigurationTest < Minitest::Test
|
|
16
17
|
end
|
17
18
|
|
18
19
|
test "sets default headers" do
|
19
|
-
assert_equal
|
20
|
+
assert_equal({}, Aitch::Configuration.new.default_headers)
|
20
21
|
end
|
21
22
|
|
22
23
|
test "configures aitch" do
|
data/test/aitch/dsl_test.rb
CHANGED
data/test/aitch/execute_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "test_helper"
|
3
4
|
|
4
5
|
class NamespaceTest < Minitest::Test
|
@@ -7,6 +8,6 @@ class NamespaceTest < Minitest::Test
|
|
7
8
|
ns.config.user_agent = "MyLib/1.0.0"
|
8
9
|
|
9
10
|
assert_equal "MyLib/1.0.0", ns.config.user_agent
|
10
|
-
assert_match
|
11
|
+
assert_match(/^Aitch/, Aitch.config.user_agent)
|
11
12
|
end
|
12
13
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "test_helper"
|
3
4
|
|
4
5
|
class FollowRedirectTest < Minitest::Test
|
@@ -25,9 +26,9 @@ class FollowRedirectTest < Minitest::Test
|
|
25
26
|
register_uri(:get, "http://example.org/", location: "http://example.com/", status: 301)
|
26
27
|
register_uri(:get, "http://example.com/", location: "https://example.com/", status: 301)
|
27
28
|
|
28
|
-
assert_raises(Aitch::TooManyRedirectsError)
|
29
|
+
assert_raises(Aitch::TooManyRedirectsError) do
|
29
30
|
Aitch.get("http://example.org/")
|
30
|
-
|
31
|
+
end
|
31
32
|
end
|
32
33
|
|
33
34
|
test "returns only redirection urls" do
|
@@ -50,7 +51,7 @@ class FollowRedirectTest < Minitest::Test
|
|
50
51
|
register_uri(:post, "http://example.org/hi", status: 307, location: "/hello")
|
51
52
|
register_uri(:post, "http://example.org/hello", status: 200)
|
52
53
|
|
53
|
-
response = Aitch.post("http://example.org/", {a: 1},
|
54
|
+
response = Aitch.post("http://example.org/", {a: 1}, Range: "1..100")
|
54
55
|
|
55
56
|
assert_equal "http://example.org/hello", response.url
|
56
57
|
assert_equal 200, response.code
|
@@ -1,11 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "test_helper"
|
3
4
|
|
4
5
|
class RequestClassTest < Minitest::Test
|
5
6
|
test "raises with invalid method" do
|
6
|
-
error = assert_raises(Aitch::InvalidHTTPMethodError)
|
7
|
+
error = assert_raises(Aitch::InvalidHTTPMethodError) do
|
7
8
|
build_request(request_method: "invalid").request
|
8
|
-
|
9
|
+
end
|
9
10
|
|
10
11
|
assert_equal %[unexpected HTTP verb: "invalid"], error.message
|
11
12
|
end
|
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "test_helper"
|
3
4
|
|
4
5
|
class StatusCodeValidationTest < Minitest::Test
|
5
6
|
test "raises exception when status code isn't valid" do
|
6
7
|
register_uri(:get, "http://example.org/", status: 404)
|
7
8
|
|
8
|
-
error = assert_raises(Aitch::StatusCodeError)
|
9
|
+
error = assert_raises(Aitch::StatusCodeError) do
|
9
10
|
Aitch.get("http://example.org/", {}, {}, expect: [200])
|
10
|
-
|
11
|
+
end
|
11
12
|
|
12
13
|
assert_equal "Expected(200 OK) <=> Actual(404 Not Found)", error.message
|
13
14
|
end
|
data/test/aitch/request_test.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "test_helper"
|
3
4
|
|
4
5
|
class RequestTest < Minitest::Test
|
5
6
|
test "sets content type" do
|
6
|
-
request = build_request(content_type:
|
7
|
-
assert_equal
|
7
|
+
request = build_request(content_type: "application/json")
|
8
|
+
assert_equal "application/json", request.content_type
|
8
9
|
end
|
9
10
|
|
10
11
|
test "raises with invalid uri" do
|
@@ -25,9 +26,11 @@ class RequestTest < Minitest::Test
|
|
25
26
|
end
|
26
27
|
|
27
28
|
test "sets user agent" do
|
28
|
-
requester = build_request
|
29
|
+
requester = build_request(headers: {"User-Agent" => "CUSTOM"})
|
29
30
|
request = requester.request
|
30
|
-
|
31
|
+
|
32
|
+
assert_equal "CUSTOM", requester.headers["User-Agent"]
|
33
|
+
assert_equal "CUSTOM", request["User-Agent"]
|
31
34
|
end
|
32
35
|
|
33
36
|
test "requests gzip encoding" do
|
@@ -50,6 +53,11 @@ class RequestTest < Minitest::Test
|
|
50
53
|
assert_equal "some body", request.body
|
51
54
|
end
|
52
55
|
|
56
|
+
test "sets request body from params key" do
|
57
|
+
request = build_request(request_method: "post", params: "some body").request
|
58
|
+
assert_equal "some body", request.body
|
59
|
+
end
|
60
|
+
|
53
61
|
test "sets json body from object" do
|
54
62
|
request = build_request(
|
55
63
|
request_method: "post",
|
@@ -66,7 +74,7 @@ class RequestTest < Minitest::Test
|
|
66
74
|
request = build_request(
|
67
75
|
request_method: "post",
|
68
76
|
data: {a: 1},
|
69
|
-
options: {json_parser: JSON, default_headers: {
|
77
|
+
options: {json_parser: JSON, default_headers: {"Content-Type" => "application/json"}}
|
70
78
|
).request
|
71
79
|
|
72
80
|
expected = {a: 1}.to_json
|
@@ -121,7 +129,7 @@ class RequestTest < Minitest::Test
|
|
121
129
|
test "performs request when using dsl" do
|
122
130
|
register_uri(:post, /.+/)
|
123
131
|
|
124
|
-
|
132
|
+
Aitch.post do
|
125
133
|
url "http://example.org/some/path"
|
126
134
|
params a: 1, b: 2
|
127
135
|
headers Rendering: "0.1"
|
@@ -132,7 +140,36 @@ class RequestTest < Minitest::Test
|
|
132
140
|
assert_equal :post, last_request.method
|
133
141
|
assert_equal "a=1&b=2", last_request.body
|
134
142
|
assert_equal "0.1", last_request.headers["Rendering"]
|
135
|
-
assert_equal "user", last_request.
|
136
|
-
|
143
|
+
assert_equal "user:pass", Base64.decode64(last_request.headers["Authorization"].split(" ").last)
|
144
|
+
end
|
145
|
+
|
146
|
+
test "performs request when using kwargs" do
|
147
|
+
register_uri(:post, /.+/)
|
148
|
+
|
149
|
+
Aitch.post(
|
150
|
+
url: "http://example.org/some/path",
|
151
|
+
data: {a: 1, b: 2},
|
152
|
+
headers: {Rendering: "0.1"},
|
153
|
+
options: {user: "user", password: "pass"}
|
154
|
+
)
|
155
|
+
|
156
|
+
assert_equal "/some/path", last_request.uri.request_uri
|
157
|
+
assert_equal :post, last_request.method
|
158
|
+
assert_equal "a=1&b=2", last_request.body
|
159
|
+
assert_equal "0.1", last_request.headers["Rendering"]
|
160
|
+
assert_equal "user:pass", Base64.decode64(last_request.headers["Authorization"].split(" ").last)
|
161
|
+
end
|
162
|
+
|
163
|
+
test "uses base url" do
|
164
|
+
register_uri(:get, /.+/)
|
165
|
+
|
166
|
+
client = Aitch::Namespace.new
|
167
|
+
client.configure {|c| c.base_url = "https://example.com" }
|
168
|
+
|
169
|
+
client.get("/some/path")
|
170
|
+
|
171
|
+
assert_equal "/some/path", last_request.uri.request_uri
|
172
|
+
assert_equal "example.com", last_request.uri.host
|
173
|
+
assert_equal "https", last_request.uri.scheme
|
137
174
|
end
|
138
175
|
end
|
@@ -1,14 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "test_helper"
|
3
4
|
require "csv"
|
4
5
|
|
5
6
|
class CustomResponseParserTest < Minitest::Test
|
6
7
|
setup do
|
7
8
|
parser = Class.new do
|
8
|
-
def self.type
|
9
|
-
:csv
|
10
|
-
end
|
11
|
-
|
12
9
|
def self.match?(content_type)
|
13
10
|
content_type =~ /csv/
|
14
11
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
require "csv"
|
5
|
+
|
6
|
+
class DefaultResponseParserTest < Minitest::Test
|
7
|
+
test "returns application/custom" do
|
8
|
+
register_uri(:get, "http://example.org/file.custom", body: "1,2,3", content_type: "application/custom")
|
9
|
+
response = Aitch.get("http://example.org/file.custom")
|
10
|
+
|
11
|
+
assert_instance_of String, response.data
|
12
|
+
assert_equal %[1,2,3], response.data
|
13
|
+
end
|
14
|
+
end
|