dmao_api 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/dmao/api/entity.rb +163 -0
- data/lib/dmao/api/errors/invalid_person.rb +21 -0
- data/lib/dmao/api/errors/invalid_person_id.rb +19 -0
- data/lib/dmao/api/errors/person_not_found.rb +17 -0
- data/lib/dmao/api/organisation_unit.rb +9 -134
- data/lib/dmao/api/person.rb +56 -0
- data/lib/dmao/api/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e7257d738325683b5729c978624513908db362c
|
4
|
+
data.tar.gz: ddf6f8f8e95bb525f749ab6000659560079673a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c5765835fb5a8f277ccc48bd093878b82d5a6b477cd77e5a4a8ec0219cfbb3aca471fde00d29dfdde3bacfa74b2faaf1f44d52534b9b6e3beea81612efbc8e8
|
7
|
+
data.tar.gz: 19656c8cbdb4ccf1f731b8d3ff22688d273cf62d0f4083fb3f0dac935ae572e1ab18f015b64af20d9533329ac5c37d83b0572005b3b86f515a41f2034b428b52
|
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'dmao/api/base'
|
2
|
+
|
3
|
+
require 'dmao/api/errors/institution_not_found'
|
4
|
+
require 'dmao/api/errors/invalid_system_uuid'
|
5
|
+
require 'dmao/api/errors/invalid_response_length'
|
6
|
+
|
7
|
+
module DMAO
|
8
|
+
module API
|
9
|
+
|
10
|
+
class Entity < Base
|
11
|
+
|
12
|
+
ENDPOINT = ''
|
13
|
+
NOT_FOUND_ERROR = nil
|
14
|
+
INVALID_ID_ERROR = nil
|
15
|
+
INVALID_ENTITY_CLASS = nil
|
16
|
+
INVALID_ENTITY_ERROR_MESSAGE = ""
|
17
|
+
VALID_ATTRIBUTES = []
|
18
|
+
|
19
|
+
def self.find_by_system_uuid system_uuid
|
20
|
+
|
21
|
+
validate_system_uuid system_uuid
|
22
|
+
|
23
|
+
response = self.api["#{self::ENDPOINT}?system_uuid=#{system_uuid}"].get
|
24
|
+
|
25
|
+
response_data = JSON.parse(response)["data"]
|
26
|
+
|
27
|
+
raise self::NOT_FOUND_ERROR.new if response_data.length == 0
|
28
|
+
raise DMAO::API::Errors::InvalidResponseLength.new("Expected 1 element in response there were #{response_data.length}") if response_data.length != 1
|
29
|
+
|
30
|
+
data = response_data[0]
|
31
|
+
|
32
|
+
instance_from_api_data data
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.all
|
37
|
+
|
38
|
+
begin
|
39
|
+
response = self.api[self::ENDPOINT].get
|
40
|
+
rescue RestClient::NotFound
|
41
|
+
raise DMAO::API::Errors::InstitutionNotFound.new
|
42
|
+
end
|
43
|
+
|
44
|
+
entities = []
|
45
|
+
|
46
|
+
response_data = JSON.parse(response)["data"]
|
47
|
+
|
48
|
+
return entities if response_data.length == 0
|
49
|
+
|
50
|
+
response_data.each do |data|
|
51
|
+
|
52
|
+
entities.push instance_from_api_data(data)
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
entities
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.get id
|
61
|
+
|
62
|
+
validate_id id
|
63
|
+
|
64
|
+
begin
|
65
|
+
response = self.api["#{self::ENDPOINT}/#{id}"].get
|
66
|
+
rescue RestClient::NotFound
|
67
|
+
raise self::NOT_FOUND_ERROR.new
|
68
|
+
end
|
69
|
+
|
70
|
+
instance_from_response response
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.create attributes
|
75
|
+
|
76
|
+
validate_attributes attributes
|
77
|
+
|
78
|
+
begin
|
79
|
+
response = self.api[self::ENDPOINT].post attributes.to_json
|
80
|
+
rescue RestClient::NotFound
|
81
|
+
raise DMAO::API::Errors::InstitutionNotFound.new
|
82
|
+
rescue RestClient::UnprocessableEntity => e
|
83
|
+
handle_unprocessable_entity e
|
84
|
+
end
|
85
|
+
|
86
|
+
instance_from_response response
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.update id, attributes
|
91
|
+
|
92
|
+
validate_id id
|
93
|
+
|
94
|
+
validate_attributes attributes
|
95
|
+
|
96
|
+
begin
|
97
|
+
response = self.api["#{self::ENDPOINT}/#{id}"].patch attributes.to_json
|
98
|
+
rescue RestClient::NotFound
|
99
|
+
raise self::NOT_FOUND_ERROR.new
|
100
|
+
rescue RestClient::UnprocessableEntity => e
|
101
|
+
handle_unprocessable_entity e
|
102
|
+
end
|
103
|
+
|
104
|
+
instance_from_response response
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.delete id
|
109
|
+
|
110
|
+
validate_id id
|
111
|
+
|
112
|
+
begin
|
113
|
+
self.api["#{self::ENDPOINT}/#{id}"].delete
|
114
|
+
rescue RestClient::NotFound
|
115
|
+
raise self::NOT_FOUND_ERROR.new
|
116
|
+
rescue RestClient::UnprocessableEntity => e
|
117
|
+
handle_unprocessable_entity e
|
118
|
+
end
|
119
|
+
|
120
|
+
true
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
def self.instance_from_response response_body
|
125
|
+
|
126
|
+
data = JSON.parse(response_body)["data"]
|
127
|
+
|
128
|
+
instance_from_api_data data
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.handle_unprocessable_entity error_response
|
133
|
+
|
134
|
+
errors = JSON.parse(error_response.response.body)["errors"]
|
135
|
+
|
136
|
+
raise self::INVALID_ENTITY_CLASS.new(self::INVALID_ENTITY_ERROR_MESSAGE, errors)
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
def self.validate_id id
|
141
|
+
if id.nil? || id.to_s.empty?
|
142
|
+
raise self::INVALID_ID_ERROR.new
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def self.validate_system_uuid system_uuid
|
147
|
+
if system_uuid.nil? || system_uuid.to_s.empty?
|
148
|
+
raise DMAO::API::Errors::InvalidSystemUUID.new
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def self.validate_attributes attributes
|
153
|
+
attributes.keep_if { |k, _v| self::VALID_ATTRIBUTES.include? k }
|
154
|
+
end
|
155
|
+
|
156
|
+
def self.instance_from_api_data _data
|
157
|
+
raise "Should be overridden in extending class"
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class InvalidPerson < StandardError
|
6
|
+
|
7
|
+
attr_reader :errors
|
8
|
+
|
9
|
+
def initialize(msg="Invalid person details passed in, please see errors.", errors=nil)
|
10
|
+
|
11
|
+
@errors = errors
|
12
|
+
|
13
|
+
super(msg)
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,16 +1,20 @@
|
|
1
1
|
require 'rest-client'
|
2
|
-
require 'dmao/api/
|
3
|
-
require 'dmao/api/errors/institution_not_found'
|
2
|
+
require 'dmao/api/entity'
|
4
3
|
require 'dmao/api/errors/invalid_parent_id'
|
5
4
|
require 'dmao/api/errors/invalid_organisation_unit'
|
5
|
+
require 'dmao/api/errors/invalid_organisation_unit_id'
|
6
6
|
require 'dmao/api/errors/organisation_unit_not_found'
|
7
|
-
require 'dmao/api/errors/invalid_system_uuid'
|
8
|
-
require 'dmao/api/errors/invalid_response_length'
|
9
7
|
|
10
8
|
module DMAO
|
11
9
|
module API
|
12
10
|
|
13
|
-
class OrganisationUnit <
|
11
|
+
class OrganisationUnit < Entity
|
12
|
+
|
13
|
+
ENDPOINT = 'organisation_units'
|
14
|
+
NOT_FOUND_ERROR = DMAO::API::Errors::OrganisationUnitNotFound
|
15
|
+
INVALID_ID_ERROR = DMAO::API::Errors::InvalidOrganisationUnitID
|
16
|
+
INVALID_ENTITY_CLASS = DMAO::API::Errors::InvalidOrganisationUnit
|
17
|
+
INVALID_ENTITY_ERROR_MESSAGE = "Invalid person details, please see errors."
|
14
18
|
|
15
19
|
VALID_ATTRIBUTES = [:id, :institution_id, :name, :description, :url, :system_uuid, :system_modified_at, :isni, :unit_type, :parent_id]
|
16
20
|
attr_reader(*VALID_ATTRIBUTES)
|
@@ -33,119 +37,6 @@ module DMAO
|
|
33
37
|
|
34
38
|
end
|
35
39
|
|
36
|
-
def self.all
|
37
|
-
|
38
|
-
begin
|
39
|
-
response = self.api['organisation_units'].get
|
40
|
-
rescue RestClient::NotFound
|
41
|
-
raise DMAO::API::Errors::InstitutionNotFound.new
|
42
|
-
end
|
43
|
-
|
44
|
-
org_units = []
|
45
|
-
|
46
|
-
response_data = JSON.parse(response)["data"]
|
47
|
-
|
48
|
-
return org_units if response_data.length == 0
|
49
|
-
|
50
|
-
response_data.each do |data|
|
51
|
-
|
52
|
-
org_units.push instance_from_api_data(data)
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
org_units
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
def self.get id
|
61
|
-
|
62
|
-
validate_organisation_unit_id id
|
63
|
-
|
64
|
-
begin
|
65
|
-
response = self.api["organisation_units/#{id}"].get
|
66
|
-
rescue RestClient::NotFound
|
67
|
-
raise DMAO::API::Errors::OrganisationUnitNotFound.new
|
68
|
-
end
|
69
|
-
|
70
|
-
instance_from_response response
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
def self.find_by_system_uuid system_uuid
|
75
|
-
|
76
|
-
validate_system_uuid system_uuid
|
77
|
-
|
78
|
-
response = self.api["organisation_units?system_uuid=#{system_uuid}"].get
|
79
|
-
|
80
|
-
response_data = JSON.parse(response)["data"]
|
81
|
-
|
82
|
-
raise DMAO::API::Errors::OrganisationUnitNotFound.new if response_data.length == 0
|
83
|
-
raise DMAO::API::Errors::InvalidResponseLength.new("Expected 1 element in response there were #{response_data.length}") if response_data.length != 1
|
84
|
-
|
85
|
-
data = response_data[0]
|
86
|
-
|
87
|
-
instance_from_api_data data
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
def self.create attributes
|
92
|
-
|
93
|
-
validate_attributes attributes
|
94
|
-
|
95
|
-
begin
|
96
|
-
response = self.api['organisation_units'].post attributes.to_json
|
97
|
-
rescue RestClient::NotFound
|
98
|
-
raise DMAO::API::Errors::InstitutionNotFound.new
|
99
|
-
rescue RestClient::UnprocessableEntity => e
|
100
|
-
handle_unprocessable_entity e
|
101
|
-
end
|
102
|
-
|
103
|
-
instance_from_response response
|
104
|
-
|
105
|
-
end
|
106
|
-
|
107
|
-
def self.update id, attributes
|
108
|
-
|
109
|
-
validate_organisation_unit_id id
|
110
|
-
|
111
|
-
validate_attributes attributes
|
112
|
-
|
113
|
-
begin
|
114
|
-
response = self.api["organisation_units/#{id}"].patch attributes.to_json
|
115
|
-
rescue RestClient::NotFound
|
116
|
-
raise DMAO::API::Errors::OrganisationUnitNotFound.new
|
117
|
-
rescue RestClient::UnprocessableEntity => e
|
118
|
-
handle_unprocessable_entity e
|
119
|
-
end
|
120
|
-
|
121
|
-
instance_from_response response
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
def self.delete id
|
126
|
-
|
127
|
-
validate_organisation_unit_id id
|
128
|
-
|
129
|
-
begin
|
130
|
-
self.api["organisation_units/#{id}"].delete
|
131
|
-
rescue RestClient::NotFound
|
132
|
-
raise DMAO::API::Errors::OrganisationUnitNotFound.new
|
133
|
-
rescue RestClient::UnprocessableEntity => e
|
134
|
-
handle_unprocessable_entity e
|
135
|
-
end
|
136
|
-
|
137
|
-
true
|
138
|
-
|
139
|
-
end
|
140
|
-
|
141
|
-
def self.instance_from_response response_body
|
142
|
-
|
143
|
-
data = JSON.parse(response_body)["data"]
|
144
|
-
|
145
|
-
instance_from_api_data data
|
146
|
-
|
147
|
-
end
|
148
|
-
|
149
40
|
def self.instance_from_api_data data
|
150
41
|
|
151
42
|
parent_id = data["relationships"]["parent"]["data"].nil? ? nil : data["relationships"]["parent"]["data"]["id"]
|
@@ -167,22 +58,6 @@ module DMAO
|
|
167
58
|
|
168
59
|
end
|
169
60
|
|
170
|
-
def self.validate_attributes attributes
|
171
|
-
attributes.keep_if { |k, _v| VALID_ATTRIBUTES.include? k }
|
172
|
-
end
|
173
|
-
|
174
|
-
def self.validate_organisation_unit_id id
|
175
|
-
if id.nil? || id.to_s.empty?
|
176
|
-
raise DMAO::API::Errors::InvalidOrganisationUnitID.new
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
def self.validate_system_uuid system_uuid
|
181
|
-
if system_uuid.nil? || system_uuid.to_s.empty?
|
182
|
-
raise DMAO::API::Errors::InvalidSystemUUID.new
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
61
|
def self.handle_unprocessable_entity error_response
|
187
62
|
|
188
63
|
errors = JSON.parse(error_response.response.body)["errors"]
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'dmao/api/entity'
|
2
|
+
require 'dmao/api/errors/invalid_person'
|
3
|
+
require 'dmao/api/errors/invalid_person_id'
|
4
|
+
require 'dmao/api/errors/person_not_found'
|
5
|
+
|
6
|
+
module DMAO
|
7
|
+
module API
|
8
|
+
|
9
|
+
class Person < Entity
|
10
|
+
|
11
|
+
ENDPOINT = 'people'
|
12
|
+
NOT_FOUND_ERROR = DMAO::API::Errors::PersonNotFound
|
13
|
+
INVALID_ID_ERROR = DMAO::API::Errors::InvalidPersonID
|
14
|
+
INVALID_ENTITY_CLASS = DMAO::API::Errors::InvalidPerson
|
15
|
+
INVALID_ENTITY_ERROR_MESSAGE = "Invalid person details, please see errors."
|
16
|
+
|
17
|
+
VALID_ATTRIBUTES = [:id, :institution_id, :first_name, :last_name, :email, :image_link, :orcid, :system_uuid, :system_modified_at]
|
18
|
+
|
19
|
+
attr_reader(*VALID_ATTRIBUTES)
|
20
|
+
|
21
|
+
def initialize(attributes)
|
22
|
+
|
23
|
+
@id = attributes[:id]
|
24
|
+
@institution_id = attributes[:institution_id]
|
25
|
+
@first_name = attributes[:first_name]
|
26
|
+
@last_name = attributes[:last_name]
|
27
|
+
@email = attributes[:email]
|
28
|
+
@image_link = attributes[:image_link]
|
29
|
+
@orcid = attributes[:orcid]
|
30
|
+
@system_uuid = attributes[:system_uuid]
|
31
|
+
@system_modified_at = attributes[:system_modified_at]
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.instance_from_api_data data
|
36
|
+
|
37
|
+
attributes = {
|
38
|
+
id: data["id"],
|
39
|
+
institution_id: data["relationships"]["institution"]["data"]["id"],
|
40
|
+
first_name: data["attributes"]["first-name"],
|
41
|
+
last_name: data["attributes"]["last-name"],
|
42
|
+
email: data["attributes"]["email"],
|
43
|
+
image_link: data["attributes"]["image-link"],
|
44
|
+
orcid: data["attributes"]["orcid"],
|
45
|
+
system_uuid: data["attributes"]["system-uuid"],
|
46
|
+
system_modified_at: data["attributes"]["system-modified-at"]
|
47
|
+
}
|
48
|
+
|
49
|
+
new(attributes)
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
data/lib/dmao/api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dmao_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Robinson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -153,16 +153,21 @@ files:
|
|
153
153
|
- dmao_api.gemspec
|
154
154
|
- lib/dmao/api/base.rb
|
155
155
|
- lib/dmao/api/configuration.rb
|
156
|
+
- lib/dmao/api/entity.rb
|
156
157
|
- lib/dmao/api/errors/institution_not_found.rb
|
157
158
|
- lib/dmao/api/errors/invalid_api_base_url.rb
|
158
159
|
- lib/dmao/api/errors/invalid_api_token.rb
|
159
160
|
- lib/dmao/api/errors/invalid_organisation_unit.rb
|
160
161
|
- lib/dmao/api/errors/invalid_organisation_unit_id.rb
|
161
162
|
- lib/dmao/api/errors/invalid_parent_id.rb
|
163
|
+
- lib/dmao/api/errors/invalid_person.rb
|
164
|
+
- lib/dmao/api/errors/invalid_person_id.rb
|
162
165
|
- lib/dmao/api/errors/invalid_response_length.rb
|
163
166
|
- lib/dmao/api/errors/invalid_system_uuid.rb
|
164
167
|
- lib/dmao/api/errors/organisation_unit_not_found.rb
|
168
|
+
- lib/dmao/api/errors/person_not_found.rb
|
165
169
|
- lib/dmao/api/organisation_unit.rb
|
170
|
+
- lib/dmao/api/person.rb
|
166
171
|
- lib/dmao/api/version.rb
|
167
172
|
- lib/dmao_api.rb
|
168
173
|
homepage: https://github.com/lulibrary/DMAO-API-rb
|