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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dmao/api/dataset.rb +92 -0
  3. data/lib/dmao/api/dataset_file.rb +65 -0
  4. data/lib/dmao/api/dmp.rb +62 -0
  5. data/lib/dmao/api/entity.rb +12 -0
  6. data/lib/dmao/api/errors/action_unsupported.rb +17 -0
  7. data/lib/dmao/api/errors/dataset_file_not_found.rb +17 -0
  8. data/lib/dmao/api/errors/dataset_not_found.rb +17 -0
  9. data/lib/dmao/api/errors/dmp_not_found.rb +17 -0
  10. data/lib/dmao/api/errors/funder_not_found.rb +17 -0
  11. data/lib/dmao/api/errors/invalid_dataset.rb +21 -0
  12. data/lib/dmao/api/errors/invalid_dataset_file.rb +21 -0
  13. data/lib/dmao/api/errors/invalid_dataset_file_id.rb +19 -0
  14. data/lib/dmao/api/errors/invalid_dataset_id.rb +19 -0
  15. data/lib/dmao/api/errors/invalid_dmp.rb +21 -0
  16. data/lib/dmao/api/errors/invalid_dmp_id.rb +17 -0
  17. data/lib/dmao/api/errors/invalid_funder.rb +21 -0
  18. data/lib/dmao/api/errors/invalid_funder_id.rb +17 -0
  19. data/lib/dmao/api/errors/invalid_project.rb +21 -0
  20. data/lib/dmao/api/errors/invalid_project_id.rb +19 -0
  21. data/lib/dmao/api/errors/invalid_project_participant.rb +21 -0
  22. data/lib/dmao/api/errors/invalid_project_participant_id.rb +19 -0
  23. data/lib/dmao/api/errors/invalid_publication.rb +21 -0
  24. data/lib/dmao/api/errors/invalid_publication_dataset.rb +21 -0
  25. data/lib/dmao/api/errors/invalid_publication_dataset_id.rb +17 -0
  26. data/lib/dmao/api/errors/invalid_publication_id.rb +17 -0
  27. data/lib/dmao/api/errors/project_not_found.rb +17 -0
  28. data/lib/dmao/api/errors/project_participant_not_found.rb +17 -0
  29. data/lib/dmao/api/errors/publication_dataset_not_found.rb +17 -0
  30. data/lib/dmao/api/errors/publication_not_found.rb +17 -0
  31. data/lib/dmao/api/errors/unsupported_query_by_system_uuid.rb +17 -0
  32. data/lib/dmao/api/funder.rb +50 -0
  33. data/lib/dmao/api/organisation_unit.rb +4 -3
  34. data/lib/dmao/api/project.rb +101 -0
  35. data/lib/dmao/api/project_participant.rb +69 -0
  36. data/lib/dmao/api/publication.rb +95 -0
  37. data/lib/dmao/api/publication_dataset.rb +71 -0
  38. data/lib/dmao/api/version.rb +1 -1
  39. metadata +36 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e7257d738325683b5729c978624513908db362c
4
- data.tar.gz: ddf6f8f8e95bb525f749ab6000659560079673a3
3
+ metadata.gz: bb6855ebeb3df109d747a4e5153c91735df68bdd
4
+ data.tar.gz: 873620f2bd988a331dc6d6a8da2013ce4b77ce80
5
5
  SHA512:
6
- metadata.gz: 8c5765835fb5a8f277ccc48bd093878b82d5a6b477cd77e5a4a8ec0219cfbb3aca471fde00d29dfdde3bacfa74b2faaf1f44d52534b9b6e3beea81612efbc8e8
7
- data.tar.gz: 19656c8cbdb4ccf1f731b8d3ff22688d273cf62d0f4083fb3f0dac935ae572e1ab18f015b64af20d9533329ac5c37d83b0572005b3b86f515a41f2034b428b52
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
@@ -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
@@ -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 ActionUnsupported < StandardError
6
+
7
+ def initialize(msg="Action is not supported by entity.")
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 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,17 @@
1
+ module DMAO
2
+ module API
3
+ module Errors
4
+
5
+ class DatasetNotFound < StandardError
6
+
7
+ def initialize(msg="Invalid 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 DMPNotFound < StandardError
6
+
7
+ def initialize(msg="Invalid DMP 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 FunderNotFound < StandardError
6
+
7
+ def initialize(msg="Invalid funder 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,19 @@
1
+ module DMAO
2
+ module API
3
+ module Errors
4
+
5
+ class InvalidDatasetFileID < StandardError
6
+
7
+ attr_reader :errors
8
+
9
+ def initialize(msg="Invalid dataset file ID specified")
10
+
11
+ super(msg)
12
+
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module DMAO
2
+ module API
3
+ module Errors
4
+
5
+ class InvalidDatasetID < StandardError
6
+
7
+ attr_reader :errors
8
+
9
+ def initialize(msg="Invalid dataset 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 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,17 @@
1
+ module DMAO
2
+ module API
3
+ module Errors
4
+
5
+ class InvalidDMPID < StandardError
6
+
7
+ def initialize(msg="Invalid DMP ID specified")
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 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,17 @@
1
+ module DMAO
2
+ module API
3
+ module Errors
4
+
5
+ class InvalidFunderID < StandardError
6
+
7
+ def initialize(msg="Invalid funder ID specified")
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 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,19 @@
1
+ module DMAO
2
+ module API
3
+ module Errors
4
+
5
+ class InvalidProjectID < StandardError
6
+
7
+ attr_reader :errors
8
+
9
+ def initialize(msg="Invalid project 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 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 InvalidPublicationDatasetID < StandardError
6
+
7
+ def initialize(msg="Invalid publication dataset ID specified")
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 InvalidPublicationID < StandardError
6
+
7
+ def initialize(msg="Invalid publication ID specified")
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 ProjectNotFound < StandardError
6
+
7
+ def initialize(msg="Invalid project 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 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,17 @@
1
+ module DMAO
2
+ module API
3
+ module Errors
4
+
5
+ class UnsupportedQueryBySystemUUID < StandardError
6
+
7
+ def initialize(msg="Querying by system uuid is not supported.")
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 = data["relationships"]["parent"]["data"].nil? ? nil : data["relationships"]["parent"]["data"]["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 = JSON.parse(error_response.response.body)["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
@@ -1,5 +1,5 @@
1
1
  module DMAO
2
2
  module API
3
- VERSION = "0.3.0"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
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.3.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-12 00:00:00.000000000 Z
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