Sha256: 232cffae18b44b86e5e74d233ade036129a6204127a9d1b15e0808132685f031

Contents?: true

Size: 1.5 KB

Versions: 1

Compression:

Stored size: 1.5 KB

Contents

module MWS
  module API
    # Base Class
    class Base
      attr_reader :connection, :uri, :version, :verb

      # TODO: Temporary solution, move to configuration
      DEFAULT_TIMEOUT = 2000

      def initialize(connection)
        @verb ||= :get
        @connection = connection
      end

      def call(action, params = {})
        @verb ||= params.delete(:verb)
        query = build_query_from_params(action, params)

        case @verb.to_s.upcase
        when 'GET'
          HTTParty.get(query.request_uri, http_request_options)
        when 'POST'
          HTTParty.post(query.request_uri, (params[:request_params] || {}).merge(http_request_options))
        end
      end

      def build_query_from_params(action, params)
        Query.new(verb: @verb,
                  uri: @uri,
                  host: @connection.host,
                  aws_access_key_id: @connection.aws_access_key_id,
                  aws_secret_access_key: @connection.aws_secret_access_key,
                  seller_id: @connection.seller_id,
                  mws_auth_token: @connection.mws_auth_token,
                  action: action.to_s.camelize,
                  version: @version,
                  params: params.except(:request_params))
      end

      def method_missing(name, *args)
        if self.class::ACTIONS.include?(name)
          call(name, *args)
        else
          super
        end
      end

      def http_request_options
        {
          timeout: DEFAULT_TIMEOUT
        }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mws_rb-0.0.6 lib/mws/api/base.rb