dmao-generic-ingesters 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 87171d6bcbe3868e05ea4647c3eedffb8ac005d7
4
- data.tar.gz: c29e683001b5c4230e72aa6b5472b56b7638c65f
3
+ metadata.gz: fa13700de7ef18ea8b374489d9d6f06cb85abe15
4
+ data.tar.gz: 2f68f9cc43db01df86153247ea61ee79983e7477
5
5
  SHA512:
6
- metadata.gz: 50c9b0ebdbc4cea9480afebea72e54dd850e7a4053d2a20f84abb20818cd977e8feef443fd957224bfe79d68b05bbdef74e14529da6b6d1c4d71efda8915af27
7
- data.tar.gz: f0b4f78421d1f34f6bcb52b9de7aee60bc942bacd4c3a89c9f2d05297659e247ae8b1628f2a1c725f4dde9451af960069d579cc0b5afa9bde8ee15f18c9c8a72
6
+ metadata.gz: 1de03f96656da38f7566a4b681eb2390b6b1661e7ff8e1d93753d6c7841968f54cecb8dfc569b8f373d5b602cb39596e32cd0e952520102bd73999a421eada81
7
+ data.tar.gz: 435f9ab0ba13bd7e9ddbecd8161343285a90459886059de36bd744e2023ed05bf826a74db1ccf5e8237bbcca1cf99d91001cb25b0cb4e92cc39cc89368e7b39d
data/.gitignore CHANGED
@@ -7,4 +7,5 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
- .rbenv-gemsets
10
+ .rbenv-gemsets
11
+ .byebug_history
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
32
 
33
- spec.add_dependency "dmao_api", "~> 0.2.1"
33
+ spec.add_dependency "dmao_api", "~> 0.5.0"
34
34
 
35
35
  spec.add_development_dependency "bundler", "~> 1.13"
36
36
  spec.add_development_dependency "rake", "~> 10.0"
@@ -0,0 +1,15 @@
1
+ module DMAO
2
+ module Ingesters
3
+ module Errors
4
+
5
+ class IngestPersonError < StandardError
6
+
7
+ def initialize(msg="Error ingesting person.")
8
+ super(msg)
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,81 @@
1
+ require 'time'
2
+ require 'dmao_api'
3
+ require 'dmao/ingesters/errors/generic_ingester'
4
+ require 'dmao/ingesters/errors/empty_attributes'
5
+
6
+ module DMAO
7
+ module Ingesters
8
+ module Generic
9
+
10
+ class Ingester
11
+
12
+ ENTITY = nil
13
+ ENTITY_ERROR = nil
14
+ ENTITY_ERROR_MESSAGE = nil
15
+
16
+ def initialize(api_url=nil, api_token=nil, institution_id=nil)
17
+ DMAO::API.configure do |config|
18
+ config.base_url = api_url
19
+ config.api_token = api_token
20
+ config.institution_id = institution_id
21
+ end
22
+ end
23
+
24
+ def ingest
25
+ raise DMAO::Ingesters::Errors::GenericIngester.new("Calling ingest on generic ingester is not allowed.")
26
+ end
27
+
28
+ def ingest_entity attributes = {}
29
+
30
+ entity_name = self.class::ENTITY.to_s.split('::')[-1].gsub(/[A-Z]/, " \\0").strip.downcase
31
+
32
+ raise DMAO::Ingesters::Errors::EmptyAttributes.new("Cannot ingest #{entity_name} without attributes.") if attributes.nil? || attributes.empty?
33
+
34
+ begin
35
+
36
+ entity = self.class::ENTITY.find_by_system_uuid attributes[:system_uuid]
37
+
38
+ current_modified_at = Time.parse(entity.system_modified_at)
39
+ new_modified_at = Time.parse(attributes[:system_modified_at])
40
+
41
+ return false if current_modified_at >= new_modified_at
42
+
43
+ update_entity entity.id, attributes
44
+
45
+ rescue DMAO::API::Errors::EntityNotFound
46
+ add_entity attributes
47
+ rescue DMAO::API::Errors::InvalidResponseLength
48
+ raise self.class::ENTITY_ERROR.new("More than one #{entity_name} returned for system uuid #{attributes[:system_uuid]}.")
49
+ end
50
+
51
+ end
52
+
53
+ def parse_unprocessable_errors errors
54
+
55
+ error_messages = ""
56
+
57
+ errors.each_with_index do |(k, v), index|
58
+ v.each_with_index do |msg, msg_index|
59
+ error_messages += "#{k} - #{msg}"
60
+ error_messages += ", " unless msg_index == v.size - 1
61
+ end
62
+ error_messages += ", " unless index == errors.size - 1
63
+ end
64
+
65
+ raise self.class::ENTITY_ERROR.new("#{self.class::ENTITY_ERROR_MESSAGE}, #{error_messages}")
66
+
67
+ end
68
+
69
+ def add_entity _attributes={}
70
+ raise NotImplementedError
71
+ end
72
+
73
+ def update_entity _entity_id, _attributes={}
74
+ raise NotImplementedError
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+ end
81
+ end
@@ -2,6 +2,7 @@ require 'dmao/ingesters/errors/generic_ingester'
2
2
  require 'dmao/ingesters/errors/empty_attributes'
3
3
  require 'dmao/ingesters/errors/ingest_organisation_unit_error'
4
4
  require 'dmao/ingesters/errors/link_organisation_unit_error'
5
+ require 'dmao/ingesters/generic/ingester'
5
6
  require 'dmao_api'
6
7
  require 'time'
7
8
 
@@ -9,41 +10,14 @@ module DMAO
9
10
  module Ingesters
10
11
  module Generic
11
12
 
12
- class OrganisationIngester
13
+ class OrganisationIngester < Ingester
13
14
 
14
- def initialize(api_url=nil, api_token=nil, institution_id=nil)
15
- DMAO::API.configure do |config|
16
- config.base_url = api_url
17
- config.api_token = api_token
18
- config.institution_id = institution_id
19
- end
20
- end
21
-
22
- def ingest
23
- raise DMAO::Ingesters::Errors::GenericIngester.new("Calling ingest on generic organisation ingester is not allowed.")
24
- end
15
+ ENTITY = DMAO::API::OrganisationUnit
16
+ ENTITY_ERROR = DMAO::Ingesters::Errors::IngestOrganisationUnitError
17
+ ENTITY_ERROR_MESSAGE = "Invalid organisation unit details"
25
18
 
26
19
  def ingest_organisation_unit attributes={}
27
-
28
- raise DMAO::Ingesters::Errors::EmptyAttributes.new("Cannot ingest organisation unit without attributes.") if attributes.nil? || attributes.empty?
29
-
30
- begin
31
-
32
- org_unit = DMAO::API::OrganisationUnit.find_by_system_uuid attributes[:system_uuid]
33
-
34
- current_modified_at = Time.parse(org_unit.system_modified_at)
35
- new_modified_at = Time.parse(attributes[:system_modified_at])
36
-
37
- return false if current_modified_at >= new_modified_at
38
-
39
- update_organisation_unit org_unit.id, attributes
40
-
41
- rescue DMAO::API::Errors::OrganisationUnitNotFound
42
- add_organisation_unit attributes
43
- rescue DMAO::API::Errors::InvalidResponseLength
44
- raise DMAO::Ingesters::Errors::IngestOrganisationUnitError.new("Multiple organisation units returned for system uuid #{attributes[:system_uuid]}.")
45
- end
46
-
20
+ ingest_entity attributes
47
21
  end
48
22
 
49
23
  def link_child_to_parent child_system_uuid, parent_system_uuid
@@ -61,6 +35,14 @@ module DMAO
61
35
 
62
36
  private
63
37
 
38
+ def add_entity attributes
39
+ add_organisation_unit attributes
40
+ end
41
+
42
+ def update_entity id, attributes
43
+ update_organisation_unit id, attributes
44
+ end
45
+
64
46
  def add_organisation_unit attributes
65
47
 
66
48
  begin
@@ -91,22 +73,6 @@ module DMAO
91
73
 
92
74
  end
93
75
 
94
- def parse_unprocessable_errors errors
95
-
96
- error_messages = ""
97
-
98
- errors.each_with_index do |(k, v), index|
99
- v.each_with_index do |msg, msg_index|
100
- error_messages += "#{k} - #{msg}"
101
- error_messages += ", " unless msg_index == v.size - 1
102
- end
103
- error_messages += ", " unless index == errors.size - 1
104
- end
105
-
106
- raise DMAO::Ingesters::Errors::IngestOrganisationUnitError.new("Invalid organisation unit details, #{error_messages}")
107
-
108
- end
109
-
110
76
  def find_unit_or_raise_link_error unit_system_uuid, error_message
111
77
 
112
78
  begin
@@ -0,0 +1,61 @@
1
+ require 'dmao_api'
2
+ require 'dmao/api/person'
3
+ require 'time'
4
+ require 'dmao/ingesters/generic/ingester'
5
+ require 'dmao/ingesters/errors/generic_ingester'
6
+ require 'dmao/ingesters/errors/empty_attributes'
7
+ require 'dmao/ingesters/errors/ingest_person_error'
8
+
9
+ module DMAO
10
+ module Ingesters
11
+ module Generic
12
+
13
+ class PeopleIngester < Ingester
14
+
15
+ ENTITY = DMAO::API::Person
16
+ ENTITY_ERROR = DMAO::Ingesters::Errors::IngestPersonError
17
+ ENTITY_ERROR_MESSAGE = "Invalid person details"
18
+
19
+ def ingest_person attributes={}
20
+ ingest_entity attributes
21
+ end
22
+
23
+ private
24
+
25
+ def add_entity attributes
26
+ add_person attributes
27
+ end
28
+
29
+ def update_entity id, attributes
30
+ update_person id, attributes
31
+ end
32
+
33
+ def add_person attributes
34
+
35
+ begin
36
+ DMAO::API::Person.create attributes
37
+ rescue DMAO::API::Errors::InstitutionNotFound
38
+ raise DMAO::Ingesters::Errors::IngestPersonError.new("Institution not found, cannot ingest person to non-existent institution")
39
+ rescue DMAO::API::Errors::InvalidPerson => e
40
+ parse_unprocessable_errors(e.errors)
41
+ end
42
+
43
+ end
44
+
45
+ def update_person id, attributes
46
+
47
+ begin
48
+ DMAO::API::Person.update id, attributes
49
+ rescue DMAO::API::Errors::PersonNotFound
50
+ raise DMAO::Ingesters::Errors::IngestPersonError.new("Person not found, cannot update person that does not exist")
51
+ rescue DMAO::API::Errors::InvalidPerson => e
52
+ parse_unprocessable_errors(e.errors)
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+ end
61
+ end
@@ -1,7 +1,7 @@
1
1
  module DMAO
2
2
  module Ingesters
3
3
  module Generic
4
- VERSION = "0.2.1"
4
+ VERSION = "0.3.0"
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dmao-generic-ingesters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Robinson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-07 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: dmao_api
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.1
19
+ version: 0.5.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.1
26
+ version: 0.5.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -126,9 +126,12 @@ files:
126
126
  - lib/dmao/ingesters/errors/empty_attributes.rb
127
127
  - lib/dmao/ingesters/errors/generic_ingester.rb
128
128
  - lib/dmao/ingesters/errors/ingest_organisation_unit_error.rb
129
+ - lib/dmao/ingesters/errors/ingest_person_error.rb
129
130
  - lib/dmao/ingesters/errors/link_organisation_unit_error.rb
130
131
  - lib/dmao/ingesters/generic.rb
132
+ - lib/dmao/ingesters/generic/ingester.rb
131
133
  - lib/dmao/ingesters/generic/organisation_ingester.rb
134
+ - lib/dmao/ingesters/generic/people_ingester.rb
132
135
  - lib/dmao/ingesters/generic/version.rb
133
136
  homepage: https://github.com/lulibrary/DMAO-Generic-Ingesters
134
137
  licenses: