lib/berkshelf/api_client/connection.rb in berkshelf-api-client-3.0.0 vs lib/berkshelf/api_client/connection.rb in berkshelf-api-client-4.0.0
- old
+ new
@@ -1,11 +1,11 @@
-require 'faraday'
+require 'berkshelf/ridley_compat'
module Berkshelf::APIClient
require_relative 'errors'
- class Connection < Faraday::Connection
+ class Connection
# @return [String]
attr_reader :url
# @return [Integer]
# how many retries to attempt on HTTP requests
@@ -24,59 +24,32 @@
# @option options [Integer] :retries (3)
# how many retries to perform before giving up
# @option options [Float] :retry_interval (0.5)
# how long to wait (in seconds) between each retry
def initialize(url, options = {})
+ # it looks like Faraday mutates the URI argument it is given, when we ripped Faraday out of this
+ # API it stopped doing that. this may or may not be a breaking change (it broke some fairly
+ # brittle berkshelf tests). if it causes too much berkshelf chaos we could revert by uncommenting
+ # the next line. as it is removing this behavior feels more like fixing a bug.
+ #@url = url.normalize! if url.is_a?(Addressable::URI)
options = {retries: 3, retry_interval: 0.5, open_timeout: 30, timeout: 30}.merge(options)
- @url = url
- @retries = options.delete(:retries)
- @retry_interval = options.delete(:retry_interval)
+ options[:server_url] = url
- options[:builder] ||= Faraday::RackBuilder.new do |b|
- b.response :parse_json
- b.request :retry,
- max: self.retries,
- interval: self.retry_interval,
- exceptions: [
- Faraday::Error::TimeoutError,
- Errno::ETIMEDOUT
- ]
-
- b.adapter :httpclient
- end
-
- open_timeout = options.delete(:open_timeout)
- timeout = options.delete(:timeout)
- super(self.url, options)
- @options[:open_timeout] = open_timeout
- @options[:timeout] = timeout
+ @client = Berkshelf::RidleyCompatJSON.new(**options)
end
# Retrieves the entire universe of known cookbooks from the API source
#
# @raise [APIClient::TimeoutError]
#
# @return [Array<APIClient::RemoteCookbook>]
def universe
- response = get("universe")
+ response = @client.get("universe")
- case response.status
- when 200
- [].tap do |cookbooks|
- response.body.each do |name, versions|
- versions.each { |version, attributes| cookbooks << RemoteCookbook.new(name, version, attributes) }
- end
+ [].tap do |cookbooks|
+ response.each do |name, versions|
+ versions.each { |version, attributes| cookbooks << RemoteCookbook.new(name, version, attributes) }
end
- when 404
- raise ServiceNotFound, "service not found at: #{url}"
- when 500..504
- raise ServiceUnavaiable, "service unavailable at: #{url}"
- else
- raise BadResponse, "bad response #{response.inspect}"
end
- rescue Faraday::Error::TimeoutError, Errno::ETIMEDOUT
- raise TimeoutError, "Unable to connect to: #{url}"
- rescue Faraday::Error::ConnectionFailed => ex
- raise ServiceUnavaiable, ex
end
end
end