lib/pupa/processor/client.rb in pupa-0.0.8 vs lib/pupa/processor/client.rb in pupa-0.0.9
- old
+ new
@@ -2,10 +2,12 @@
require 'faraday_middleware'
require 'faraday_middleware/response_middleware'
require 'pupa/processor/middleware/logger'
require 'pupa/processor/middleware/parse_html'
+require 'pupa/processor/middleware/parse_json'
+require 'pupa/processor/middleware/raise_error'
require 'pupa/refinements/faraday_middleware'
begin
require 'multi_xml'
rescue LoadError
@@ -16,31 +18,36 @@
class Processor
# An HTTP client factory.
class Client
# Returns a configured Faraday HTTP client.
#
- # In order to automatically parse XML responses, you must `require 'multi_xml'`.
+ # To automatically parse XML responses, you must `require 'multi_xml'`.
#
+ # Memcached support depends on the `dalli` gem.
+ #
# @param [String] cache_dir a directory or a Memcached address
# (e.g. `memcached://localhost:11211`) in which to cache requests
# @param [Integer] expires_in the cache's expiration time in seconds
# @param [String] level the log level
# @return [Faraday::Connection] a configured Faraday HTTP client
def self.new(cache_dir: nil, expires_in: 86400, level: 'INFO') # 1 day
Faraday.new do |connection|
connection.request :url_encoded
connection.use Middleware::Logger, Logger.new('faraday', level: level)
+ connection.use Middleware::RaiseError # useful for breaking concurrent requests
+ # @see http://tools.ietf.org/html/rfc4627
+ connection.use Middleware::ParseJson, content_type: /\bjson$/
+
# @see http://tools.ietf.org/html/rfc2854
# @see http://tools.ietf.org/html/rfc3236
- connection.use Middleware::ParseHtml, content_type: %w(text/html application/xhtml+xml)
+ if defined?(Nokogiri)
+ connection.use Middleware::ParseHtml, content_type: %w(text/html application/xhtml+xml)
+ end
- # @see http://tools.ietf.org/html/rfc4627
- connection.use FaradayMiddleware::ParseJson, content_type: /\bjson$/
-
+ # @see http://tools.ietf.org/html/rfc3023
if defined?(MultiXml)
- # @see http://tools.ietf.org/html/rfc3023
connection.use FaradayMiddleware::ParseXml, content_type: /\bxml$/
end
if cache_dir
connection.response :caching do
@@ -51,10 +58,14 @@
ActiveSupport::Cache::FileStore.new(cache_dir, expires_in: expires_in)
end
end
end
- connection.adapter Faraday.default_adapter # must be last
+ if defined?(Typhoeus)
+ connection.adapter :typhoeus
+ else
+ connection.adapter Faraday.default_adapter # must be last
+ end
end
end
end
end
end