class OpenprojectApi::Api

Attributes

apikey[RW]
endpoint[RW]

Public Class Methods

new(endpoint:, apikey:) click to toggle source
# File lib/openproject_api/api.rb, line 12
def initialize(endpoint:, apikey:)
        self.endpoint = endpoint
        self.apikey   = apikey
end

Public Instance Methods

delete(resource, *args) click to toggle source
# File lib/openproject_api/api.rb, line 62
def delete(resource, *args)
        request(resource, *args) do |uri|
                Net::HTTP::Delete.new(uri.request_uri)
        end
end
get(resource, *args) click to toggle source
# File lib/openproject_api/api.rb, line 36
def get(resource, *args)
        request(resource, *args) do |uri|
                Net::HTTP::Get.new(uri.request_uri)
        end
end
patch(resource, body, *args) click to toggle source
# File lib/openproject_api/api.rb, line 52
def patch(resource, body, *args)
        request(resource, *args) do |uri|
                Net::HTTP::Patch.new(uri.request_uri).tap do |request|
                        request['Content-Type'] = 'application/json'
                        request['Accept'      ] = 'application/json'
                        request.body            = body.to_json
                end
        end
end
post(resource, body, *args) click to toggle source
# File lib/openproject_api/api.rb, line 42
def post(resource, body, *args)
        request(resource, *args) do |uri|
                Net::HTTP::Post.new(uri.request_uri).tap do |request|
                        request['Content-Type'] = 'application/json'
                        request['Accept'      ] = 'application/json'
                        request.body            = body.to_json
                end
        end
end
request(resource, query: {}) { |uri| ... } click to toggle source
# File lib/openproject_api/api.rb, line 17
def request(resource, query: {}, &block)
        uri = URI.join(endpoint, resource)
        uri.query = URI.encode_www_form(query)
        
        response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme=='https') do |http|
                request = yield(uri)
                
                request.basic_auth('apikey', apikey)
                
                http.request(request)
        end
        
        if response.is_a?(Net::HTTPSuccess)
                ObjectifiedHash.new(JSON.parse(response.body))
        else
                response.error!
        end
end