dina 0.5.1.0 → 0.5.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 +4 -4
- data/lib/dina/components/agent_role.rb +14 -3
- data/lib/dina/components/determination.rb +42 -2
- data/lib/dina/components/georeference_assertion.rb +12 -2
- data/lib/dina/components/shipment.rb +9 -1
- data/lib/dina/models/agent/identifier.rb +3 -0
- data/lib/dina/models/base_model.rb +2 -1
- data/lib/dina/models/material_sample/collecting_event.rb +1 -1
- data/lib/dina/models/material_sample/material_sample.rb +1 -1
- data/lib/dina/models/object_store/object_store.rb +6 -2
- data/lib/dina/models/transaction/transaction.rb +3 -2
- data/lib/dina/utils/identifier.rb +14 -6
- data/lib/dina/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f73e6c200e682c91492c0f50854dc73a9fac3537a65eb12a5fe1d974b72adf09
         | 
| 4 | 
            +
              data.tar.gz: 4fa9641b7ff96f95c88b30b1e6857aa9e02dc6ae8639efd84aa034a0908fa182
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 394bac789e4e01efe38447edb8042ae9f6dd3510b1a97aa06f6545f07a9133466a2afbcae3fc0e9d90fa053b8ba0f3c651b46dabb7f7dd702566870d9e5e1787
         | 
| 7 | 
            +
              data.tar.gz: fc3d1f5e15028d8724ff1a37bc6816f28cbe639e79c67e9d75dd8d7dfa9e70f9d017c14cb31c79184f8f0a135d23750548ad98e1127d00fd2ea1d45fff8b97a1
         | 
| @@ -1,17 +1,28 @@ | |
| 1 1 | 
             
            module Dina
         | 
| 2 2 | 
             
              class AgentRole
         | 
| 3 | 
            -
                attr_accessor :agent # | 
| 4 | 
            -
                attr_accessor :roles # | 
| 3 | 
            +
                attr_accessor :agent #An array of known UUIDs for a Person
         | 
| 4 | 
            +
                attr_accessor :roles #An array of roles: Owner, Borrower, Prepared By
         | 
| 5 5 | 
             
                attr_accessor :date
         | 
| 6 6 | 
             
                attr_accessor :remarks
         | 
| 7 7 |  | 
| 8 8 | 
             
                def initialize
         | 
| 9 | 
            +
                  @agent = []
         | 
| 10 | 
            +
                  @roles = []
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                def add_agent(id)
         | 
| 14 | 
            +
                  raise PropertyValueInvalid, "Agent must be a UUID." if !id.is_uuid?
         | 
| 15 | 
            +
                  @agent << id
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def add_role(role)
         | 
| 19 | 
            +
                  @roles << role
         | 
| 9 20 | 
             
                end
         | 
| 10 21 |  | 
| 11 22 | 
             
                def to_hash
         | 
| 12 23 | 
             
                  hash = {}
         | 
| 13 24 | 
             
                  instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
         | 
| 14 | 
            -
                  hash
         | 
| 25 | 
            +
                  hash.deep_symbolize_keys
         | 
| 15 26 | 
             
                end
         | 
| 16 27 |  | 
| 17 28 | 
             
              end
         | 
| @@ -9,7 +9,7 @@ module Dina | |
| 9 9 | 
             
                attr_accessor :determinationRemarks
         | 
| 10 10 | 
             
                attr_accessor :typeStatus
         | 
| 11 11 | 
             
                attr_accessor :typeStatusEvidence
         | 
| 12 | 
            -
                attr_accessor :determiner # | 
| 12 | 
            +
                attr_accessor :determiner #An array of known UUIDs for Person
         | 
| 13 13 | 
             
                attr_accessor :determinedOn
         | 
| 14 14 | 
             
                attr_accessor :qualifier
         | 
| 15 15 | 
             
                attr_accessor :scientificNameSource
         | 
| @@ -18,13 +18,53 @@ module Dina | |
| 18 18 | 
             
                attr_accessor :isFiledAs #boolean
         | 
| 19 19 | 
             
                attr_accessor :managedAttributes #array
         | 
| 20 20 |  | 
| 21 | 
            +
                attr_accessor :classification
         | 
| 22 | 
            +
                attr_accessor :ranks
         | 
| 23 | 
            +
             | 
| 21 24 | 
             
                def initialize
         | 
| 25 | 
            +
                  @scientificNameDetails = {}
         | 
| 26 | 
            +
                  @determiner = []
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                # Add a materialized classification string to scientificNameDetails
         | 
| 30 | 
            +
                # Path should use pipes, "|" as separators
         | 
| 31 | 
            +
                #
         | 
| 32 | 
            +
                # @param path [String] the classification
         | 
| 33 | 
            +
                def classification=(path)
         | 
| 34 | 
            +
                  if !path.instance_of?(String)
         | 
| 35 | 
            +
                    raise PropertyValueInvalid, "Classification must be a string with individual items separated by pipes."
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                  @classification = path
         | 
| 38 | 
            +
                  scientificNameDetails.merge!({ classificationPath: path })
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                # Add a materialized ranks string to scientificNameDetails
         | 
| 42 | 
            +
                # Ranks should use pipes, "|" as separators
         | 
| 43 | 
            +
                #
         | 
| 44 | 
            +
                # @param ranks [String] the ranks
         | 
| 45 | 
            +
                def ranks=(ranks)
         | 
| 46 | 
            +
                  if !ranks.instance_of?(String)
         | 
| 47 | 
            +
                    raise PropertyValueInvalid, "Ranks must be a string with individual items separated by pipes."
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
                  @ranks = ranks
         | 
| 50 | 
            +
                  scientificNameDetails.merge!({ classificationRanks: ranks })
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                # Add a determiner as UUID to the array of determiner
         | 
| 54 | 
            +
                #
         | 
| 55 | 
            +
                # @param id [String] a UUID for a determiner
         | 
| 56 | 
            +
                def add_determiner(id)
         | 
| 57 | 
            +
                  raise PropertyValueInvalid, "Determiner must be a UUID." if !id.is_uuid?
         | 
| 58 | 
            +
                  @determiner << id
         | 
| 22 59 | 
             
                end
         | 
| 23 60 |  | 
| 61 | 
            +
                # Produce a hash with symbolized keys
         | 
| 24 62 | 
             
                def to_hash
         | 
| 25 63 | 
             
                  hash = {}
         | 
| 64 | 
            +
                  remove_instance_variable(:@classification) if @classification
         | 
| 65 | 
            +
                  remove_instance_variable(:@ranks) if @ranks
         | 
| 26 66 | 
             
                  instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
         | 
| 27 | 
            -
                  hash
         | 
| 67 | 
            +
                  hash.deep_symbolize_keys
         | 
| 28 68 | 
             
                end
         | 
| 29 69 |  | 
| 30 70 | 
             
              end
         | 
| @@ -9,17 +9,27 @@ module Dina | |
| 9 9 | 
             
                attr_accessor :dwcGeoreferenceProtocol
         | 
| 10 10 | 
             
                attr_accessor :dwcGeoreferenceSources
         | 
| 11 11 | 
             
                attr_accessor :dwcGeoreferenceRemarks
         | 
| 12 | 
            -
                attr_accessor :dwcGeodeticDatum | 
| 12 | 
            +
                attr_accessor :dwcGeodeticDatum
         | 
| 13 13 | 
             
                attr_accessor :isPrimary
         | 
| 14 14 | 
             
                attr_accessor :dwcGeoreferenceVerificationStatus
         | 
| 15 | 
            +
                attr_accessor :createdOn
         | 
| 15 16 |  | 
| 16 17 | 
             
                def initialize
         | 
| 18 | 
            +
                  @georeferencedBy = []
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                # Add a georeferencedBy as UUID to the array
         | 
| 22 | 
            +
                #
         | 
| 23 | 
            +
                # @param id [String] a UUID for a georeferencedBy
         | 
| 24 | 
            +
                def add_georeferencedBy(id)
         | 
| 25 | 
            +
                  raise PropertyValueInvalid, "georeferencedBy must be a UUID." if !id.is_uuid?
         | 
| 26 | 
            +
                  @georeferencedBy << id
         | 
| 17 27 | 
             
                end
         | 
| 18 28 |  | 
| 19 29 | 
             
                def to_hash
         | 
| 20 30 | 
             
                  hash = {}
         | 
| 21 31 | 
             
                  instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
         | 
| 22 | 
            -
                  hash
         | 
| 32 | 
            +
                  hash.deep_symbolize_keys
         | 
| 23 33 | 
             
                end
         | 
| 24 34 |  | 
| 25 35 | 
             
              end
         | 
| @@ -12,12 +12,20 @@ module Dina | |
| 12 12 | 
             
                attr_accessor :address # with properties receiverName, companyName, addressLine1, addressLine2, city, provinceState, zipCode, country
         | 
| 13 13 |  | 
| 14 14 | 
             
                def initialize
         | 
| 15 | 
            +
                  @address = {}
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def add_address(address)
         | 
| 19 | 
            +
                  if !address.instance_of?(Hash)
         | 
| 20 | 
            +
                    raise PropertyValueInvalid, "Address must be a Hash."
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                  @address.merge!(address)
         | 
| 15 23 | 
             
                end
         | 
| 16 24 |  | 
| 17 25 | 
             
                def to_hash
         | 
| 18 26 | 
             
                  hash = {}
         | 
| 19 27 | 
             
                  instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
         | 
| 20 | 
            -
                  hash
         | 
| 28 | 
            +
                  hash.deep_symbolize_keys
         | 
| 21 29 | 
             
                end
         | 
| 22 30 |  | 
| 23 31 | 
             
              end
         | 
| @@ -10,6 +10,9 @@ module Dina | |
| 10 10 |  | 
| 11 11 | 
             
                belongs_to :person, shallow_path: true, class_name: "Person"
         | 
| 12 12 |  | 
| 13 | 
            +
                validates_presence_of :namespace, message: "namespace is required"
         | 
| 14 | 
            +
                validates_presence_of :value, message: "value is required"
         | 
| 15 | 
            +
             | 
| 13 16 | 
             
                def self.endpoint_path
         | 
| 14 17 | 
             
                  "agent-api/"
         | 
| 15 18 | 
             
                end
         | 
| @@ -30,7 +30,7 @@ module Dina | |
| 30 30 | 
             
                property :dwcMaximumDepthInMeters, type: :float
         | 
| 31 31 | 
             
                property :substrate, type: :string
         | 
| 32 32 | 
             
                property :remarks, type: :string
         | 
| 33 | 
            -
                property :publiclyReleasable, type: :boolean
         | 
| 33 | 
            +
                property :publiclyReleasable, type: :boolean, default: true
         | 
| 34 34 | 
             
                property :notPubliclyReleasableReason, type: :string, default: nil
         | 
| 35 35 | 
             
                property :tags, type: :array, default: []
         | 
| 36 36 | 
             
                property :geographicPlaceNameSource, type: :string
         | 
| @@ -29,7 +29,7 @@ module Dina | |
| 29 29 | 
             
                property :materialSampleChildren, type: :array
         | 
| 30 30 | 
             
                property :associations, type: :array, default: []
         | 
| 31 31 | 
             
                property :tags, type: :array, default: []
         | 
| 32 | 
            -
                property :publiclyReleasable, type: :boolean
         | 
| 32 | 
            +
                property :publiclyReleasable, type: :boolean, default: true
         | 
| 33 33 | 
             
                property :notPubliclyReleasableReason, type: :string
         | 
| 34 34 | 
             
                property :hostOrganism, type: :object, default: { name: nil, remarks: nil }
         | 
| 35 35 | 
             
                property :scheduledActions, type: :object
         | 
| @@ -6,7 +6,7 @@ module Dina | |
| 6 6 | 
             
                property :createdBy, type: :string
         | 
| 7 7 | 
             
                property :createdOn, type: :time
         | 
| 8 8 | 
             
                property :group, type: :string
         | 
| 9 | 
            -
                property :dcFormat, type: :string
         | 
| 9 | 
            +
                property :dcFormat, type: :string, default: "image/jpeg"
         | 
| 10 10 | 
             
                property :dcType, type: :string
         | 
| 11 11 | 
             
                property :acSubtype, type: :string
         | 
| 12 12 | 
             
                property :fileIdentifier, type: :string
         | 
| @@ -20,7 +20,7 @@ module Dina | |
| 20 20 | 
             
                property :acHashValue, type: :string
         | 
| 21 21 | 
             
                property :xmpRightsUsageTerms, type: :string, default: "Government of Canada Usage Term"
         | 
| 22 22 | 
             
                property :xmpRightsWebStatement, type: :string, default: "https://open.canada.ca/en/open-government-licence-canada"
         | 
| 23 | 
            -
                property :dcRights, type: :string, default: "©  | 
| 23 | 
            +
                property :dcRights, type: :string, default: "© His Majesty The King in Right of Canada, as represented by the Minister of Agriculture and Agri-Food | © Sa Majesté le Roi du chef du Canada, représentée par le ministre de l’Agriculture et de l’Agroalimentaire"
         | 
| 24 24 | 
             
                property :xmpRightsOwner, type: :string, default: "Government of Canada"
         | 
| 25 25 | 
             
                property :publiclyReleasable, type: :boolean, default: true
         | 
| 26 26 | 
             
                property :notPubliclyReleasableReason, type: :string
         | 
| @@ -34,6 +34,10 @@ module Dina | |
| 34 34 | 
             
                has_many :derivatives, class_name: "Derivative"
         | 
| 35 35 |  | 
| 36 36 | 
             
                validates_presence_of :group, message: "group is required"
         | 
| 37 | 
            +
                validates_presence_of :dcFormat, message: "dcFormat is required"
         | 
| 38 | 
            +
                validates_presence_of :dcType, message: "dcType is required"
         | 
| 39 | 
            +
                validates_presence_of :xmpRightsUsageTerms, message: "xmpRightsUsageTerms is required"
         | 
| 40 | 
            +
                validates_presence_of :dcRights, message: "dcRights is required"
         | 
| 37 41 |  | 
| 38 42 | 
             
                attr_accessor :accepted_types
         | 
| 39 43 |  | 
| @@ -16,8 +16,8 @@ module Dina | |
| 16 16 | 
             
                property :dueDate, type: :time
         | 
| 17 17 | 
             
                property :remarks, type: :string
         | 
| 18 18 | 
             
                property :managedAttributes, type: :object
         | 
| 19 | 
            -
                property :agentRoles, type: :array
         | 
| 20 | 
            -
                property :shipment, type: :object
         | 
| 19 | 
            +
                property :agentRoles, type: :array # Each of type Dina::AgentRole
         | 
| 20 | 
            +
                property :shipment, type: :object # Of type Dina::Shipment
         | 
| 21 21 | 
             
                property :createdBy, type: :string
         | 
| 22 22 | 
             
                property :createdOn, type: :time
         | 
| 23 23 |  | 
| @@ -26,6 +26,7 @@ module Dina | |
| 26 26 | 
             
                has_many :involved_agents, class_name: "Person"
         | 
| 27 27 |  | 
| 28 28 | 
             
                validates_presence_of :group, message: "group is required"
         | 
| 29 | 
            +
                validates_presence_of :materialDirection, message: "materialDirection is required"
         | 
| 29 30 |  | 
| 30 31 | 
             
                attr_accessor :accepted_directions
         | 
| 31 32 |  | 
| @@ -1,30 +1,34 @@ | |
| 1 1 | 
             
            # encoding: utf-8
         | 
| 2 2 | 
             
            class String
         | 
| 3 3 | 
             
              def is_orcid?
         | 
| 4 | 
            -
                ::Dina:: | 
| 4 | 
            +
                ::Dina::PersistentIdentifier.is_orcid_regex.match?(self) &&
         | 
| 5 5 | 
             
                ::Dina::Identifier.orcid_valid_checksum(self)
         | 
| 6 6 | 
             
              end
         | 
| 7 7 |  | 
| 8 8 | 
             
              def is_wiki_id?
         | 
| 9 | 
            -
                ::Dina:: | 
| 9 | 
            +
                ::Dina::PersistentIdentifier.is_wiki_regex.match?(self)
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 12 | 
             
              def is_doi?
         | 
| 13 | 
            -
                ::Dina:: | 
| 13 | 
            +
                ::Dina::PersistentIdentifier.is_doi_regex.match?(self)
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def is_uuid?
         | 
| 17 | 
            +
                ::Dina::PersistentIdentifier.is_uuid_regex.match?(self)
         | 
| 14 18 | 
             
              end
         | 
| 15 19 |  | 
| 16 20 | 
             
              def orcid_from_url
         | 
| 17 | 
            -
                ::Dina:: | 
| 21 | 
            +
                ::Dina::PersistentIdentifier.extract_orcid_regex.match(self)[0] rescue nil
         | 
| 18 22 | 
             
              end
         | 
| 19 23 |  | 
| 20 24 | 
             
              def wiki_from_url
         | 
| 21 | 
            -
                ::Dina:: | 
| 25 | 
            +
                ::Dina::PersistentIdentifier.extract_wiki_regex.match(self)[0] rescue nil
         | 
| 22 26 | 
             
              end
         | 
| 23 27 |  | 
| 24 28 | 
             
            end
         | 
| 25 29 |  | 
| 26 30 | 
             
            module Dina
         | 
| 27 | 
            -
              class  | 
| 31 | 
            +
              class PersistentIdentifier
         | 
| 28 32 |  | 
| 29 33 | 
             
                class << self
         | 
| 30 34 | 
             
                  def is_orcid_regex
         | 
| @@ -39,6 +43,10 @@ module Dina | |
| 39 43 | 
             
                    /^10.\d{4,9}\/[-._;()\/:<>A-Z0-9]+$/i
         | 
| 40 44 | 
             
                  end
         | 
| 41 45 |  | 
| 46 | 
            +
                  def is_uuid_regex
         | 
| 47 | 
            +
                    /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 42 50 | 
             
                  def orcid_valid_checksum(orcid_string)
         | 
| 43 51 | 
             
                    parts = orcid_string.scan(/[0-9X]/)
         | 
| 44 52 | 
             
                    mod = parts[0..14].map(&:to_i)
         | 
    
        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.5. | 
| 4 | 
            +
              version: 0.5.3.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-12- | 
| 11 | 
            +
            date: 2022-12-12 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: json_api_client
         |