Module: Shared::IsDwcOccurrence
- Extended by:
- ActiveSupport::Concern
- Included in:
- AssertedDistribution, CollectionObject, CollectionObject::BiologicalCollectionObject, FieldOccurrence
- 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_id ⇒ Object
-
#get_dwc_occurrence ⇒ DwcOccurrence
Does not rebuild if already built.
-
#set_dwc_occurrence ⇒ DwcOccurrence
TODO: wrap in generic (reindex_dwc_occurrences method for use in InternalAttribute, TaxonDetermination, BiocurationClass and elsewhere).
Instance Method Details
#dwc_occurrence_attribute_values(mode = :all) ⇒ Array
Returns an array of the values presently computed for this occurrence.
106 107 108 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 106 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
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 84 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 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_id ⇒ Object
75 76 77 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 75 def dwc_occurrence_id dwc_occurrence&.occurrence_identifier&.cached end |
#get_dwc_occurrence ⇒ DwcOccurrence
Returns does not rebuild if already built.
112 113 114 115 116 117 118 119 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 112 def get_dwc_occurrence # TODO: why are extra queries fired if this is fired? if dwc_occurrence_persisted? dwc_occurrence else set_dwc_occurrence end end |
#set_dwc_occurrence ⇒ DwcOccurrence
TODO: wrap in generic (reindex_dwc_occurrences method for use in InternalAttribute, TaxonDetermination, BiocurationClass and elsewhere)
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# 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 syncronized make this optional dwc_occurrence.update_columns(dwc_occurrence_attributes) dwc_occurrence.touch(:updated_at) 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 |