Sha256: aa5635fe929492ce9a424691f98e17bb3f3100756cd236dcf25e9553980b32cb

Contents?: true

Size: 1.24 KB

Versions: 5

Compression:

Stored size: 1.24 KB

Contents

module Troo
  module API
    class Request
      class << self
        # @param  [Symbol]
        # @param  [String]
        # @param  [Hash]
        # @return [Response, ErrorResponse]
        def make(verb, uri, query = {})
          new(verb, uri, query).make
        end
      end

      # @param  [Symbol]
      # @param  [String]
      # @param  [Hash]
      # @return [Troo::API::Request]
      def initialize(verb, uri, query = {})
        @verb, @uri, @query = verb, uri, query
      end

      # @return [Response, ErrorResponse]
      def make
        @request ||= request
      rescue RestClient::Exception => e
        ErrorResponse.new(body: e.http_body, code: e.http_code)
      rescue SocketError, Errno::ECONNREFUSED
        ErrorResponse.new(body: 'Cannot reach Trello.', code: 0)
      end

      private

      attr_reader :query, :uri, :verb

      def request
        RestClient::Request.execute(headers: Headers.build!(uri),
                                    payload: query,
                                    timeout: 10,
                                    method:  verb,
                                    url:     uri) do |response|
          Responder.build(body: response.body, code: response.code)
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
troo-0.0.15 lib/troo/api/request.rb
troo-0.0.14 lib/troo/api/request.rb
troo-0.0.13 lib/troo/api/request.rb
troo-0.0.12 lib/troo/api/request.rb
troo-0.0.11 lib/troo/api/request.rb