dmao_api 0.3.0 → 0.4.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.
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