]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/aviator/feature/faraday/adapter/net_http_persistent.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / aviator / feature / faraday / adapter / net_http_persistent.rb
diff --git a/3rdparty/modules/aviator/feature/faraday/adapter/net_http_persistent.rb b/3rdparty/modules/aviator/feature/faraday/adapter/net_http_persistent.rb
new file mode 100644 (file)
index 0000000..e0cc958
--- /dev/null
@@ -0,0 +1,47 @@
+# Rely on autoloading instead of explicit require; helps avoid the "already
+# initialized constant" warning on Ruby 1.8.7 when NetHttp is refereced below.
+# require 'faraday/adapter/net_http'
+
+module Faraday
+  class Adapter
+    # Experimental adapter for net-http-persistent
+    class NetHttpPersistent < NetHttp
+      dependency 'net/http/persistent'
+
+      def net_http_connection(env)
+        if proxy = env[:request][:proxy]
+          proxy_uri = ::URI::HTTP === proxy[:uri] ? proxy[:uri].dup : ::URI.parse(proxy[:uri].to_s)
+          proxy_uri.user = proxy_uri.password = nil
+          # awful patch for net-http-persistent 2.8 not unescaping user/password
+          (class << proxy_uri; self; end).class_eval do
+            define_method(:user) { proxy[:user] }
+            define_method(:password) { proxy[:password] }
+          end if proxy[:user]
+        end
+        Net::HTTP::Persistent.new 'Faraday', proxy_uri
+      end
+
+      def perform_request(http, env)
+        http.request env[:url], create_request(env)
+      rescue Net::HTTP::Persistent::Error => error
+        if error.message.include? 'Timeout'
+          raise Faraday::Error::TimeoutError, error
+        elsif error.message.include? 'connection refused'
+          raise Faraday::Error::ConnectionFailed, error
+        else
+          raise
+        end
+      end
+
+      def configure_ssl(http, ssl)
+        http.verify_mode  = ssl_verify_mode(ssl)
+        http.cert_store   = ssl_cert_store(ssl)
+
+        http.certificate  = ssl[:client_cert]  if ssl[:client_cert]
+        http.private_key  = ssl[:client_key]   if ssl[:client_key]
+        http.ca_file      = ssl[:ca_file]      if ssl[:ca_file]
+        http.ssl_version  = ssl[:version]      if ssl[:version]
+      end
+    end
+  end
+end