Sha256: 5ecc8c0126701d5ff07cfb891ce6f683367b657711c8663ca9b4bed2ced51e78

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

module Mbsy
  class MbsyError < StandardError; end
  class BadRequestError < MbsyError; end
  class UnauthorizedError < MbsyError; end
  class RecordNotFound < MbsyError; end
  class ServerError < MbsyError; end
  class BadResponse < MbsyError; end

  class Base
    include HTTParty
    format :json
    default_timeout 30
    default_params :output => 'json'

    def self.element_name
      name.split(/::/).last.underscore
    end

    def self.api_url(method)
      Mbsy.site_uri + self.element_name + '/' + method
    end
 
    def self.call(method, params = {})
      response = JSON.parse(self.get(api_url(method), :query => params).body)['response']
      case response['code']
      when '200' # Nothing to do here...
      when '400'
        raise BadRequestError.new(response['errors']['error'])
      when '401'
        raise UnauthorizedError.new(response['errors']['error'])
      when '404'
        raise RecordNotFound.new(response['errors']['error'])
      when '500'
        raise ServerError.new(response['errors']['error'])
      else
        raise BadResponse.new(response: response)
      end

      response['data']
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
mbsy-1.1.3 lib/mbsy/resources/base.rb
mbsy-1.1.2 lib/mbsy/resources/base.rb
mbsy-1.1.1 lib/mbsy/resources/base.rb
mbsy-1.1.0 lib/mbsy/resources/base.rb