Sha256: 1dc25d731e264ac6fdf894ef2c6fcf75f99e8536c1ffe57c61b3b968ca5f21ba

Contents?: true

Size: 1.68 KB

Versions: 1

Compression:

Stored size: 1.68 KB

Contents

require 'faraday'
require 'typhoeus'

module Panda
  module Adapter
    class Faraday
      
      def initialize(api_url)
        @api_url = api_url
      end
      
      def get(request_uri, params)
        rescue_json_parsing do
          response = connection.get do |req|
            req.url File.join(connection.path_prefix, request_uri), params
          end.body
        end
      end

      def post(request_uri, params)
        # multipart upload
        if (f=params['file']) && f.is_a?(File)
          params['file'] = ::Faraday::UploadIO.new(f.path, 'multipart/form-data')
        end

        rescue_json_parsing do
          connection.post do |req|
            req.url File.join(connection.path_prefix, request_uri)
            req.body = params
          end.body
        end
      end

      def put(request_uri, params)
        rescue_json_parsing do
          connection.put do |req|
            req.url File.join(connection.path_prefix, request_uri)
            req.body = params
          end.body
        end
      end

      def delete(request_uri, params)
        rescue_json_parsing do
          connection.delete do |req|
            req.url File.join(connection.path_prefix, request_uri), params
          end.body
        end
      end
      
      private
      
      def connection
        @conn ||= ::Faraday.new(:url => @api_url) do |builder|
          builder.request :multipart
          builder.request :url_encoded
          builder.adapter :typhoeus
        end
      end

      def rescue_json_parsing(&block)
        begin
          MultiJson.decode(yield)
        rescue MultiJson::DecodeError => e
          raise(ServiceNotAvailable)
        end
      end
      
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
panda-1.5.0 lib/panda/adapters/faraday.rb