Module: Shared::IsDwcOccurrence
- Extended by:
- ActiveSupport::Concern
- Included in:
- AssertedDistribution::DwcExtensions, CollectionObject::BiologicalCollectionObject, CollectionObject::DwcExtensions, FieldOccurrence::BiologicalFieldOccurrence, FieldOccurrence::DwcExtensions
- Defined in:
- app/models/concerns/shared/is_dwc_occurrence.rb
Overview
Shared code for data classes that can be indexed/serialized as DwcOccurrence records
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- DWC_DELIMITER =
These probably belong in a global helper
' | '.freeze
- VIEW_EXCLUSIONS =
[ :footprintWKT ].freeze
Instance Method Summary collapse
-
#dwc_occurrence_attribute_values(mode = :all) ⇒ Array
An array of the values presently computed for this occurrence.
-
#dwc_occurrence_attributes(taxonworks_fields = true) ⇒ Object
!! This is expensive, it recomputes values for every field.
-
#dwc_occurrence_basis ⇒ Object
Moved here from DwcOccurrence#basis since that method is only called in before_validate, which never gets called on the dwc_occurrence_attributes path here that happens when something like adding a new BiocurationClass triggers a background job set_dwc_occurrence call to update dwc_occurrence.
- #dwc_occurrence_id ⇒ Object
-
#get_dwc_occurrence ⇒ DwcOccurrence
Does not rebuild if already built.
-
#set_dwc_occurrence ⇒ DwcOccurrence
!! always touches the database.
Instance Method Details
#dwc_occurrence_attribute_values(mode = :all) ⇒ Array
Returns an array of the values presently computed for this occurrence.
137 138 139 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 137 def dwc_occurrence_attribute_values(mode = :all) [id, dwc_occurrence.id] + self.class.dwc_attribute_vector(mode)[2..-1].collect{|a| a.name}.collect{|f| dwc_occurrence.send(f) } end |
#dwc_occurrence_attributes(taxonworks_fields = true) ⇒ Object
!! This is expensive, it recomputes values for every field. !! See dwc_occurrence
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 114 def dwc_occurrence_attributes(taxonworks_fields = true) a = {} self.class::DWC_OCCURRENCE_MAP.each do |k,v| a[k] = send(v) end a[:occurrenceID] = dwc_occurrence_id a[:basisOfRecord] = dwc_occurrence_basis if taxonworks_fields a[:project_id] = project_id # TODO: semantics of these may need to be revisited, particularly updated_by_id a[:created_by_id] = created_by_id a[:updated_by_id] = updated_by_id # !! Do not set updated_at here !! end a end |
#dwc_occurrence_basis ⇒ Object
Moved here from DwcOccurrence#basis since that method is only called in before_validate, which never gets called on the dwc_occurrence_attributes path here that happens when something like adding a new BiocurationClass triggers a background job set_dwc_occurrence call to update dwc_occurrence.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 88 def dwc_occurrence_basis case self.class.base_class.name when 'CollectionObject' is_fossil? ? 'FossilSpecimen' : 'PreservedSpecimen' when 'AssertedDistribution' # Used to fork b/b Source::Human and Source::Bibtex: case source&.type || sources.order(cached_nomenclature_date: :DESC).first&.type when 'Source::Bibtex' 'MaterialCitation' when 'Source::Human' 'HumanObservation' else # Not recommended at this point 'Occurrence' end when 'FieldOccurrence' machine_output? ? 'MachineObservation' : 'HumanObservation' else 'Undefined' end end |
#dwc_occurrence_id ⇒ Object
78 79 80 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 78 def dwc_occurrence_id dwc_occurrence&.occurrence_identifier&.cached end |
#get_dwc_occurrence ⇒ DwcOccurrence
Returns does not rebuild if already built.
143 144 145 146 147 148 149 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 143 def get_dwc_occurrence if dwc_occurrence_persisted? dwc_occurrence else set_dwc_occurrence end end |
#set_dwc_occurrence ⇒ DwcOccurrence
Returns !! always touches the database.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 53 def set_dwc_occurrence retried = false begin if dwc_occurrence_persisted? dwc_occurrence.generate_uuid_if_required # TODO: at some point when synchronized make this optional dwc_occurrence.update_columns( dwc_occurrence_attributes.merge( rebuild_set: nil, updated_at: Time.zone.now) ) else create_dwc_occurrence!(dwc_occurrence_attributes) end rescue ActiveRecord::ActiveRecordError unless retried retried = true dwc_occurrence&.reload retry else raise end end dwc_occurrence end |