FHG-IMW/epo-ops

View on GitHub
lib/epo_ops/client.rb

Summary

Maintainability
A
35 mins
Test Coverage
module EpoOps

  # This is a wrapper for OAuth
  class Client


    # @return [OAuth2::Response]
    # @option options [Hash] :params query parameter for the request
    # @option options [Hash, String] :body the body of the request
    # @option options [Hash] :headers http request headers
    # @raise [EpoOps::Error] API Error if request was not successful
    def self.request(verb, url, options = {})
      EpoOps::Logger.debug("Sending Request: #{verb} #{url}")
      response = case EpoOps.config.authentication
                  when :oauth then do_oauth_request(verb, url, options)
                  when :plain then do_plain_request(verb,url,options)
                  else raise('Unknown authentication strategy!')
                 end
      fail Error.from_response(response) unless response.status == 200
      response
    rescue Error::AccessTokenExpired
      EpoOps.config.token_store.reset
      request(verb, url, options)
    end

    private

    # Make an oauth request to the EPO API
    # @return [OAuth2::Response]
    def self.do_oauth_request(verb, url, options = {})
      token = EpoOps.config.token_store.token
      token.request(verb, url, options)
    end

    # Make an anonymous request to the EPO API
    # @return [OAuth2::Response] OAuth2::Reponse is used for convenience and consistency
    def self.do_plain_request(verb, url, options = {})
      conn = Faraday.new("https://ops.epo.org/")
      url = conn.build_url(url, options[:params]).to_s
      response = conn.run_request(verb,url,options[:body], options[:header])
      OAuth2::Response.new(response)
    end
  end
end