dmao_api 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dmao/api/dataset.rb +92 -0
- data/lib/dmao/api/dataset_file.rb +65 -0
- data/lib/dmao/api/dmp.rb +62 -0
- data/lib/dmao/api/entity.rb +12 -0
- data/lib/dmao/api/errors/action_unsupported.rb +17 -0
- data/lib/dmao/api/errors/dataset_file_not_found.rb +17 -0
- data/lib/dmao/api/errors/dataset_not_found.rb +17 -0
- data/lib/dmao/api/errors/dmp_not_found.rb +17 -0
- data/lib/dmao/api/errors/funder_not_found.rb +17 -0
- data/lib/dmao/api/errors/invalid_dataset.rb +21 -0
- data/lib/dmao/api/errors/invalid_dataset_file.rb +21 -0
- data/lib/dmao/api/errors/invalid_dataset_file_id.rb +19 -0
- data/lib/dmao/api/errors/invalid_dataset_id.rb +19 -0
- data/lib/dmao/api/errors/invalid_dmp.rb +21 -0
- data/lib/dmao/api/errors/invalid_dmp_id.rb +17 -0
- data/lib/dmao/api/errors/invalid_funder.rb +21 -0
- data/lib/dmao/api/errors/invalid_funder_id.rb +17 -0
- data/lib/dmao/api/errors/invalid_project.rb +21 -0
- data/lib/dmao/api/errors/invalid_project_id.rb +19 -0
- data/lib/dmao/api/errors/invalid_project_participant.rb +21 -0
- data/lib/dmao/api/errors/invalid_project_participant_id.rb +19 -0
- data/lib/dmao/api/errors/invalid_publication.rb +21 -0
- data/lib/dmao/api/errors/invalid_publication_dataset.rb +21 -0
- data/lib/dmao/api/errors/invalid_publication_dataset_id.rb +17 -0
- data/lib/dmao/api/errors/invalid_publication_id.rb +17 -0
- data/lib/dmao/api/errors/project_not_found.rb +17 -0
- data/lib/dmao/api/errors/project_participant_not_found.rb +17 -0
- data/lib/dmao/api/errors/publication_dataset_not_found.rb +17 -0
- data/lib/dmao/api/errors/publication_not_found.rb +17 -0
- data/lib/dmao/api/errors/unsupported_query_by_system_uuid.rb +17 -0
- data/lib/dmao/api/funder.rb +50 -0
- data/lib/dmao/api/organisation_unit.rb +4 -3
- data/lib/dmao/api/project.rb +101 -0
- data/lib/dmao/api/project_participant.rb +69 -0
- data/lib/dmao/api/publication.rb +95 -0
- data/lib/dmao/api/publication_dataset.rb +71 -0
- data/lib/dmao/api/version.rb +1 -1
- metadata +36 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb6855ebeb3df109d747a4e5153c91735df68bdd
|
4
|
+
data.tar.gz: 873620f2bd988a331dc6d6a8da2013ce4b77ce80
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1102a0b85199d723e567c34caefb160f20fc8769552580b67fa56c8f306059e02fc3dfd2d276de4fbdcafbbe64d9c43225ae249181fa8c46c03830cb0635c799
|
7
|
+
data.tar.gz: e5939a3a23114804ee4b1d3c87939a3047f8c33da6999dbf188ffb2a0a58056d27387e65671b0fc27ffceacd0cfd0dd2955d45e63f854eb8bf875865441dfc10
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'dmao/api/entity'
|
2
|
+
require 'dmao/api/errors/invalid_dataset'
|
3
|
+
require 'dmao/api/errors/invalid_dataset_id'
|
4
|
+
require 'dmao/api/errors/invalid_project_id'
|
5
|
+
require 'dmao/api/errors/invalid_organisation_unit_id'
|
6
|
+
require 'dmao/api/errors/dataset_not_found'
|
7
|
+
|
8
|
+
module DMAO
|
9
|
+
module API
|
10
|
+
|
11
|
+
class Dataset < Entity
|
12
|
+
|
13
|
+
ENDPOINT = 'datasets'
|
14
|
+
NOT_FOUND_ERROR = DMAO::API::Errors::DatasetNotFound
|
15
|
+
INVALID_ID_ERROR = DMAO::API::Errors::InvalidDatasetID
|
16
|
+
INVALID_ENTITY_CLASS = DMAO::API::Errors::InvalidDataset
|
17
|
+
INVALID_ENTITY_ERROR_MESSAGE = "Invalid dataset details, please see errors."
|
18
|
+
|
19
|
+
VALID_ATTRIBUTES = [
|
20
|
+
:id,
|
21
|
+
:institution_id,
|
22
|
+
:permanent_id,
|
23
|
+
:title,
|
24
|
+
:description,
|
25
|
+
:publisher,
|
26
|
+
:access,
|
27
|
+
:notes,
|
28
|
+
:creation_date,
|
29
|
+
:system_uuid,
|
30
|
+
:system_modified_at,
|
31
|
+
:project_id,
|
32
|
+
:owning_unit_id
|
33
|
+
]
|
34
|
+
|
35
|
+
attr_reader(*VALID_ATTRIBUTES)
|
36
|
+
|
37
|
+
def initialize(attributes)
|
38
|
+
|
39
|
+
@id = attributes[:id]
|
40
|
+
@institution_id = attributes[:institution_id]
|
41
|
+
@permanent_id = attributes[:permanent_id]
|
42
|
+
@title = attributes[:title]
|
43
|
+
@description = attributes[:description]
|
44
|
+
@publisher = attributes[:publisher]
|
45
|
+
@access = attributes[:access]
|
46
|
+
@notes = attributes[:notes]
|
47
|
+
@creation_date = attributes[:creation_date]
|
48
|
+
@system_uuid = attributes[:system_uuid]
|
49
|
+
@system_modified_at = attributes[:system_modified_at]
|
50
|
+
@project_id = attributes[:project_id]
|
51
|
+
@owning_unit_id = attributes[:owning_unit_id]
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.instance_from_api_data data
|
56
|
+
|
57
|
+
attributes = {
|
58
|
+
id: data["id"],
|
59
|
+
institution_id: data["relationships"]["institution"]["data"]["id"],
|
60
|
+
permanent_id: data["attributes"]["permanent-id"],
|
61
|
+
title: data["attributes"]["title"],
|
62
|
+
description: data["attributes"]["description"],
|
63
|
+
publisher: data["attributes"]["publisher"],
|
64
|
+
access: data["attributes"]["access"],
|
65
|
+
notes: data["attributes"]["notes"],
|
66
|
+
creation_date: data["attributes"]["creation-date"],
|
67
|
+
system_uuid: data["attributes"]["system-uuid"],
|
68
|
+
system_modified_at: data["attributes"]["system-modified-at"],
|
69
|
+
project_id: data["relationships"]["project"]["data"]["id"],
|
70
|
+
owning_unit_id: data["relationships"]["owning-unit"]["data"]["id"]
|
71
|
+
}
|
72
|
+
|
73
|
+
new(attributes)
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.handle_unprocessable_entity error_response
|
78
|
+
|
79
|
+
errors = parse_error_response error_response
|
80
|
+
|
81
|
+
raise_error_if_key DMAO::API::Errors::InvalidProjectID, errors, "project"
|
82
|
+
raise_error_if_key DMAO::API::Errors::InvalidOrganisationUnitID, errors, "owning_unit"
|
83
|
+
|
84
|
+
raise DMAO::API::Errors::InvalidDataset.new("Invalid dataset details, please see errors.", errors)
|
85
|
+
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'dmao/api/entity'
|
2
|
+
require 'dmao/api/errors/invalid_dataset_file'
|
3
|
+
require 'dmao/api/errors/invalid_dataset_file_id'
|
4
|
+
require 'dmao/api/errors/dataset_file_not_found'
|
5
|
+
require 'dmao/api/errors/invalid_dataset_id'
|
6
|
+
|
7
|
+
module DMAO
|
8
|
+
module API
|
9
|
+
|
10
|
+
class DatasetFile < Entity
|
11
|
+
|
12
|
+
ENDPOINT = 'dataset_files'
|
13
|
+
NOT_FOUND_ERROR = DMAO::API::Errors::DatasetFileNotFound
|
14
|
+
INVALID_ID_ERROR = DMAO::API::Errors::InvalidDatasetFileID
|
15
|
+
INVALID_ENTITY_CLASS = DMAO::API::Errors::InvalidDatasetFile
|
16
|
+
INVALID_ENTITY_ERROR_MESSAGE = "Invalid dataset file details, please see errors."
|
17
|
+
|
18
|
+
VALID_ATTRIBUTES = [:id, :institution_id, :name, :size, :url, :system_uuid, :system_modified_at, :dataset_id]
|
19
|
+
|
20
|
+
attr_reader(*VALID_ATTRIBUTES)
|
21
|
+
|
22
|
+
def initialize(attributes)
|
23
|
+
|
24
|
+
@id = attributes[:id]
|
25
|
+
@institution_id = attributes[:institution_id]
|
26
|
+
@name = attributes[:name]
|
27
|
+
@size = attributes[:size]
|
28
|
+
@url = attributes[:url]
|
29
|
+
@system_uuid = attributes[:system_uuid]
|
30
|
+
@system_modified_at = attributes[:system_modified_at]
|
31
|
+
@dataset_id= attributes[:dataset_id]
|
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
|
+
name: data["attributes"]["name"],
|
41
|
+
size: data["attributes"]["size"],
|
42
|
+
url: data["attributes"]["url"],
|
43
|
+
system_uuid: data["attributes"]["system-uuid"],
|
44
|
+
system_modified_at: data["attributes"]["system-modified-at"],
|
45
|
+
dataset_id: data["relationships"]["dataset"]["data"]["id"]
|
46
|
+
}
|
47
|
+
|
48
|
+
new(attributes)
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.handle_unprocessable_entity error_response
|
53
|
+
|
54
|
+
errors = parse_error_response error_response
|
55
|
+
|
56
|
+
raise_error_if_key DMAO::API::Errors::InvalidDatasetID, errors, "dataset"
|
57
|
+
|
58
|
+
raise DMAO::API::Errors::InvalidDatasetFile.new("Invalid dataset file details, please see errors.", errors)
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
data/lib/dmao/api/dmp.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'dmao/api/entity'
|
2
|
+
require 'dmao/api/errors/invalid_dmp'
|
3
|
+
require 'dmao/api/errors/invalid_dmp_id'
|
4
|
+
require 'dmao/api/errors/dmp_not_found'
|
5
|
+
|
6
|
+
module DMAO
|
7
|
+
module API
|
8
|
+
|
9
|
+
class DMP < Entity
|
10
|
+
|
11
|
+
ENDPOINT = 'dmps'
|
12
|
+
NOT_FOUND_ERROR = DMAO::API::Errors::DMPNotFound
|
13
|
+
INVALID_ID_ERROR = DMAO::API::Errors::InvalidDMPID
|
14
|
+
INVALID_ENTITY_CLASS = DMAO::API::Errors::InvalidDMP
|
15
|
+
INVALID_ENTITY_ERROR_MESSAGE = "Invalid DMP details, please see errors."
|
16
|
+
|
17
|
+
VALID_ATTRIBUTES = [:id, :institution_id, :project_id, :reviewed, :url, :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
|
+
@reviewed = attributes[:reviewed]
|
26
|
+
@url = attributes[:url]
|
27
|
+
@system_uuid = attributes[:system_uuid]
|
28
|
+
@system_modified_at = attributes[:system_modified_at]
|
29
|
+
@project_id = attributes[:project_id]
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.instance_from_api_data data
|
34
|
+
|
35
|
+
attributes = {
|
36
|
+
id: data["id"],
|
37
|
+
institution_id: data["relationships"]["institution"]["data"]["id"],
|
38
|
+
reviewed: data["attributes"]["reviewed"],
|
39
|
+
url: data["attributes"]["url"],system_uuid: data["attributes"]["system-uuid"],
|
40
|
+
system_modified_at: data["attributes"]["system-modified-at"],
|
41
|
+
project_id: data["relationships"]["project"]["data"]["id"]
|
42
|
+
}
|
43
|
+
|
44
|
+
new(attributes)
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.handle_unprocessable_entity error_response
|
49
|
+
|
50
|
+
errors = parse_error_response error_response
|
51
|
+
|
52
|
+
raise_error_if_key DMAO::API::Errors::InvalidProjectID, errors, "project"
|
53
|
+
|
54
|
+
raise DMAO::API::Errors::InvalidDMP.new("Invalid DMP details, please see errors.", errors)
|
55
|
+
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
data/lib/dmao/api/entity.rb
CHANGED
@@ -157,6 +157,18 @@ module DMAO
|
|
157
157
|
raise "Should be overridden in extending class"
|
158
158
|
end
|
159
159
|
|
160
|
+
def self.set_id_attribute_if_not_nil attribute_value
|
161
|
+
attribute_value.nil? ? nil : attribute_value["id"]
|
162
|
+
end
|
163
|
+
|
164
|
+
def self.parse_error_response error_response
|
165
|
+
JSON.parse(error_response.response.body)["errors"]
|
166
|
+
end
|
167
|
+
|
168
|
+
def self.raise_error_if_key error_class, errors, key
|
169
|
+
raise error_class.new if errors.keys.include? key
|
170
|
+
end
|
171
|
+
|
160
172
|
end
|
161
173
|
|
162
174
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class DatasetFileNotFound < StandardError
|
6
|
+
|
7
|
+
def initialize(msg="Invalid dataset file id specified, id does not exist for requesting institution.")
|
8
|
+
|
9
|
+
super(msg)
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class InvalidDataset < StandardError
|
6
|
+
|
7
|
+
attr_reader :errors
|
8
|
+
|
9
|
+
def initialize(msg="Invalid dataset 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
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class InvalidDatasetFile < StandardError
|
6
|
+
|
7
|
+
attr_reader :errors
|
8
|
+
|
9
|
+
def initialize(msg="Invalid dataset file 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
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class InvalidDMP < StandardError
|
6
|
+
|
7
|
+
attr_reader :errors
|
8
|
+
|
9
|
+
def initialize(msg="Invalid DMP 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
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class InvalidFunder < StandardError
|
6
|
+
|
7
|
+
attr_reader :errors
|
8
|
+
|
9
|
+
def initialize(msg="Invalid funder 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
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class InvalidProject < StandardError
|
6
|
+
|
7
|
+
attr_reader :errors
|
8
|
+
|
9
|
+
def initialize(msg="Invalid project 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
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class InvalidProjectParticipant < StandardError
|
6
|
+
|
7
|
+
attr_reader :errors
|
8
|
+
|
9
|
+
def initialize(msg="Invalid project participant 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
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class InvalidProjectParticipantID < StandardError
|
6
|
+
|
7
|
+
attr_reader :errors
|
8
|
+
|
9
|
+
def initialize(msg="Invalid project participant ID specified")
|
10
|
+
|
11
|
+
super(msg)
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class InvalidPublication < StandardError
|
6
|
+
|
7
|
+
attr_reader :errors
|
8
|
+
|
9
|
+
def initialize(msg="Invalid project 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
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class InvalidPublicationDataset < StandardError
|
6
|
+
|
7
|
+
attr_reader :errors
|
8
|
+
|
9
|
+
def initialize(msg="Invalid publication dataset 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
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class ProjectParticipantNotFound < StandardError
|
6
|
+
|
7
|
+
def initialize(msg="Invalid project participant id specified, id does not exist for requesting institution.")
|
8
|
+
|
9
|
+
super(msg)
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class PublicationDatasetNotFound < StandardError
|
6
|
+
|
7
|
+
def initialize(msg="Invalid publication dataset id specified, id does not exist for requesting institution.")
|
8
|
+
|
9
|
+
super(msg)
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module DMAO
|
2
|
+
module API
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
class PublicationNotFound < StandardError
|
6
|
+
|
7
|
+
def initialize(msg="Invalid publication id specified, id does not exist for requesting institution.")
|
8
|
+
|
9
|
+
super(msg)
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'dmao/api/entity'
|
2
|
+
require 'dmao/api/errors/invalid_funder'
|
3
|
+
require 'dmao/api/errors/invalid_funder_id'
|
4
|
+
require 'dmao/api/errors/funder_not_found'
|
5
|
+
|
6
|
+
module DMAO
|
7
|
+
module API
|
8
|
+
|
9
|
+
class Funder < Entity
|
10
|
+
|
11
|
+
ENDPOINT = 'funders'
|
12
|
+
NOT_FOUND_ERROR = DMAO::API::Errors::FunderNotFound
|
13
|
+
INVALID_ID_ERROR = DMAO::API::Errors::InvalidFunderID
|
14
|
+
INVALID_ENTITY_CLASS = DMAO::API::Errors::InvalidFunder
|
15
|
+
INVALID_ENTITY_ERROR_MESSAGE = "Invalid funder details, please see errors."
|
16
|
+
|
17
|
+
VALID_ATTRIBUTES = [:id, :institution_id, :name, :parent_group, :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
|
+
@name = attributes[:name]
|
26
|
+
@parent_group = attributes[:parent_group]
|
27
|
+
@system_uuid = attributes[:system_uuid]
|
28
|
+
@system_modified_at = attributes[:system_modified_at]
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.instance_from_api_data data
|
33
|
+
|
34
|
+
attributes = {
|
35
|
+
id: data["id"],
|
36
|
+
institution_id: data["relationships"]["institution"]["data"]["id"],
|
37
|
+
name: data["attributes"]["name"],
|
38
|
+
parent_group: data["attributes"]["parent-group"],
|
39
|
+
system_uuid: data["attributes"]["system-uuid"],
|
40
|
+
system_modified_at: data["attributes"]["system-modified-at"]
|
41
|
+
}
|
42
|
+
|
43
|
+
new(attributes)
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -39,7 +39,7 @@ module DMAO
|
|
39
39
|
|
40
40
|
def self.instance_from_api_data data
|
41
41
|
|
42
|
-
parent_id =
|
42
|
+
parent_id = set_id_attribute_if_not_nil data["relationships"]["parent"]["data"]
|
43
43
|
|
44
44
|
attributes = {
|
45
45
|
id: data["id"],
|
@@ -60,9 +60,10 @@ module DMAO
|
|
60
60
|
|
61
61
|
def self.handle_unprocessable_entity error_response
|
62
62
|
|
63
|
-
errors =
|
63
|
+
errors = parse_error_response error_response
|
64
|
+
|
65
|
+
raise_error_if_key DMAO::API::Errors::InvalidParentId, errors, "parent"
|
64
66
|
|
65
|
-
raise DMAO::API::Errors::InvalidParentId.new if errors.keys.include? "parent"
|
66
67
|
raise DMAO::API::Errors::InvalidOrganisationUnit.new("Invalid organisation unit details, please see errors.", errors)
|
67
68
|
|
68
69
|
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'dmao/api/entity'
|
2
|
+
require 'dmao/api/errors/invalid_project'
|
3
|
+
require 'dmao/api/errors/invalid_project_id'
|
4
|
+
require 'dmao/api/errors/invalid_organisation_unit_id'
|
5
|
+
require 'dmao/api/errors/project_not_found'
|
6
|
+
|
7
|
+
module DMAO
|
8
|
+
module API
|
9
|
+
|
10
|
+
class Project < Entity
|
11
|
+
|
12
|
+
ENDPOINT = 'projects'
|
13
|
+
NOT_FOUND_ERROR = DMAO::API::Errors::ProjectNotFound
|
14
|
+
INVALID_ID_ERROR = DMAO::API::Errors::InvalidProjectID
|
15
|
+
INVALID_ENTITY_CLASS = DMAO::API::Errors::InvalidProject
|
16
|
+
INVALID_ENTITY_ERROR_MESSAGE = "Invalid project details, please see errors."
|
17
|
+
|
18
|
+
VALID_ATTRIBUTES = [
|
19
|
+
:id,
|
20
|
+
:institution_id,
|
21
|
+
:title,
|
22
|
+
:acronym,
|
23
|
+
:description,
|
24
|
+
:status,
|
25
|
+
:project_type,
|
26
|
+
:classification,
|
27
|
+
:internal_project_code,
|
28
|
+
:url,
|
29
|
+
:start_date,
|
30
|
+
:end_date,
|
31
|
+
:system_uuid,
|
32
|
+
:system_modified_at,
|
33
|
+
:owning_unit_id,
|
34
|
+
:funder_id
|
35
|
+
]
|
36
|
+
|
37
|
+
attr_reader(*VALID_ATTRIBUTES)
|
38
|
+
|
39
|
+
def initialize(attributes)
|
40
|
+
|
41
|
+
@id = attributes[:id]
|
42
|
+
@institution_id = attributes[:institution_id]
|
43
|
+
@title = attributes[:title]
|
44
|
+
@acronym = attributes[:acronym]
|
45
|
+
@description = attributes[:description]
|
46
|
+
@status = attributes[:status]
|
47
|
+
@project_type = attributes[:project_type]
|
48
|
+
@classification = attributes[:classification]
|
49
|
+
@internal_project_code = attributes[:internal_project_code]
|
50
|
+
@url = attributes[:url]
|
51
|
+
@start_date = attributes[:start_date]
|
52
|
+
@end_date = attributes[:end_date]
|
53
|
+
@system_uuid = attributes[:system_uuid]
|
54
|
+
@system_modified_at = attributes[:system_modified_at]
|
55
|
+
@owning_unit_id = attributes[:owning_unit_id]
|
56
|
+
@funder_id = attributes[:funder_id]
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.instance_from_api_data data
|
61
|
+
|
62
|
+
funder_id = set_id_attribute_if_not_nil data["relationships"]["funder"]["data"]
|
63
|
+
|
64
|
+
attributes = {
|
65
|
+
id: data["id"],
|
66
|
+
institution_id: data["relationships"]["institution"]["data"]["id"],
|
67
|
+
title: data["attributes"]["title"],
|
68
|
+
acronym: data["attributes"]["acronym"],
|
69
|
+
description: data["attributes"]["description"],
|
70
|
+
status: data["attributes"]["status"],
|
71
|
+
project_type: data["attributes"]["project-type"],
|
72
|
+
classification: data["attributes"]["classification"],
|
73
|
+
internal_project_code: data["attributes"]["internal-project-code"],
|
74
|
+
url: data["attributes"]["url"],
|
75
|
+
start_date: data["attributes"]["start-date"],
|
76
|
+
end_date: data["attributes"]["end-date"],
|
77
|
+
system_uuid: data["attributes"]["system-uuid"],
|
78
|
+
system_modified_at: data["attributes"]["system-modified-at"],
|
79
|
+
owning_unit_id: data["relationships"]["owning-unit"]["data"]["id"],
|
80
|
+
funder_id: funder_id
|
81
|
+
}
|
82
|
+
|
83
|
+
new(attributes)
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.handle_unprocessable_entity error_response
|
88
|
+
|
89
|
+
errors = parse_error_response error_response
|
90
|
+
|
91
|
+
raise_error_if_key DMAO::API::Errors::InvalidOrganisationUnitID, errors, "owning_unit"
|
92
|
+
|
93
|
+
raise DMAO::API::Errors::InvalidProject.new("Invalid project details, please see errors.", errors)
|
94
|
+
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'dmao/api/entity'
|
2
|
+
require 'dmao/api/errors/invalid_project_participant'
|
3
|
+
require 'dmao/api/errors/invalid_project_participant_id'
|
4
|
+
require 'dmao/api/errors/project_participant_not_found'
|
5
|
+
require 'dmao/api/errors/invalid_project_id'
|
6
|
+
require 'dmao/api/errors/invalid_person_id'
|
7
|
+
require 'dmao/api/errors/unsupported_query_by_system_uuid'
|
8
|
+
|
9
|
+
module DMAO
|
10
|
+
module API
|
11
|
+
|
12
|
+
class ProjectParticipant < Entity
|
13
|
+
|
14
|
+
ENDPOINT = 'project_participants'
|
15
|
+
NOT_FOUND_ERROR = DMAO::API::Errors::ProjectParticipantNotFound
|
16
|
+
INVALID_ID_ERROR = DMAO::API::Errors::InvalidProjectParticipantID
|
17
|
+
INVALID_ENTITY_CLASS = DMAO::API::Errors::InvalidProjectParticipant
|
18
|
+
INVALID_ENTITY_ERROR_MESSAGE = "Invalid project participant details, please see errors."
|
19
|
+
|
20
|
+
VALID_ATTRIBUTES = [:id, :institution_id, :role, :project_id, :participant_id, :person_id]
|
21
|
+
|
22
|
+
attr_reader(*VALID_ATTRIBUTES)
|
23
|
+
|
24
|
+
def initialize(attributes)
|
25
|
+
|
26
|
+
@id = attributes[:id]
|
27
|
+
@institution_id = attributes[:institution_id]
|
28
|
+
@role = attributes[:role]
|
29
|
+
@project_id = attributes[:project_id]
|
30
|
+
@participant_id = @person_id = attributes[:participant_id]
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.instance_from_api_data data
|
35
|
+
|
36
|
+
attributes = {
|
37
|
+
id: data["id"],
|
38
|
+
institution_id: data["relationships"]["institution"]["data"]["id"],
|
39
|
+
role: data["attributes"]["role"],
|
40
|
+
project_id: data["relationships"]["project"]["data"]["id"],
|
41
|
+
participant_id: data["relationships"]["person"]["data"]["id"]
|
42
|
+
}
|
43
|
+
|
44
|
+
new(attributes)
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.handle_unprocessable_entity error_response
|
49
|
+
|
50
|
+
errors = parse_error_response error_response
|
51
|
+
|
52
|
+
raise DMAO::API::Errors::InvalidProjectParticipant.new("Invalid project participant details, please see errors.", errors) if (errors.keys.include?("project") && errors.keys.include?("person"))
|
53
|
+
|
54
|
+
raise_error_if_key DMAO::API::Errors::InvalidProjectID, errors, "project"
|
55
|
+
raise_error_if_key DMAO::API::Errors::InvalidPersonID, errors, "person"
|
56
|
+
|
57
|
+
raise DMAO::API::Errors::InvalidProjectParticipant.new("Invalid project participant details, please see errors.", errors)
|
58
|
+
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.find_by_system_uuid _system_uuid
|
63
|
+
raise DMAO::API::Errors::UnsupportedQueryBySystemUUID.new
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'dmao/api/entity'
|
2
|
+
require 'dmao/api/errors/invalid_publication'
|
3
|
+
require 'dmao/api/errors/invalid_publication_id'
|
4
|
+
require 'dmao/api/errors/invalid_project_id'
|
5
|
+
require 'dmao/api/errors/invalid_organisation_unit_id'
|
6
|
+
require 'dmao/api/errors/publication_not_found'
|
7
|
+
|
8
|
+
module DMAO
|
9
|
+
module API
|
10
|
+
|
11
|
+
class Publication < Entity
|
12
|
+
|
13
|
+
ENDPOINT = 'publications'
|
14
|
+
NOT_FOUND_ERROR = DMAO::API::Errors::PublicationNotFound
|
15
|
+
INVALID_ID_ERROR = DMAO::API::Errors::InvalidPublicationID
|
16
|
+
INVALID_ENTITY_CLASS = DMAO::API::Errors::InvalidPublication
|
17
|
+
INVALID_ENTITY_ERROR_MESSAGE = "Invalid publication details, please see errors."
|
18
|
+
|
19
|
+
VALID_ATTRIBUTES = [
|
20
|
+
:id,
|
21
|
+
:institution_id,
|
22
|
+
:permanent_id,
|
23
|
+
:title,
|
24
|
+
:abstract,
|
25
|
+
:category,
|
26
|
+
:publication_type,
|
27
|
+
:status,
|
28
|
+
:url,
|
29
|
+
:publication_date,
|
30
|
+
:system_uuid,
|
31
|
+
:system_modified_at,
|
32
|
+
:project_id,
|
33
|
+
:owning_unit_id
|
34
|
+
]
|
35
|
+
|
36
|
+
attr_reader(*VALID_ATTRIBUTES)
|
37
|
+
|
38
|
+
def initialize(attributes)
|
39
|
+
|
40
|
+
@id = attributes[:id]
|
41
|
+
@institution_id = attributes[:institution_id]
|
42
|
+
@permanent_id = attributes[:permanent_id]
|
43
|
+
@title = attributes[:title]
|
44
|
+
@abstract = attributes[:abstract]
|
45
|
+
@category = attributes[:category]
|
46
|
+
@publication_type = attributes[:publication_type]
|
47
|
+
@status = attributes[:status]
|
48
|
+
@url = attributes[:url]
|
49
|
+
@publication_date = attributes[:publication_date]
|
50
|
+
@system_uuid = attributes[:system_uuid]
|
51
|
+
@system_modified_at = attributes[:system_modified_at]
|
52
|
+
@project_id = attributes[:project_id]
|
53
|
+
@owning_unit_id = attributes[:owning_unit_id]
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.instance_from_api_data data
|
58
|
+
|
59
|
+
attributes = {
|
60
|
+
id: data["id"],
|
61
|
+
institution_id: data["relationships"]["institution"]["data"]["id"],
|
62
|
+
permanent_id: data["attributes"]["permanent-id"],
|
63
|
+
title: data["attributes"]["title"],
|
64
|
+
abstract: data["attributes"]["abstract"],
|
65
|
+
category: data["attributes"]["category"],
|
66
|
+
publication_type: data["attributes"]["publication-type"],
|
67
|
+
status: data["attributes"]["status"],
|
68
|
+
url: data["attributes"]["url"],
|
69
|
+
publication_date: data["attributes"]["publication-date"],
|
70
|
+
system_uuid: data["attributes"]["system-uuid"],
|
71
|
+
system_modified_at: data["attributes"]["system-modified-at"],
|
72
|
+
project_id: data["relationships"]["project"]["data"]["id"],
|
73
|
+
owning_unit_id: data["relationships"]["owning-unit"]["data"]["id"]
|
74
|
+
}
|
75
|
+
|
76
|
+
new(attributes)
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.handle_unprocessable_entity error_response
|
81
|
+
|
82
|
+
errors = parse_error_response error_response
|
83
|
+
|
84
|
+
raise_error_if_key DMAO::API::Errors::InvalidProjectID, errors, "project"
|
85
|
+
raise_error_if_key DMAO::API::Errors::InvalidOrganisationUnitID, errors, "owning_unit"
|
86
|
+
|
87
|
+
raise DMAO::API::Errors::InvalidPublication.new("Invalid Publication details, please see errors.", errors)
|
88
|
+
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'dmao/api/entity'
|
2
|
+
require 'dmao/api/errors/invalid_publication_dataset'
|
3
|
+
require 'dmao/api/errors/invalid_publication_dataset_id'
|
4
|
+
require 'dmao/api/errors/publication_dataset_not_found'
|
5
|
+
require 'dmao/api/errors/invalid_publication_id'
|
6
|
+
require 'dmao/api/errors/invalid_dataset_id'
|
7
|
+
require 'dmao/api/errors/unsupported_query_by_system_uuid'
|
8
|
+
require 'dmao/api/errors/action_unsupported'
|
9
|
+
|
10
|
+
module DMAO
|
11
|
+
module API
|
12
|
+
|
13
|
+
class PublicationDataset < Entity
|
14
|
+
|
15
|
+
ENDPOINT = 'publication_datasets'
|
16
|
+
NOT_FOUND_ERROR = DMAO::API::Errors::PublicationDatasetNotFound
|
17
|
+
INVALID_ID_ERROR = DMAO::API::Errors::InvalidPublicationDatasetID
|
18
|
+
INVALID_ENTITY_CLASS = DMAO::API::Errors::InvalidPublicationDataset
|
19
|
+
INVALID_ENTITY_ERROR_MESSAGE = "Invalid publication dataset details, please see errors."
|
20
|
+
|
21
|
+
VALID_ATTRIBUTES = [:id, :institution_id, :publication_id, :dataset_id]
|
22
|
+
|
23
|
+
attr_reader(*VALID_ATTRIBUTES)
|
24
|
+
|
25
|
+
def initialize(attributes)
|
26
|
+
|
27
|
+
@id = attributes[:id]
|
28
|
+
@institution_id = attributes[:institution_id]
|
29
|
+
@publication_id = attributes[:publication_id]
|
30
|
+
@dataset_id= attributes[:dataset_id]
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.instance_from_api_data data
|
35
|
+
|
36
|
+
attributes = {
|
37
|
+
id: data["id"],
|
38
|
+
institution_id: data["relationships"]["institution"]["data"]["id"],
|
39
|
+
publication_id: data["relationships"]["publication"]["data"]["id"],
|
40
|
+
dataset_id: data["relationships"]["dataset"]["data"]["id"]
|
41
|
+
}
|
42
|
+
|
43
|
+
new(attributes)
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.handle_unprocessable_entity error_response
|
48
|
+
|
49
|
+
errors = parse_error_response error_response
|
50
|
+
|
51
|
+
raise DMAO::API::Errors::InvalidPublicationDataset.new("Invalid publication dataset details, please see errors.", errors) if (errors.keys.include?("publication") && errors.keys.include?("dataset"))
|
52
|
+
|
53
|
+
raise_error_if_key DMAO::API::Errors::InvalidPublicationID, errors, "publication"
|
54
|
+
raise_error_if_key DMAO::API::Errors::InvalidDatasetID, errors, "dataset"
|
55
|
+
|
56
|
+
raise DMAO::API::Errors::InvalidPublicationDataset.new("Invalid publication dataset details, please see errors.", errors)
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.find_by_system_uuid _system_uuid
|
61
|
+
raise DMAO::API::Errors::UnsupportedQueryBySystemUUID.new
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.update _id, _attributes
|
65
|
+
raise DMAO::API::Errors::ActionUnsupported.new("Updating publication dataset is not supported.")
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
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.4.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-04-
|
11
|
+
date: 2017-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -153,21 +153,55 @@ files:
|
|
153
153
|
- dmao_api.gemspec
|
154
154
|
- lib/dmao/api/base.rb
|
155
155
|
- lib/dmao/api/configuration.rb
|
156
|
+
- lib/dmao/api/dataset.rb
|
157
|
+
- lib/dmao/api/dataset_file.rb
|
158
|
+
- lib/dmao/api/dmp.rb
|
156
159
|
- lib/dmao/api/entity.rb
|
160
|
+
- lib/dmao/api/errors/action_unsupported.rb
|
161
|
+
- lib/dmao/api/errors/dataset_file_not_found.rb
|
162
|
+
- lib/dmao/api/errors/dataset_not_found.rb
|
163
|
+
- lib/dmao/api/errors/dmp_not_found.rb
|
164
|
+
- lib/dmao/api/errors/funder_not_found.rb
|
157
165
|
- lib/dmao/api/errors/institution_not_found.rb
|
158
166
|
- lib/dmao/api/errors/invalid_api_base_url.rb
|
159
167
|
- lib/dmao/api/errors/invalid_api_token.rb
|
168
|
+
- lib/dmao/api/errors/invalid_dataset.rb
|
169
|
+
- lib/dmao/api/errors/invalid_dataset_file.rb
|
170
|
+
- lib/dmao/api/errors/invalid_dataset_file_id.rb
|
171
|
+
- lib/dmao/api/errors/invalid_dataset_id.rb
|
172
|
+
- lib/dmao/api/errors/invalid_dmp.rb
|
173
|
+
- lib/dmao/api/errors/invalid_dmp_id.rb
|
174
|
+
- lib/dmao/api/errors/invalid_funder.rb
|
175
|
+
- lib/dmao/api/errors/invalid_funder_id.rb
|
160
176
|
- lib/dmao/api/errors/invalid_organisation_unit.rb
|
161
177
|
- lib/dmao/api/errors/invalid_organisation_unit_id.rb
|
162
178
|
- lib/dmao/api/errors/invalid_parent_id.rb
|
163
179
|
- lib/dmao/api/errors/invalid_person.rb
|
164
180
|
- lib/dmao/api/errors/invalid_person_id.rb
|
181
|
+
- lib/dmao/api/errors/invalid_project.rb
|
182
|
+
- lib/dmao/api/errors/invalid_project_id.rb
|
183
|
+
- lib/dmao/api/errors/invalid_project_participant.rb
|
184
|
+
- lib/dmao/api/errors/invalid_project_participant_id.rb
|
185
|
+
- lib/dmao/api/errors/invalid_publication.rb
|
186
|
+
- lib/dmao/api/errors/invalid_publication_dataset.rb
|
187
|
+
- lib/dmao/api/errors/invalid_publication_dataset_id.rb
|
188
|
+
- lib/dmao/api/errors/invalid_publication_id.rb
|
165
189
|
- lib/dmao/api/errors/invalid_response_length.rb
|
166
190
|
- lib/dmao/api/errors/invalid_system_uuid.rb
|
167
191
|
- lib/dmao/api/errors/organisation_unit_not_found.rb
|
168
192
|
- lib/dmao/api/errors/person_not_found.rb
|
193
|
+
- lib/dmao/api/errors/project_not_found.rb
|
194
|
+
- lib/dmao/api/errors/project_participant_not_found.rb
|
195
|
+
- lib/dmao/api/errors/publication_dataset_not_found.rb
|
196
|
+
- lib/dmao/api/errors/publication_not_found.rb
|
197
|
+
- lib/dmao/api/errors/unsupported_query_by_system_uuid.rb
|
198
|
+
- lib/dmao/api/funder.rb
|
169
199
|
- lib/dmao/api/organisation_unit.rb
|
170
200
|
- lib/dmao/api/person.rb
|
201
|
+
- lib/dmao/api/project.rb
|
202
|
+
- lib/dmao/api/project_participant.rb
|
203
|
+
- lib/dmao/api/publication.rb
|
204
|
+
- lib/dmao/api/publication_dataset.rb
|
171
205
|
- lib/dmao/api/version.rb
|
172
206
|
- lib/dmao_api.rb
|
173
207
|
homepage: https://github.com/lulibrary/DMAO-API-rb
|