Module: Shared::IsDwcOccurrence
- Extended by:
- ActiveSupport::Concern
- 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
' | '
- VIEW_EXCLUSIONS =
[ :footprintWKT ]
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
- #dwc_occurrence_id ⇒ Object
-
#get_dwc_occurrence ⇒ DwcOccurrence
Does not rebuild if exists.
-
#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.
99 100 101 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 99 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
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 76 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 a[:updated_at] = Time.now # !! Not applied via this key, but kept for reference, see `touch` in `set_dwc_occurrence` end a end |
#dwc_occurrence_id ⇒ Object
72 73 74 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 72 def dwc_occurrence_id dwc_occurrence&.occurrence_identifier&.cached end |
#get_dwc_occurrence ⇒ DwcOccurrence
Returns does not rebuild if exists.
105 106 107 108 109 110 111 112 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 105 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
Returns always touches the database.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'app/models/concerns/shared/is_dwc_occurrence.rb', line 50 def set_dwc_occurrence retried = false begin if dwc_occurrence_persisted? dwc_occurrence.generate_uuid_if_required 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 |