Class: OpenprojectApi::Api

Inherits:
Object
  • Object
show all
Defined in:
lib/openproject_api/api.rb

Direct Known Subclasses

Client

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(endpoint:, apikey:) ⇒ Api

Returns a new instance of Api.



12
13
14
15
# File 'lib/openproject_api/api.rb', line 12

def initialize(endpoint:, apikey:)
	self.endpoint = endpoint
	self.apikey   = apikey
end

Instance Attribute Details

#apikeyObject

Returns the value of attribute apikey.



10
11
12
# File 'lib/openproject_api/api.rb', line 10

def apikey
  @apikey
end

#endpointObject

Returns the value of attribute endpoint.



9
10
11
# File 'lib/openproject_api/api.rb', line 9

def endpoint
  @endpoint
end

Instance Method Details

#delete(resource, *args) ⇒ Object



62
63
64
65
66
# 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) ⇒ Object



36
37
38
39
40
# 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) ⇒ Object



52
53
54
55
56
57
58
59
60
# 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) ⇒ Object



42
43
44
45
46
47
48
49
50
# 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: {}, &block) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 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