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
!! 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.
108 109 110 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 108 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
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 86 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
77 78 79 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 77 def dwc_occurrence_id dwc_occurrence&.occurrence_identifier&.cached end |
#get_dwc_occurrence ⇒ DwcOccurrence
Returns does not rebuild if already built.
114 115 116 117 118 119 120 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 114 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.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 52 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( is_flagged_for_rebuild: 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 |