wrest 4.0.0-universal-java-18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG +169 -0
- data/LICENCE +7 -0
- data/README.md +436 -0
- data/bin/wrest +4 -0
- data/bin/wrest_shell.rb +23 -0
- data/lib/wrest/async_request/event_machine_backend.rb +32 -0
- data/lib/wrest/async_request/thread_backend.rb +34 -0
- data/lib/wrest/async_request/thread_pool.rb +29 -0
- data/lib/wrest/async_request.rb +51 -0
- data/lib/wrest/cache_proxy.rb +119 -0
- data/lib/wrest/caching/memcached.rb +37 -0
- data/lib/wrest/caching/redis.rb +38 -0
- data/lib/wrest/caching.rb +57 -0
- data/lib/wrest/callback.rb +70 -0
- data/lib/wrest/components/container/alias_accessors.rb +70 -0
- data/lib/wrest/components/container/typecaster.rb +178 -0
- data/lib/wrest/components/container.rb +204 -0
- data/lib/wrest/components/mutators/base.rb +65 -0
- data/lib/wrest/components/mutators/camel_to_snake_case.rb +26 -0
- data/lib/wrest/components/mutators/xml_type_caster.rb +56 -0
- data/lib/wrest/components/mutators.rb +42 -0
- data/lib/wrest/components/translators/content_types.rb +25 -0
- data/lib/wrest/components/translators/json.rb +36 -0
- data/lib/wrest/components/translators/txt.rb +35 -0
- data/lib/wrest/components/translators/xml/conversions.rb +56 -0
- data/lib/wrest/components/translators/xml.rb +77 -0
- data/lib/wrest/components/translators.rb +30 -0
- data/lib/wrest/components.rb +22 -0
- data/lib/wrest/core_ext/hash/conversions.rb +45 -0
- data/lib/wrest/core_ext/hash.rb +7 -0
- data/lib/wrest/core_ext/string/conversions.rb +38 -0
- data/lib/wrest/core_ext/string.rb +7 -0
- data/lib/wrest/exceptions.rb +38 -0
- data/lib/wrest/hash_with_case_insensitive_access.rb +52 -0
- data/lib/wrest/hash_with_indifferent_access.rb +442 -0
- data/lib/wrest/http_codes.rb +83 -0
- data/lib/wrest/http_shared/headers.rb +345 -0
- data/lib/wrest/http_shared/standard_headers.rb +22 -0
- data/lib/wrest/http_shared/standard_tokens.rb +21 -0
- data/lib/wrest/http_shared.rb +25 -0
- data/lib/wrest/multipart.rb +84 -0
- data/lib/wrest/native/connection_factory.rb +28 -0
- data/lib/wrest/native/delete.rb +27 -0
- data/lib/wrest/native/get.rb +83 -0
- data/lib/wrest/native/options.rb +27 -0
- data/lib/wrest/native/patch.rb +27 -0
- data/lib/wrest/native/post.rb +27 -0
- data/lib/wrest/native/post_multipart.rb +36 -0
- data/lib/wrest/native/put.rb +27 -0
- data/lib/wrest/native/put_multipart.rb +36 -0
- data/lib/wrest/native/redirection.rb +39 -0
- data/lib/wrest/native/request.rb +161 -0
- data/lib/wrest/native/response.rb +278 -0
- data/lib/wrest/native/session.rb +66 -0
- data/lib/wrest/native.rb +36 -0
- data/lib/wrest/test/request_patches.rb +12 -0
- data/lib/wrest/test.rb +3 -0
- data/lib/wrest/uri/builders.rb +48 -0
- data/lib/wrest/uri.rb +312 -0
- data/lib/wrest/uri_template.rb +63 -0
- data/lib/wrest/utils.rb +129 -0
- data/lib/wrest/version.rb +14 -0
- data/lib/wrest.rb +77 -0
- data/lib/wrest_no_ext.rb +7 -0
- metadata +286 -0
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2009 Sidu Ponnappa
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
7
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
8
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
9
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
10
|
+
|
11
|
+
module Wrest
|
12
|
+
module Native
|
13
|
+
class Get < Request
|
14
|
+
QUERY_PARAMS_SEPERATOR = '?'
|
15
|
+
EMPTY_QUERY_PARAMS = ''
|
16
|
+
|
17
|
+
attr_reader :cache_proxy
|
18
|
+
|
19
|
+
def initialize(wrest_uri, parameters = {}, headers = {}, options = {})
|
20
|
+
follow_redirects = options[:follow_redirects]
|
21
|
+
options[:follow_redirects] = (follow_redirects.nil? ? true : follow_redirects)
|
22
|
+
|
23
|
+
cache_store = (options[:cache_store] || Wrest::Caching.default_store) unless options[:disable_cache]
|
24
|
+
@cache_proxy = Wrest::CacheProxy.new(self, cache_store)
|
25
|
+
|
26
|
+
super(wrest_uri, Net::HTTP::Get, parameters, nil, headers, options)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Checks equality between two Wrest::Native::Get objects.
|
30
|
+
# Comparing two Wrest::Native::Get objects with identical values for the following properties would return True.
|
31
|
+
# uri, parameters, username, password and ssh verify_mode.
|
32
|
+
def ==(other)
|
33
|
+
return true if equal?(other)
|
34
|
+
return false unless other.class == self.class
|
35
|
+
return true if these_fields_are_equal(other)
|
36
|
+
|
37
|
+
false
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns a hash value for this Wrest::Native::Get object.
|
41
|
+
# Objects that returns true when compared using the == operator would return the same hash value also.
|
42
|
+
def hash
|
43
|
+
[uri, parameters, username, password, verify_mode].hash
|
44
|
+
end
|
45
|
+
|
46
|
+
# :nodoc:
|
47
|
+
def invoke_with_cache_check
|
48
|
+
cache_proxy.get
|
49
|
+
end
|
50
|
+
|
51
|
+
alias invoke_without_cache_check invoke
|
52
|
+
alias invoke invoke_with_cache_check
|
53
|
+
|
54
|
+
def build_request_without_cache_store(cache_validation_headers)
|
55
|
+
new_headers = headers.clone.merge cache_validation_headers
|
56
|
+
new_options = # do not run this through the caching mechanism.
|
57
|
+
options.clone.tap do |opts|
|
58
|
+
opts.delete :cache_store
|
59
|
+
opts[:disable_cache] = true
|
60
|
+
end
|
61
|
+
Wrest::Native::Get.new(uri, parameters, new_headers, new_options)
|
62
|
+
end
|
63
|
+
|
64
|
+
def full_uri_string
|
65
|
+
@uri.to_s + query_params_string
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def these_fields_are_equal(other)
|
71
|
+
(uri == other.uri) &&
|
72
|
+
(parameters == other.parameters) &&
|
73
|
+
(username == other.username) &&
|
74
|
+
(password == other.password) &&
|
75
|
+
(verify_mode == other.verify_mode)
|
76
|
+
end
|
77
|
+
|
78
|
+
def query_params_string
|
79
|
+
@parameters.any? ? QUERY_PARAMS_SEPERATOR + Utils.hash_to_param(@parameters) : EMPTY_QUERY_PARAMS
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2009 Sidu Ponnappa
|
4
|
+
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
9
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
11
|
+
|
12
|
+
module Wrest
|
13
|
+
module Native
|
14
|
+
class Options < Request
|
15
|
+
def initialize(wrest_uri, options = {})
|
16
|
+
super(
|
17
|
+
wrest_uri,
|
18
|
+
Net::HTTP::Options,
|
19
|
+
{},
|
20
|
+
nil,
|
21
|
+
{},
|
22
|
+
options
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2009 Sidu Ponnappa
|
4
|
+
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
9
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
11
|
+
|
12
|
+
module Wrest
|
13
|
+
module Native
|
14
|
+
class Patch < Request
|
15
|
+
def initialize(wrest_uri, body = '', headers = {}, parameters = {}, options = {})
|
16
|
+
super(
|
17
|
+
wrest_uri,
|
18
|
+
Net::HTTP::Patch,
|
19
|
+
parameters,
|
20
|
+
body,
|
21
|
+
headers,
|
22
|
+
options
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2009 Sidu Ponnappa
|
4
|
+
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
9
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
11
|
+
|
12
|
+
module Wrest
|
13
|
+
module Native
|
14
|
+
class Post < Request
|
15
|
+
def initialize(wrest_uri, body = '', headers = {}, parameters = {}, options = {})
|
16
|
+
super(
|
17
|
+
wrest_uri,
|
18
|
+
Net::HTTP::Post,
|
19
|
+
parameters,
|
20
|
+
body,
|
21
|
+
headers,
|
22
|
+
options
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2009 - 2010 Sidu Ponnappa
|
4
|
+
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
9
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
11
|
+
require 'net/http/post/multipart'
|
12
|
+
|
13
|
+
module Wrest
|
14
|
+
module Native
|
15
|
+
class PostMultipart < Request
|
16
|
+
def initialize(wrest_uri, parameters = {}, headers = {}, options = {})
|
17
|
+
super(
|
18
|
+
wrest_uri,
|
19
|
+
Net::HTTP::Post::Multipart,
|
20
|
+
parameters,
|
21
|
+
nil,
|
22
|
+
headers,
|
23
|
+
options
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def build_request(request_klass, uri, parameters, headers)
|
28
|
+
request_klass.new(uri.full_path, parameters, headers)
|
29
|
+
end
|
30
|
+
|
31
|
+
def do_request
|
32
|
+
@connection.request(@http_request)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2009 Sidu Ponnappa
|
4
|
+
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
9
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
11
|
+
|
12
|
+
module Wrest
|
13
|
+
module Native
|
14
|
+
class Put < Request
|
15
|
+
def initialize(wrest_uri, body = '', headers = {}, parameters = {}, options = {})
|
16
|
+
super(
|
17
|
+
wrest_uri,
|
18
|
+
Net::HTTP::Put,
|
19
|
+
parameters,
|
20
|
+
body,
|
21
|
+
headers,
|
22
|
+
options
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2009 - 2010 Sidu Ponnappa
|
4
|
+
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
9
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
11
|
+
require 'net/http/post/multipart'
|
12
|
+
|
13
|
+
module Wrest
|
14
|
+
module Native
|
15
|
+
class PutMultipart < Request
|
16
|
+
def initialize(wrest_uri, parameters = {}, headers = {}, options = {})
|
17
|
+
super(
|
18
|
+
wrest_uri,
|
19
|
+
Net::HTTP::Put::Multipart,
|
20
|
+
parameters,
|
21
|
+
nil,
|
22
|
+
headers,
|
23
|
+
options
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def build_request(request_klass, uri, parameters, headers)
|
28
|
+
request_klass.new(uri.full_path, parameters, headers)
|
29
|
+
end
|
30
|
+
|
31
|
+
def do_request
|
32
|
+
@connection.request(@http_request)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2009 Sidu Ponnappa
|
4
|
+
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at Http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
9
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
11
|
+
|
12
|
+
module Wrest # :nodoc:
|
13
|
+
module Native # :nodoc:
|
14
|
+
# Constructed by Wrest::Response.new if the HTTP response code is 3xx
|
15
|
+
# (http://en.wikipedia.org/wiki/300_Multiple_Choices#3xx_Redirection)
|
16
|
+
#
|
17
|
+
# This class is necessary because Net::HTTP doesn't seem to support
|
18
|
+
# redirection natively.
|
19
|
+
class Redirection < Response
|
20
|
+
# A get is invoked on the url stored in the response headers
|
21
|
+
# under the key 'location' and the new Response is returned.
|
22
|
+
#
|
23
|
+
# The follow_redirects_count and follow_redirects_limit options
|
24
|
+
# should be present. follow_redirects_count will be incremented by 1.
|
25
|
+
#
|
26
|
+
# This method will raise a Wrest::Exceptions::AutoRedirectLimitExceeded
|
27
|
+
# if the follow_redirects_count equals the follow_redirects_limit.
|
28
|
+
def follow(redirect_request_options = {})
|
29
|
+
target = self['location']
|
30
|
+
redirect_request_options = redirect_request_options.clone
|
31
|
+
|
32
|
+
raise Wrest::Exceptions::AutoRedirectLimitExceeded if (redirect_request_options[:follow_redirects_count] += 1) > redirect_request_options[:follow_redirects_limit]
|
33
|
+
|
34
|
+
Wrest.logger.debug "-| Redirecting to #{target}"
|
35
|
+
Wrest::Uri.new(target, redirect_request_options).get
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,161 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2009 Sidu Ponnappa
|
4
|
+
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
9
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
10
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
11
|
+
|
12
|
+
module Wrest
|
13
|
+
module Native
|
14
|
+
# This represents a HTTP request. Typically you will never need to instantiate
|
15
|
+
# one of these yourself - you can use one of the more conveient APIs via Wrest::Uri
|
16
|
+
# or Wrest::Native::Get etc. instead.
|
17
|
+
class Request
|
18
|
+
attr_reader :http_request, :uri, :body, :headers, :username, :password, :follow_redirects,
|
19
|
+
:follow_redirects_limit, :follow_redirects_count, :timeout, :connection, :parameters,
|
20
|
+
:cache_store, :verify_mode, :options, :ca_path
|
21
|
+
|
22
|
+
# Valid tuples for the options are:
|
23
|
+
# :username => String, defaults to nil
|
24
|
+
# :password => String, defaults to nil
|
25
|
+
# :follow_redirects => Boolean, defaults to true for Get, false for anything else
|
26
|
+
# :follow_redirects_limit => Integer, defaults to 5. This is the number of redirects
|
27
|
+
# that Wrest will automatically follow before raising an
|
28
|
+
# Wrest::Exceptions::AutoRedirectLimitExceeded exception.
|
29
|
+
# For example, if you set this to 1, the very first redirect
|
30
|
+
# will raise the exception.
|
31
|
+
# :follow_redirects_count => Integer, defaults to 0. This is a count of the hops made to
|
32
|
+
# get to this request and increases by one for every redirect
|
33
|
+
# until the follow_redirects_limit is hit. You should never set
|
34
|
+
# this option yourself.
|
35
|
+
# :timeout => The period, in seconds, after which a Timeout::Error is raised
|
36
|
+
# in the event of a connection failing to open. Defaulted to 60 by Uri#create_connection.
|
37
|
+
# :connection => The HTTP Connection object to use. This is how a keep-alive connection can be
|
38
|
+
# used for multiple requests.
|
39
|
+
# :cache_store => The object which should be used as cache store for cacheable responses. If not supplied, caching will be disabled.
|
40
|
+
# :callback => A Hash whose keys are the response codes (or Range of response codes),
|
41
|
+
# and the values are the callback functions to be executed.
|
42
|
+
# eg: { <response code> => lambda { |response| some_operation } }
|
43
|
+
# The following options are Net::HTTP specific config options
|
44
|
+
# :detailed_http_logging => nil/$stdout/$stderr or File/Logger/IO object. Defaults to nil (recommended).
|
45
|
+
# *WARNING* : detailed_http_logging causes a serious security hole. Never use it in production code.
|
46
|
+
# :verify_mode => The verification mode to be used for Net::HTTP https connections. Defaults to OpenSSL::SSL::VERIFY_PEER
|
47
|
+
# :ca_path => The path to the certificates
|
48
|
+
def initialize(wrest_uri, http_request_klass, parameters = {}, body = nil, headers = {}, options = {}) # rubocop:disable Metrics/ParameterLists
|
49
|
+
setup_request_state!(body, headers, parameters, wrest_uri)
|
50
|
+
setup_options_state!(options)
|
51
|
+
@detailed_http_logging = options[:detailed_http_logging]
|
52
|
+
@follow_redirects = (@options[:follow_redirects] ||= false)
|
53
|
+
@follow_redirects_count = (@options[:follow_redirects_count] ||= 0)
|
54
|
+
@follow_redirects_limit = (@options[:follow_redirects_limit] ||= 5)
|
55
|
+
@callback = @options[:callback] || Wrest::Callback.new({})
|
56
|
+
@callback = @callback.merge(Wrest::Callback.new(@options[:callback_block] || {}))
|
57
|
+
@http_request = build_request(http_request_klass, @uri, @parameters, @headers)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Makes a request, runs the appropriate callback if any and
|
61
|
+
# returns a Wrest::Native::Response.
|
62
|
+
#
|
63
|
+
# Data about the request is and logged to Wrest.logger
|
64
|
+
# The log entry contains the following information:
|
65
|
+
#
|
66
|
+
# <- indicates a request
|
67
|
+
# -> indicates a response
|
68
|
+
#
|
69
|
+
# The type of request is mentioned in caps, followed by a hash
|
70
|
+
# uniquely identifying a particular request/response pair.
|
71
|
+
# In a multi-process or multi-threaded scenario, this can be used
|
72
|
+
# to identify request-response pairs.
|
73
|
+
#
|
74
|
+
# The request hash is followed by a connection hash; requests using the
|
75
|
+
# same connection (effectively a keep-alive connection) will have the
|
76
|
+
# same connection hash.
|
77
|
+
#
|
78
|
+
# Passing nil for either username or password will skip HTTP authentication
|
79
|
+
#
|
80
|
+
# This is followed by the response code, the payload size and the time taken.
|
81
|
+
def invoke
|
82
|
+
response = nil
|
83
|
+
setup_connection!
|
84
|
+
|
85
|
+
response = execute_request(response)
|
86
|
+
|
87
|
+
execute_callback_if_any(response)
|
88
|
+
|
89
|
+
@follow_redirects ? response.follow(@options) : response
|
90
|
+
rescue Timeout::Error => e
|
91
|
+
raise Wrest::Exceptions::Timeout, e
|
92
|
+
end
|
93
|
+
|
94
|
+
# :nodoc:
|
95
|
+
def build_request(request_klass, uri, parameters, headers)
|
96
|
+
if uri.query.empty?
|
97
|
+
request_klass.new(parameters.empty? ? uri.uri_path.to_s : "#{uri.uri_path}?#{Utils.hash_to_param(parameters)}", headers)
|
98
|
+
else
|
99
|
+
request_klass.new(
|
100
|
+
parameters.empty? ? "#{uri.uri_path}?#{uri.query}" : "#{uri.uri_path}?#{uri.query}&#{Utils.hash_to_param(parameters)}", headers
|
101
|
+
)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# :nodoc:
|
106
|
+
def do_request
|
107
|
+
@connection.request(@http_request, @body)
|
108
|
+
end
|
109
|
+
|
110
|
+
# :nodoc:
|
111
|
+
def execute_callback_if_any(actual_response)
|
112
|
+
@callback.execute(actual_response)
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def setup_connection!
|
118
|
+
@connection ||= @uri.create_connection(timeout: timeout, verify_mode: verify_mode, ca_path: ca_path)
|
119
|
+
@connection.set_debug_output @detailed_http_logging
|
120
|
+
http_request.basic_auth(username, password) unless username.nil? || password.nil?
|
121
|
+
end
|
122
|
+
|
123
|
+
def execute_request(response)
|
124
|
+
prefix = "#{http_request.method} #{hash} #{@connection.hash} #{Thread.current.object_id}"
|
125
|
+
|
126
|
+
log_before_request(prefix)
|
127
|
+
time = Benchmark.realtime { response = Wrest::Native::Response.new(do_request) }
|
128
|
+
log_after_request(prefix, time)
|
129
|
+
|
130
|
+
response
|
131
|
+
end
|
132
|
+
|
133
|
+
def log_after_request(prefix, time)
|
134
|
+
Wrest.logger.debug "<- (#{prefix}) Time: #{time}"
|
135
|
+
end
|
136
|
+
|
137
|
+
def log_before_request(prefix)
|
138
|
+
Wrest.logger.debug "<- (#{prefix}) #{@uri.protocol}://#{@uri.host}:#{@uri.port}#{@http_request.path}"
|
139
|
+
Wrest.logger.debug "<- (#{prefix}) Body: #{@body}"
|
140
|
+
end
|
141
|
+
|
142
|
+
def setup_request_state!(body, headers, parameters, wrest_uri)
|
143
|
+
@uri = wrest_uri
|
144
|
+
@headers = headers.transform_keys(&:to_s)
|
145
|
+
@parameters = parameters
|
146
|
+
@body = body
|
147
|
+
end
|
148
|
+
|
149
|
+
def setup_options_state!(options)
|
150
|
+
@options = options.clone
|
151
|
+
@username = @options[:username]
|
152
|
+
@password = @options[:password]
|
153
|
+
@timeout = @options[:timeout]
|
154
|
+
@connection = @options[:connection]
|
155
|
+
@cache_store = @options[:cache_store]
|
156
|
+
@verify_mode = @options[:verify_mode]
|
157
|
+
@ca_path = @options[:ca_path]
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|