dina 0.1.0.0 → 0.3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/dina/authentication/authentication.rb +18 -0
- data/lib/dina/casters/array_caster.rb +0 -1
- data/lib/dina/components/agent_role.rb +18 -0
- data/lib/dina/components/determination.rb +3 -3
- data/lib/dina/components/shipment.rb +24 -0
- data/lib/dina/exceptions.rb +1 -0
- data/lib/dina/models/acquisition_event.rb +1 -1
- data/lib/dina/models/assemblage.rb +3 -2
- data/lib/dina/models/attachment.rb +4 -2
- data/lib/dina/models/base_model.rb +7 -0
- data/lib/dina/models/collecting_event.rb +2 -1
- data/lib/dina/models/collecting_method.rb +1 -1
- data/lib/dina/models/collection.rb +2 -2
- data/lib/dina/models/collection_sequence_generator.rb +17 -0
- data/lib/dina/models/file.rb +30 -26
- data/lib/dina/models/identifier.rb +0 -47
- data/lib/dina/models/managed_attribute.rb +1 -1
- data/lib/dina/models/material_sample.rb +15 -12
- data/lib/dina/models/object_store.rb +23 -17
- data/lib/dina/models/object_store_managed_attribute.rb +0 -16
- data/lib/dina/models/object_subtype.rb +4 -0
- data/lib/dina/models/organism.rb +1 -1
- data/lib/dina/models/organization.rb +0 -1
- data/lib/dina/models/person.rb +9 -4
- data/lib/dina/models/preparation_method.rb +23 -0
- data/lib/dina/models/preparation_type.rb +1 -1
- data/lib/dina/models/project.rb +2 -2
- data/lib/dina/models/protocol.rb +2 -2
- data/lib/dina/models/storage_unit.rb +1 -1
- data/lib/dina/models/storage_unit_type.rb +1 -1
- data/lib/dina/models/transaction.rb +39 -0
- data/lib/dina/models/user.rb +1 -1
- data/lib/dina/version.rb +1 -1
- metadata +8 -4
- data/lib/dina/models/bucket.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9245c7481399aefbf8a290931823fafbc4970c2008ae4e299833c274825353c3
|
4
|
+
data.tar.gz: 448dcde684c17dd881ee2128f184871d05f690429199b92dd858c5c0735c22b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8d3ea143e058dab38c1073d6d614539620ceb5b14f3dc394a3b4535e069449b2921fe2365208bb9f8b5f7b2b46afb830edbe5bd0471dbd6c518c3d6cc3b8e2d
|
7
|
+
data.tar.gz: 9c18d70386ba41207d9d341e3a700e413ba63ddd34d5f81fcacd1f21453d05c84de2738d28b131767a07c649af800da404dcc62475e83055c92bbd44009b29ef
|
@@ -3,6 +3,20 @@
|
|
3
3
|
module Dina
|
4
4
|
module Authentication
|
5
5
|
|
6
|
+
# Sets Authentication configuration
|
7
|
+
# Options hash as follows:
|
8
|
+
# {
|
9
|
+
# token_store_file: "file to store the token",
|
10
|
+
# user: "username provided by DINA admin in Keycloak",
|
11
|
+
# password: "password provided by DINA admin in Keycloak",
|
12
|
+
# server_name: "used locally to reference the token",
|
13
|
+
# client_id: "provided by DINA admin in Keycloak",
|
14
|
+
# endpoint_url: "DINA API URL",
|
15
|
+
# authorization_url: "Keycloak authorization URL".
|
16
|
+
# realm: "provided by DINA admin in Keycloak"
|
17
|
+
# }
|
18
|
+
#
|
19
|
+
# @param options [Hash] the configuration options
|
6
20
|
def self.config(options = {})
|
7
21
|
@token_store_file = options[:token_store_file]
|
8
22
|
@user = options[:user]
|
@@ -16,6 +30,10 @@ module Dina
|
|
16
30
|
Keycloak.realm = @realm
|
17
31
|
end
|
18
32
|
|
33
|
+
# Gets, sets, and renews a Bearer access token as required
|
34
|
+
# and produces a Header string
|
35
|
+
#
|
36
|
+
# @return [String] the Bearer token
|
19
37
|
def self.header
|
20
38
|
if access_token.nil? || refresh_token.nil?
|
21
39
|
set_token
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Dina
|
2
|
+
class AgentRole
|
3
|
+
attr_accessor :agent #A known UUID for a Person
|
4
|
+
attr_accessor :roles #an array of roles: Owner, Borrower, Prepared By
|
5
|
+
attr_accessor :date
|
6
|
+
attr_accessor :remarks
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_hash
|
12
|
+
hash = {}
|
13
|
+
instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
|
14
|
+
hash
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -14,9 +14,9 @@ module Dina
|
|
14
14
|
attr_accessor :qualifier
|
15
15
|
attr_accessor :scientificNameSource
|
16
16
|
attr_accessor :scientificNameDetails #in the form { classificationPath: "", classificationRanks: "" }
|
17
|
-
attr_accessor :isPrimary
|
18
|
-
attr_accessor :isFiledAs
|
19
|
-
attr_accessor :managedAttributes
|
17
|
+
attr_accessor :isPrimary #boolean
|
18
|
+
attr_accessor :isFiledAs #boolean
|
19
|
+
attr_accessor :managedAttributes #array
|
20
20
|
|
21
21
|
def initialize
|
22
22
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Dina
|
2
|
+
class Shipment
|
3
|
+
attr_accessor :contentRemarks
|
4
|
+
attr_accessor :value
|
5
|
+
attr_accessor :currency
|
6
|
+
attr_accessor :itemCount
|
7
|
+
attr_accessor :shippedOn
|
8
|
+
attr_accessor :status
|
9
|
+
attr_accessor :packingMethod
|
10
|
+
attr_accessor :trackingNumber
|
11
|
+
attr_accessor :shipmentRemarks
|
12
|
+
attr_accessor :address # with properties receiverName, companyName, addressLine1, addressLine2, city, provinceState, zipCode, country
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_hash
|
18
|
+
hash = {}
|
19
|
+
instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
|
20
|
+
hash
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
data/lib/dina/exceptions.rb
CHANGED
@@ -11,9 +11,10 @@ module Dina
|
|
11
11
|
property :createdBy, type: :string
|
12
12
|
property :createdOn, type: :time
|
13
13
|
|
14
|
-
has_many :attachment, class_name: "
|
14
|
+
has_many :attachment, class_name: "Attachment"
|
15
15
|
|
16
|
-
validates_presence_of :group, :
|
16
|
+
validates_presence_of :group, message: "group is required"
|
17
|
+
validates_presence_of :name, message: "name is required"
|
17
18
|
|
18
19
|
def self.endpoint_path
|
19
20
|
"collection-api/"
|
@@ -4,8 +4,10 @@ module Dina
|
|
4
4
|
class Attachment < BaseModel
|
5
5
|
property :id, type: :string, default: SecureRandom.uuid
|
6
6
|
|
7
|
-
belongs_to :material_sample, shallow_path: true
|
8
|
-
belongs_to :
|
7
|
+
belongs_to :material_sample, shallow_path: true, class_name: "MaterialSample"
|
8
|
+
belongs_to :collecting_event, shallow_path: true, class_name: "CollectingEvent"
|
9
|
+
belongs_to :project, shallow_path: true, class_name: "Project"
|
10
|
+
belongs_to :transaction, shallow_path: true, class_name: "Transaction"
|
9
11
|
|
10
12
|
def self.endpoint_path
|
11
13
|
"collection-api/"
|
@@ -6,6 +6,7 @@ module Dina
|
|
6
6
|
self.paginator = JsonApiClient::Paginating::NestedParamPaginator
|
7
7
|
|
8
8
|
before_create :on_before_create
|
9
|
+
before_save :on_before_save
|
9
10
|
|
10
11
|
def self.endpoint_path
|
11
12
|
end
|
@@ -41,5 +42,11 @@ module Dina
|
|
41
42
|
self.attributes = self.attributes.deep_symbolize_keys
|
42
43
|
end
|
43
44
|
|
45
|
+
def on_before_save
|
46
|
+
if !self.valid?
|
47
|
+
raise ObjectInvalid, "#{self.class} is invalid. #{self.errors.map(&:message).join("; ")}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
44
51
|
end
|
45
52
|
end
|
@@ -45,7 +45,7 @@ module Dina
|
|
45
45
|
has_many :collectors, class_name: "Person"
|
46
46
|
has_many :attachment, class_name: "Attachment"
|
47
47
|
|
48
|
-
validates_presence_of :group
|
48
|
+
validates_presence_of :group, message: "group is required"
|
49
49
|
|
50
50
|
before_save :on_before_save
|
51
51
|
|
@@ -70,6 +70,7 @@ module Dina
|
|
70
70
|
if !self.geoReferenceAssertions.empty? && self.geoReferenceAssertions[0][:dwcDecimalLatitude].nil?
|
71
71
|
self.geoReferenceAssertions = nil
|
72
72
|
end
|
73
|
+
super
|
73
74
|
end
|
74
75
|
|
75
76
|
end
|
@@ -15,10 +15,10 @@ module Dina
|
|
15
15
|
property :createdBy, type: :string
|
16
16
|
property :createdOn, type: :time
|
17
17
|
|
18
|
-
|
18
|
+
belongs_to :institution, shallow_path: true, class_name: "Institution"
|
19
19
|
has_one :parent_collection, class_name: "Collection"
|
20
20
|
|
21
|
-
validates_presence_of :group
|
21
|
+
validates_presence_of :group, message: "group is required"
|
22
22
|
|
23
23
|
def self.endpoint_path
|
24
24
|
"collection-api/"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_rel 'base_model'
|
2
|
+
|
3
|
+
module Dina
|
4
|
+
class CollectionSequenceGenerator < BaseModel
|
5
|
+
property :id, type: :string, default: SecureRandom.uuid
|
6
|
+
property :amount, type: :string
|
7
|
+
|
8
|
+
def self.endpoint_path
|
9
|
+
"collection-api/"
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.table_name
|
13
|
+
"collection-sequence-generator"
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
data/lib/dina/models/file.rb
CHANGED
@@ -1,40 +1,44 @@
|
|
1
|
-
require_rel 'base_model'
|
2
|
-
|
3
1
|
module Dina
|
4
|
-
class File
|
5
|
-
|
2
|
+
class File
|
3
|
+
attr_accessor :file_path, :group
|
6
4
|
|
7
|
-
def
|
8
|
-
"objectstore-api/"
|
5
|
+
def initialize
|
9
6
|
end
|
10
7
|
|
11
|
-
def
|
12
|
-
"
|
8
|
+
def endpoint_path
|
9
|
+
"objectstore-api/"
|
13
10
|
end
|
14
11
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
=begin
|
12
|
+
def table_name
|
13
|
+
"file/#{@group}"
|
14
|
+
end
|
19
15
|
|
20
|
-
def
|
21
|
-
|
22
|
-
raise Exception.new "file is not of class File or does not exist"
|
23
|
-
end
|
24
|
-
super
|
25
|
-
set_headers
|
16
|
+
def url
|
17
|
+
Dina::Authentication.endpoint_url + endpoint_path + table_name
|
26
18
|
end
|
27
19
|
|
28
|
-
|
20
|
+
def file
|
21
|
+
::File.new(file_path)
|
22
|
+
end
|
29
23
|
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
24
|
+
def save
|
25
|
+
if group.nil?
|
26
|
+
raise ObjectInvalid, "#{self.class} is invalid. group is required."
|
27
|
+
end
|
28
|
+
if file_path.nil? || !::File.exist?(file_path)
|
29
|
+
raise ObjectInvalid, "#{self.class} is invalid. file not found in file_path."
|
30
|
+
end
|
31
|
+
response = RestClient::Request.execute(
|
32
|
+
method: :post,
|
33
|
+
headers: { authorization: Dina::Authentication.header },
|
34
|
+
url: url,
|
35
|
+
payload: {
|
36
|
+
multipart: true,
|
37
|
+
file: file
|
38
|
+
}
|
39
|
+
)
|
40
|
+
JSON.parse(response, symbolize_names: true)
|
36
41
|
end
|
37
|
-
=end
|
38
42
|
|
39
43
|
end
|
40
44
|
end
|
@@ -16,52 +16,5 @@ module Dina
|
|
16
16
|
"identifier"
|
17
17
|
end
|
18
18
|
|
19
|
-
=begin
|
20
|
-
TODO: fix because identifier has independent model now
|
21
|
-
|
22
|
-
def self.find_by_orcid(orcid)
|
23
|
-
if orcid.include? "http"
|
24
|
-
orcid = orcid.orcid_from_url
|
25
|
-
end
|
26
|
-
if orcid.is_orcid?
|
27
|
-
orcid = "https://orcid.org/#{orcid}"
|
28
|
-
where("identifiers.uri": orcid).all.first
|
29
|
-
else
|
30
|
-
nil
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.find_by_wikidata(wikidata)
|
35
|
-
if wikidata.include? "http"
|
36
|
-
wikidata = wikidata.wiki_from_url
|
37
|
-
end
|
38
|
-
if wikidata.is_wiki_id?
|
39
|
-
wikidata = "http://www.wikidata.org/entity/#{wikidata}"
|
40
|
-
where("identifiers.uri": wikidata).all.first
|
41
|
-
else
|
42
|
-
nil
|
43
|
-
end
|
44
|
-
where("identifiers.uri": wikidata).all.first
|
45
|
-
end
|
46
|
-
|
47
|
-
def orcid
|
48
|
-
identifiers.select{|o| o[:type] == "ORCID"}.first[:uri]
|
49
|
-
end
|
50
|
-
|
51
|
-
def orcid=(uri)
|
52
|
-
identifiers.delete_if{|o| o[:type] == "ORCID"}
|
53
|
-
identifiers << { type: "ORCID", uri: uri }
|
54
|
-
end
|
55
|
-
|
56
|
-
def wikidata
|
57
|
-
identifiers.select{|o| o[:type] == "WIKIDATA"}.first[:uri]
|
58
|
-
end
|
59
|
-
|
60
|
-
def wikidata=(id)
|
61
|
-
identifiers.delete_if{|o| o[:type] == "WIKIDATA"}
|
62
|
-
identifiers << { type: "WIKIDATA", uri: uri }
|
63
|
-
end
|
64
|
-
=end
|
65
|
-
|
66
19
|
end
|
67
20
|
end
|
@@ -12,7 +12,6 @@ module Dina
|
|
12
12
|
property :group, type: :string
|
13
13
|
property :managedAttributes, type: :object
|
14
14
|
property :dwcOtherCatalogNumbers, type: :array
|
15
|
-
property :preparationMethod, type: :string
|
16
15
|
property :preservationType, type: :string
|
17
16
|
property :preparationFixative, type: :string
|
18
17
|
property :preparationMaterials, type: :string
|
@@ -24,6 +23,9 @@ module Dina
|
|
24
23
|
property :stateChangedOn, type: :time
|
25
24
|
property :stateChangeRemarks, type: :string
|
26
25
|
property :materialSampleRemarks, type: :string
|
26
|
+
property :restrictionFieldsExtension, type: :array
|
27
|
+
property :restrictionRemarks, type: :string
|
28
|
+
property :isRestricted, type: :boolean
|
27
29
|
property :materialSampleChildren, type: :array
|
28
30
|
property :associations, type: :array, default: []
|
29
31
|
property :tags, type: :array, default: []
|
@@ -34,21 +36,22 @@ module Dina
|
|
34
36
|
property :hierarchy, type: :object
|
35
37
|
property :allowDuplicateName, type: :boolean
|
36
38
|
|
37
|
-
has_one :collection
|
38
|
-
has_one :parent_material_sample, class_name: "MaterialSample"
|
39
|
+
has_one :collection, class_name: "Collection"
|
39
40
|
has_one :collecting_event, class_name: "CollectingEvent"
|
40
|
-
has_one :preparation_type
|
41
|
-
has_one :
|
42
|
-
has_one :
|
43
|
-
has_one :
|
44
|
-
|
45
|
-
|
41
|
+
has_one :preparation_type, class_name: "PreparationType"
|
42
|
+
has_one :preparation_method, class_name: "PreparationMethod"
|
43
|
+
has_one :parent_material_sample, class_name: "MaterialSample"
|
44
|
+
has_one :preparation_protocol, class_name: "Protocol"
|
45
|
+
has_one :acquisition_event, class_name: "AcquisitionEvent"
|
46
|
+
has_one :storage_unit, class_name: "StorageUnit"
|
47
|
+
has_many :prepared_by, class_name: "Person"
|
48
|
+
has_many :attachment, class_name: "Attachment"
|
46
49
|
has_many :projects, class_name: "Project"
|
47
|
-
has_many :
|
48
|
-
has_many :preparation_attachment, class_name: "Attachment" #TODO: error requesting Dina::MaterialSample::Metadatum
|
50
|
+
has_many :assemblages, class_name: "Assemblage"
|
49
51
|
has_many :organism, class_name: "Organism"
|
50
52
|
|
51
|
-
validates_presence_of :group, :
|
53
|
+
validates_presence_of :group, message: "group is required"
|
54
|
+
validates_presence_of :materialSampleName, message: "materialSampleName is required"
|
52
55
|
|
53
56
|
def self.endpoint_path
|
54
57
|
"collection-api/"
|
@@ -3,40 +3,37 @@ require_rel 'base_model'
|
|
3
3
|
module Dina
|
4
4
|
class ObjectStore < BaseModel
|
5
5
|
property :id, type: :string, default: SecureRandom.uuid
|
6
|
+
property :createdBy, type: :string
|
7
|
+
property :createdOn, type: :time
|
6
8
|
property :group, type: :string
|
7
|
-
property :dcType, type: :string
|
8
|
-
property :originalFilename, type: :string
|
9
|
-
property :bucket, type: :string
|
10
|
-
property :dateTimeDigitized, type: :string
|
11
|
-
property :fileIdentifier, type: :string
|
12
|
-
property :fileExtension, type: :string
|
13
9
|
property :dcFormat, type: :string
|
14
10
|
property :dcType, type: :string
|
15
|
-
property :
|
11
|
+
property :acSubtype, type: :string
|
12
|
+
property :fileIdentifier, type: :string
|
13
|
+
property :bucket, type: :string
|
16
14
|
property :acCaption, type: :string
|
15
|
+
property :acDigitizationDate, type: :time
|
17
16
|
property :xmpMetadataDate, type: :time
|
18
|
-
property :xmpRightsWebStatement, type: :string, default: "https://open.canada.ca/en/open-government-licence-canada"
|
19
|
-
property :dcRights, type: :string, default: "© Her Majesty The Queen in Right of Canada, as represented by the Minister of Agriculture and Agri-Food | © Sa Majesté la Reine du chef du Canada, représentée par le ministre de l’Agriculture et de l’Agroalimentaire"
|
20
|
-
property :xmpRightsOwner, type: :string, default: "Government of Canada"
|
21
|
-
property :xmpRightsUsageTerms, type: :string, default: "Government of Canada Usage Term"
|
22
|
-
property :orientation, type: :integer
|
23
17
|
property :originalFilename, type: :string
|
18
|
+
property :fileExtension, type: :string
|
24
19
|
property :acHashFunction, type: :string, default: "SHA-1"
|
25
20
|
property :acHashValue, type: :string
|
26
|
-
property :
|
21
|
+
property :xmpRightsUsageTerms, type: :string, default: "Government of Canada Usage Term"
|
22
|
+
property :xmpRightsWebStatement, type: :string, default: "https://open.canada.ca/en/open-government-licence-canada"
|
23
|
+
property :dcRights, type: :string, default: "© Her Majesty The Queen in Right of Canada, as represented by the Minister of Agriculture and Agri-Food | © Sa Majesté la Reine du chef du Canada, représentée par le ministre de l’Agriculture et de l’Agroalimentaire"
|
24
|
+
property :xmpRightsOwner, type: :string, default: "Government of Canada"
|
27
25
|
property :publiclyReleasable, type: :boolean, default: true
|
28
26
|
property :notPubliclyReleasableReason, type: :string
|
27
|
+
property :managedAttributes, type: :object
|
29
28
|
property :acTags, type: :string
|
29
|
+
property :orientation, type: :integer
|
30
30
|
property :resourceExternalURL, type: :string
|
31
|
-
property :managedAttributes, type: :object
|
32
|
-
property :createdBy, type: :string
|
33
|
-
property :createdOn, type: :time
|
34
31
|
|
35
32
|
has_one :ac_metadata_creator, class_name: "Person"
|
36
33
|
has_one :dc_creator, class_name: "Person"
|
37
34
|
has_many :derivatives, class_name: "Derivative"
|
38
35
|
|
39
|
-
validates_presence_of :group
|
36
|
+
validates_presence_of :group, message: "group is required"
|
40
37
|
|
41
38
|
def self.endpoint_path
|
42
39
|
"objectstore-api/"
|
@@ -46,5 +43,14 @@ module Dina
|
|
46
43
|
"metadata"
|
47
44
|
end
|
48
45
|
|
46
|
+
private
|
47
|
+
|
48
|
+
def on_before_save
|
49
|
+
if self.bucket.nil?
|
50
|
+
self.bucket = self.group
|
51
|
+
end
|
52
|
+
super
|
53
|
+
end
|
54
|
+
|
49
55
|
end
|
50
56
|
end
|
@@ -19,21 +19,5 @@ module Dina
|
|
19
19
|
"managed-attribute"
|
20
20
|
end
|
21
21
|
|
22
|
-
def english_description=(desc)
|
23
|
-
description[:en] = desc
|
24
|
-
end
|
25
|
-
|
26
|
-
def english_description
|
27
|
-
description[:en]
|
28
|
-
end
|
29
|
-
|
30
|
-
def french_description=(desc)
|
31
|
-
description[:fr] = desc
|
32
|
-
end
|
33
|
-
|
34
|
-
def french_description
|
35
|
-
description[:fr]
|
36
|
-
end
|
37
|
-
|
38
22
|
end
|
39
23
|
end
|
@@ -3,6 +3,10 @@ require_rel 'base_model'
|
|
3
3
|
module Dina
|
4
4
|
class ObjectSubtype < BaseModel
|
5
5
|
property :id, type: :string, default: SecureRandom.uuid
|
6
|
+
property :createdBy, type: :string
|
7
|
+
property :createdOn, type: :time
|
8
|
+
property :dcType, type: :string
|
9
|
+
property :acSubtype, type: :string
|
6
10
|
|
7
11
|
def self.endpoint_path
|
8
12
|
"objectstore-api/"
|
data/lib/dina/models/organism.rb
CHANGED
@@ -3,7 +3,6 @@ require_rel 'base_model'
|
|
3
3
|
module Dina
|
4
4
|
class Organization < BaseModel
|
5
5
|
property :id, type: :string, default: SecureRandom.uuid
|
6
|
-
#NOTE: should be type: :multilingual_description but API not adjusted
|
7
6
|
property :names, type: :array, default: [{languageCode: "EN", name: nil}, {languageCode: "FR", name: nil}]
|
8
7
|
property :aliases, type: :array, default: []
|
9
8
|
property :createdBy, type: :string
|
data/lib/dina/models/person.rb
CHANGED
@@ -13,10 +13,11 @@ module Dina
|
|
13
13
|
property :createdBy, type: :string
|
14
14
|
property :createdOn, type: :time
|
15
15
|
|
16
|
-
has_many :organizations
|
17
|
-
has_many :identifiers
|
16
|
+
has_many :organizations, class_name: "Organization"
|
17
|
+
has_many :identifiers, class_name: "Identifier"
|
18
18
|
|
19
|
-
validates_presence_of :familyNames
|
19
|
+
validates_presence_of :familyNames, message: "familyNames is required"
|
20
|
+
validates_presence_of :displayName
|
20
21
|
|
21
22
|
def self.endpoint_path
|
22
23
|
"agent-api/"
|
@@ -26,13 +27,17 @@ module Dina
|
|
26
27
|
"person"
|
27
28
|
end
|
28
29
|
|
30
|
+
# Finds a Person object using an email address
|
31
|
+
#
|
32
|
+
# @param email [String] an email address
|
33
|
+
# @return Person [Object] a Person object
|
29
34
|
def self.find_by_email(email)
|
30
35
|
where("email": email).all.first
|
31
36
|
end
|
32
37
|
|
33
38
|
private
|
34
39
|
|
35
|
-
def
|
40
|
+
def on_before_save
|
36
41
|
if self.displayName.nil? || self.displayName == ""
|
37
42
|
self.displayName = [familyNames, givenNames].compact.join(", ")
|
38
43
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_rel 'base_model'
|
2
|
+
|
3
|
+
module Dina
|
4
|
+
class PreparationMethod < BaseModel
|
5
|
+
property :id, type: :string, default: SecureRandom.uuid
|
6
|
+
property :group, type: :string
|
7
|
+
property :name, type: :string
|
8
|
+
property :multilingualDescription, type: :multilingual_description
|
9
|
+
property :createdBy, type: :string
|
10
|
+
property :createdOn, type: :time
|
11
|
+
|
12
|
+
validates_presence_of :group, message: "group is required"
|
13
|
+
|
14
|
+
def self.endpoint_path
|
15
|
+
"collection-api/"
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.table_name
|
19
|
+
"preparation-method"
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
data/lib/dina/models/project.rb
CHANGED
@@ -12,9 +12,9 @@ module Dina
|
|
12
12
|
property :createdBy, type: :string
|
13
13
|
property :createdOn, type: :time
|
14
14
|
|
15
|
-
has_many :attachment, class_name: "
|
15
|
+
has_many :attachment, class_name: "Attachment"
|
16
16
|
|
17
|
-
validates_presence_of :group
|
17
|
+
validates_presence_of :group, message: "group is required"
|
18
18
|
|
19
19
|
def self.endpoint_path
|
20
20
|
"collection-api/"
|
data/lib/dina/models/protocol.rb
CHANGED
@@ -9,9 +9,9 @@ module Dina
|
|
9
9
|
property :createdBy, type: :string
|
10
10
|
property :createdOn, type: :time
|
11
11
|
|
12
|
-
has_many :attachment, class_name: "
|
12
|
+
has_many :attachment, class_name: "Attachment"
|
13
13
|
|
14
|
-
validates_presence_of :group
|
14
|
+
validates_presence_of :group, message: "group is required"
|
15
15
|
|
16
16
|
def self.endpoint_path
|
17
17
|
"collection-api/"
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_rel 'base_model'
|
2
|
+
|
3
|
+
module Dina
|
4
|
+
class Transaction < BaseModel
|
5
|
+
property :id, type: :string, default: SecureRandom.uuid
|
6
|
+
property :transactionNumber, type: :string
|
7
|
+
property :materialDirection, type: :string
|
8
|
+
property :materialToBeReturned, type: :boolean
|
9
|
+
property :group, type: :string
|
10
|
+
property :transactionType, type: :string
|
11
|
+
property :otherIdentifiers, type: :array, default: []
|
12
|
+
property :status, type: :string
|
13
|
+
property :purpose, type: :string
|
14
|
+
property :openedDate, type: :time
|
15
|
+
property :closedDate, type: :time
|
16
|
+
property :dueDate, type: :time
|
17
|
+
property :remarks, type: :string
|
18
|
+
property :managedAttributes, type: :object
|
19
|
+
property :agentRoles, type: :array
|
20
|
+
property :shipment, type: :object
|
21
|
+
property :createdBy, type: :string
|
22
|
+
property :createdOn, type: :time
|
23
|
+
|
24
|
+
has_many :material_samples, class_name: "MaterialSample"
|
25
|
+
has_many :attachment, class_name: "Attachment"
|
26
|
+
has_many :involved_agents, class_name: "Person"
|
27
|
+
|
28
|
+
validates_presence_of :group, message: "group is required"
|
29
|
+
|
30
|
+
def self.endpoint_path
|
31
|
+
"loan-transaction/"
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.table_name
|
35
|
+
"transaction"
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
data/lib/dina/models/user.rb
CHANGED
data/lib/dina/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dina
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David P. Shorthouse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json_api_client
|
@@ -136,17 +136,19 @@ files:
|
|
136
136
|
- lib/dina/casters/multilingual_title.rb
|
137
137
|
- lib/dina/casters/multilingual_title_caster.rb
|
138
138
|
- lib/dina/casters/object_caster.rb
|
139
|
+
- lib/dina/components/agent_role.rb
|
139
140
|
- lib/dina/components/determination.rb
|
140
141
|
- lib/dina/components/georeference_assertion.rb
|
142
|
+
- lib/dina/components/shipment.rb
|
141
143
|
- lib/dina/exceptions.rb
|
142
144
|
- lib/dina/models/acquisition_event.rb
|
143
145
|
- lib/dina/models/assemblage.rb
|
144
146
|
- lib/dina/models/attachment.rb
|
145
147
|
- lib/dina/models/base_model.rb
|
146
|
-
- lib/dina/models/bucket.rb
|
147
148
|
- lib/dina/models/collecting_event.rb
|
148
149
|
- lib/dina/models/collecting_method.rb
|
149
150
|
- lib/dina/models/collection.rb
|
151
|
+
- lib/dina/models/collection_sequence_generator.rb
|
150
152
|
- lib/dina/models/derivative.rb
|
151
153
|
- lib/dina/models/file.rb
|
152
154
|
- lib/dina/models/identifier.rb
|
@@ -159,11 +161,13 @@ files:
|
|
159
161
|
- lib/dina/models/organism.rb
|
160
162
|
- lib/dina/models/organization.rb
|
161
163
|
- lib/dina/models/person.rb
|
164
|
+
- lib/dina/models/preparation_method.rb
|
162
165
|
- lib/dina/models/preparation_type.rb
|
163
166
|
- lib/dina/models/project.rb
|
164
167
|
- lib/dina/models/protocol.rb
|
165
168
|
- lib/dina/models/storage_unit.rb
|
166
169
|
- lib/dina/models/storage_unit_type.rb
|
170
|
+
- lib/dina/models/transaction.rb
|
167
171
|
- lib/dina/models/user.rb
|
168
172
|
- lib/dina/search/base_search.rb
|
169
173
|
- lib/dina/search/search.rb
|
@@ -173,7 +177,7 @@ files:
|
|
173
177
|
- lib/dina/utils/identifier.rb
|
174
178
|
- lib/dina/utils/identifier_type.rb
|
175
179
|
- lib/dina/version.rb
|
176
|
-
homepage:
|
180
|
+
homepage: https://github.com/dshorthouse/dina
|
177
181
|
licenses:
|
178
182
|
- MIT
|
179
183
|
metadata: {}
|