Sha256: 8ccdf4bd3ba9d08a769e26f50405b404e821e98768d3eb9deeddc32244f01c10

Contents?: true

Size: 1.98 KB

Versions: 3

Compression:

Stored size: 1.98 KB

Contents

require 'net/https'

module Dimelo::CCP
  module API
    class Connection

      class << self

        def from_uri(uri, options = {})
          options.merge!(:use_ssl => uri.scheme == 'https')
          pool[uri_key(uri)] ||= new(uri.to_s, options)
        end

        private

        def uri_key(uri)
          "#{uri.scheme}://#{uri.host}:#{uri.port}"
        end

        def pool
          @pool ||= {}
        end

      end

      def initialize(url, options={})
        @url = url
        @http_options = options
        initialize_client
      end

      def perform(method, uri, payload={})
        @client.send(method, uri, payload) do |req|
          req.headers[:accept] = 'application/json'
          req.headers[:user_agent] = user_agent
        end
      end

      private

      def timeout
        @http_options[:timeout] || 10
      end

      def user_agent_details
        strip_non_ascii(@http_options[:user_agent] || '')
      end

      def strip_non_ascii(setting, replacement = '')
        setting.gsub(/\P{ASCII}/, replacement)
      end

      def user_agent
        "DimeloAPI/#{Dimelo::CCP::API::VERSION} " \
          << (user_agent_details.present? ? "(#{user_agent_details}) " : '') \
          << "Faraday/#{Faraday::VERSION} " \
          << "Ruby/#{RUBY_VERSION}"
      end

      def client_options
        {}.tap do |opts|
          opts[:request] = request_options
          opts[:ssl] = ssl_options if @http_options[:use_ssl]
        end
      end

      def request_options
        { timeout: timeout, open_timeout: timeout }
      end

      def ssl_options
        { verify_mode: OpenSSL::SSL::VERIFY_NONE, verify_depth: 5 }
      end

      def initialize_client
        @client = Faraday.new(@url, client_options) do |faraday|
          faraday.request :multipart
          faraday.request :url_encoded
          faraday.adapter Faraday.default_adapter #adapter should be last in the list https://github.com/lostisland/faraday/issues/161
        end
      end

    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dimelo_ccp_api-0.4.3 lib/dimelo/ccp/api/connection.rb
dimelo_ccp_api-0.4.2 lib/dimelo/ccp/api/connection.rb
dimelo_ccp_api-0.4.1 lib/dimelo/ccp/api/connection.rb