Module: CollectionObject::DwcExtensions
- Extended by:
- ActiveSupport::Concern
- Included in:
- BiologicalCollectionObject
- Defined in:
- app/models/collection_object/dwc_extensions.rb
Instance Method Summary collapse
-
#api_image_link(image) ⇒ Object
TODO: likeley a helper.
- #dwc_associated_media ⇒ Object
- #dwc_associated_taxa ⇒ Object
- #dwc_catalog_number ⇒ Object
- #dwc_class ⇒ Object
- #dwc_collection_code ⇒ Object
-
#dwc_coordinate_uncertainty_in_meters ⇒ Object
TODO: extend to Georeferences when we understand how to describe spatial uncertainty.
- #dwc_country ⇒ Object
- #dwc_county ⇒ Object
-
#dwc_date_identified ⇒ Object
ISO 8601:2004(E).
- #dwc_day ⇒ Object
- #dwc_decimal_latitude ⇒ Object
- #dwc_decimal_longitude ⇒ Object
- #dwc_end_day_of_year ⇒ Object
- #dwc_event_date ⇒ Object
- #dwc_event_remarks ⇒ Object
- #dwc_event_time ⇒ Object
- #dwc_family ⇒ Object
- #dwc_field_number ⇒ Object
- #dwc_footprint_wkt ⇒ Object
- #dwc_genus ⇒ Object
- #dwc_geodetic_datum ⇒ Object
- #dwc_georeference_protocol ⇒ Object
- #dwc_georeference_remarks ⇒ Object
- #dwc_georeference_sources ⇒ Object
- #dwc_georeferenced_by ⇒ Object
-
#dwc_georeferenced_date ⇒ Object
georeferenceDate technically could look at papertrail to see when geographic_area_id appeared.
- #dwc_higher_classification ⇒ Object
- #dwc_identified_by ⇒ Object
- #dwc_identified_by_id ⇒ Object
-
#dwc_individual_count ⇒ Object
TODO: handle ranged lots.
- #dwc_infraspecific_epithet ⇒ Object
-
#dwc_institution_code ⇒ Object
we assert custody, NOT ownership.
-
#dwc_institution_id ⇒ Object
we assert custody, NOT ownership.
- #dwc_internal_attribute_for(target = :collection_object, dwc_term_name) ⇒ Object
- #dwc_kingdom ⇒ Object
-
#dwc_life_stage ⇒ Object
TODO: consider CVT attributes with Predicates linked to URIs.
- #dwc_locality ⇒ Object
- #dwc_maximum_depth_in_meters ⇒ Object
- #dwc_maximum_elevation_in_meters ⇒ Object
- #dwc_minimum_depth_in_meters ⇒ Object
- #dwc_minimum_elevation_in_meters ⇒ Object
- #dwc_month ⇒ Object
- #dwc_nomenclatural_code ⇒ Object
- #dwc_occurrence_remarks ⇒ Object
- #dwc_occurrence_status ⇒ Object
- #dwc_order ⇒ Object
- #dwc_other_catalog_numbers ⇒ Object
- #dwc_phylum ⇒ Object
- #dwc_preparations ⇒ Object
- #dwc_previous_identifications ⇒ Object
-
#dwc_recorded_by ⇒ Object
Definition: A list (concatenated and separated) of names of people, groups, or organizations responsible for recording the original Occurrence.
-
#dwc_recorded_by_id ⇒ Object
See dwc_recorded_by.
-
#dwc_sampling_protocol ⇒ Object
TODO: Reconcile with Protocol (capital P) assignments.
- #dwc_scientific_name ⇒ Object
-
#dwc_sex ⇒ Object
TODO: consider CVT attributes with Predicates linked to URIs.
- #dwc_specific_epithet ⇒ Object
- #dwc_start_day_of_year ⇒ Object
- #dwc_state_province ⇒ Object
- #dwc_taxon_name_authorship ⇒ Object
- #dwc_taxon_rank ⇒ Object
-
#dwc_type_status ⇒ Object
holotype of Ctenomys sociabilis.
- #dwc_verbatim_coordinates ⇒ Object
- #dwc_verbatim_depth ⇒ Object
- #dwc_verbatim_elevation ⇒ Object
- #dwc_verbatim_event_date ⇒ Object
- #dwc_verbatim_habitat ⇒ Object
- #dwc_verbatim_latitude ⇒ Object
- #dwc_verbatim_locality ⇒ Object
- #dwc_verbatim_longitude ⇒ Object
- #dwc_verbatim_srs ⇒ Object
- #dwc_water_body ⇒ Object
- #dwc_year ⇒ Object
- #is_fossil? ⇒ Boolean
- #set_georeference_attributes ⇒ Hash
Instance Method Details
#api_image_link(image) ⇒ Object
TODO: likeley a helper
181 182 183 184 185 186 187 188 189 190 |
# File 'app/models/collection_object/dwc_extensions.rb', line 181 def api_image_link(image) s = ENV['SERVER_NAME'] if s.nil? s ||= 'http://127.0.0.1:3000' else s = 'https://' + s end s = s + '/api/v1/images/' + image.image_file_fingerprint # An experiment, use md5 as a proxy for id (also unique id) end |
#dwc_associated_media ⇒ Object
171 172 173 |
# File 'app/models/collection_object/dwc_extensions.rb', line 171 def dwc_associated_media images.collect{|i| api_image_link(i) }.join(CollectionObject::DWC_DELIMITER).presence end |
#dwc_associated_taxa ⇒ Object
176 177 178 |
# File 'app/models/collection_object/dwc_extensions.rb', line 176 def dwc_associated_taxa dwc_internal_attribute_for(:collection_object, :associatedTaxa) end |
#dwc_catalog_number ⇒ Object
452 453 454 |
# File 'app/models/collection_object/dwc_extensions.rb', line 452 def dwc_catalog_number catalog_number_cached # via delegation end |
#dwc_class ⇒ Object
373 374 375 |
# File 'app/models/collection_object/dwc_extensions.rb', line 373 def dwc_class taxonomy['class'] end |
#dwc_collection_code ⇒ Object
448 449 450 |
# File 'app/models/collection_object/dwc_extensions.rb', line 448 def dwc_collection_code catalog_number_namespace&.verbatim_short_name || catalog_number_namespace&.short_name end |
#dwc_coordinate_uncertainty_in_meters ⇒ Object
TODO: extend to Georeferences when we understand how to describe spatial uncertainty
227 228 229 230 231 232 233 |
# File 'app/models/collection_object/dwc_extensions.rb', line 227 def dwc_coordinate_uncertainty_in_meters if georeference_attributes[:coordinateUncertaintyInMeters] georeference_attributes[:coordinateUncertaintyInMeters] else collecting_event&.verbatim_geolocation_uncertainty end end |
#dwc_country ⇒ Object
461 462 463 464 |
# File 'app/models/collection_object/dwc_extensions.rb', line 461 def dwc_country v = try(:collecting_event).try(:geographic_names) v[:country] if v end |
#dwc_county ⇒ Object
471 472 473 474 |
# File 'app/models/collection_object/dwc_extensions.rb', line 471 def dwc_county v = try(:collecting_event).try(:geographic_names) v[:county] if v end |
#dwc_date_identified ⇒ Object
ISO 8601:2004(E).
353 354 355 |
# File 'app/models/collection_object/dwc_extensions.rb', line 353 def dwc_date_identified current_taxon_determination&.date.presence end |
#dwc_day ⇒ Object
536 537 538 539 |
# File 'app/models/collection_object/dwc_extensions.rb', line 536 def dwc_day return unless collecting_event collecting_event.start_date_day.presence end |
#dwc_decimal_latitude ⇒ Object
480 481 482 |
# File 'app/models/collection_object/dwc_extensions.rb', line 480 def dwc_decimal_latitude georeference_attributes[:decimalLatitude] end |
#dwc_decimal_longitude ⇒ Object
484 485 486 |
# File 'app/models/collection_object/dwc_extensions.rb', line 484 def dwc_decimal_longitude georeference_attributes[:decimalLongitude] end |
#dwc_end_day_of_year ⇒ Object
546 547 548 549 |
# File 'app/models/collection_object/dwc_extensions.rb', line 546 def dwc_end_day_of_year return unless collecting_event collecting_event.end_day_of_year.presence end |
#dwc_event_date ⇒ Object
513 514 515 516 517 518 519 520 521 522 523 524 |
# File 'app/models/collection_object/dwc_extensions.rb', line 513 def dwc_event_date return unless collecting_event %w{start_date end_date} .map { |d| %w{year month day} .map { |p| collecting_event["#{d}_#{p}"] } .map { |p| '%02d' % p if p } # At least two digits } .map { |d| d.compact.join('-') } .reject(&:blank?) .join('/').presence end |
#dwc_event_remarks ⇒ Object
166 167 168 |
# File 'app/models/collection_object/dwc_extensions.rb', line 166 def dwc_event_remarks collecting_event&.notes&.collect {|n| n.text}&.join('|') end |
#dwc_event_time ⇒ Object
496 497 498 499 500 501 502 503 504 505 506 507 |
# File 'app/models/collection_object/dwc_extensions.rb', line 496 def dwc_event_time return unless collecting_event %w{start_time end_time} .map { |t| %w{hour minute second} .map { |p| collecting_event["#{t}_#{p}"] } .map { |p| '%02d' % p if p } # At least two digits } .map { |t| t.compact.join(':') } .reject(&:blank?) .join('/').presence end |
#dwc_family ⇒ Object
382 383 384 |
# File 'app/models/collection_object/dwc_extensions.rb', line 382 def dwc_family taxonomy['family'] end |
#dwc_field_number ⇒ Object
325 326 327 328 |
# File 'app/models/collection_object/dwc_extensions.rb', line 325 def dwc_field_number return nil unless collecting_event collecting_event.identifiers.where(type: 'Identifier::Local::TripCode').first&.cached end |
#dwc_footprint_wkt ⇒ Object
200 201 202 |
# File 'app/models/collection_object/dwc_extensions.rb', line 200 def dwc_footprint_wkt georeference_attributes[:footprintWKT] end |
#dwc_genus ⇒ Object
387 388 389 |
# File 'app/models/collection_object/dwc_extensions.rb', line 387 def dwc_genus taxonomy['genus'] && taxonomy['genus'].compact.join(' ').presence end |
#dwc_geodetic_datum ⇒ Object
212 213 214 |
# File 'app/models/collection_object/dwc_extensions.rb', line 212 def dwc_geodetic_datum georeference_attributes[:geodeticDatum] end |
#dwc_georeference_protocol ⇒ Object
565 566 567 |
# File 'app/models/collection_object/dwc_extensions.rb', line 565 def dwc_georeference_protocol georeference_attributes[:georeferenceProtocol] end |
#dwc_georeference_remarks ⇒ Object
196 197 198 |
# File 'app/models/collection_object/dwc_extensions.rb', line 196 def dwc_georeference_remarks georeference_attributes[:georeferenceRemarks] end |
#dwc_georeference_sources ⇒ Object
192 193 194 |
# File 'app/models/collection_object/dwc_extensions.rb', line 192 def dwc_georeference_sources georeference_attributes[:georeferenceSources] end |
#dwc_georeferenced_by ⇒ Object
204 205 206 |
# File 'app/models/collection_object/dwc_extensions.rb', line 204 def dwc_georeferenced_by georeference_attributes[:georeferencedBy] end |
#dwc_georeferenced_date ⇒ Object
georeferenceDate technically could look at papertrail to see when geographic_area_id appeared
222 223 224 |
# File 'app/models/collection_object/dwc_extensions.rb', line 222 def dwc_georeferenced_date georeference_attributes[:georeferencedDate] end |
#dwc_higher_classification ⇒ Object
357 358 359 360 361 362 363 |
# File 'app/models/collection_object/dwc_extensions.rb', line 357 def dwc_higher_classification v = taxonomy.values.collect{|a| a.kind_of?(Array) ? a.second : a} v.shift v.pop v.compact v.join(CollectionObject::DWC_DELIMITER) end |
#dwc_identified_by ⇒ Object
434 435 436 437 |
# File 'app/models/collection_object/dwc_extensions.rb', line 434 def dwc_identified_by # TaxonWorks allows for groups of determiners to collaborate on a single determination if they collectively came to a conclusion. current_taxon_determination&.determiners&.map(&:cached)&.join(CollectionObject::DWC_DELIMITER).presence end |
#dwc_identified_by_id ⇒ Object
439 440 441 442 |
# File 'app/models/collection_object/dwc_extensions.rb', line 439 def dwc_identified_by_id # TaxonWorks allows for groups of determiners to collaborate on a single determination if they collectively came to a conclusion. current_taxon_determination&.determiners&.map(&:orcid)&.join(CollectionObject::DWC_DELIMITER).presence end |
#dwc_individual_count ⇒ Object
TODO: handle ranged lots
457 458 459 |
# File 'app/models/collection_object/dwc_extensions.rb', line 457 def dwc_individual_count total end |
#dwc_infraspecific_epithet ⇒ Object
334 335 336 337 338 339 |
# File 'app/models/collection_object/dwc_extensions.rb', line 334 def dwc_infraspecific_epithet %w{variety form subspecies}.each do |n| # add more as observed return taxonomy[n].last if taxonomy[n] end nil end |
#dwc_institution_code ⇒ Object
we assert custody, NOT ownership
556 557 558 |
# File 'app/models/collection_object/dwc_extensions.rb', line 556 def dwc_institution_code repository.try(:acronym) end |
#dwc_institution_id ⇒ Object
we assert custody, NOT ownership
561 562 563 |
# File 'app/models/collection_object/dwc_extensions.rb', line 561 def dwc_institution_id repository_url end |
#dwc_internal_attribute_for(target = :collection_object, dwc_term_name) ⇒ Object
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
# File 'app/models/collection_object/dwc_extensions.rb', line 255 def dwc_internal_attribute_for(target = :collection_object, dwc_term_name) return nil if dwc_term_name.nil? case target when :collecting_event return nil unless collecting_event collecting_event.internal_attributes.includes(:predicate) .where( controlled_vocabulary_terms: {uri: ::DWC_ATTRIBUTE_URIS[dwc_term_name.to_sym] }) .pluck(:value)&.join(', ').presence when :collection_object internal_attributes.includes(:predicate) .where( controlled_vocabulary_terms: {uri: ::DWC_ATTRIBUTE_URIS[dwc_term_name.to_sym] }) .pluck(:value)&.join(', ').presence else nil end end |
#dwc_kingdom ⇒ Object
365 366 367 |
# File 'app/models/collection_object/dwc_extensions.rb', line 365 def dwc_kingdom taxonomy['kingdom'] end |
#dwc_life_stage ⇒ Object
TODO: consider CVT attributes with Predicates linked to URIs
292 293 294 295 |
# File 'app/models/collection_object/dwc_extensions.rb', line 292 def dwc_life_stage biocuration_classes.tagged_with_uri(::DWC_ATTRIBUTE_URIS[:lifeStage]) .pluck(:name)&.join(', ').presence # `.presence` is a Rails extension end |
#dwc_locality ⇒ Object
476 477 478 |
# File 'app/models/collection_object/dwc_extensions.rb', line 476 def dwc_locality collecting_event.try(:verbatim_locality) end |
#dwc_maximum_depth_in_meters ⇒ Object
283 284 285 |
# File 'app/models/collection_object/dwc_extensions.rb', line 283 def dwc_maximum_depth_in_meters dwc_internal_attribute_for(:collecting_event, :maximumDepthInMeters) end |
#dwc_maximum_elevation_in_meters ⇒ Object
312 313 314 |
# File 'app/models/collection_object/dwc_extensions.rb', line 312 def dwc_maximum_elevation_in_meters collecting_event&.maximum_elevation end |
#dwc_minimum_depth_in_meters ⇒ Object
279 280 281 |
# File 'app/models/collection_object/dwc_extensions.rb', line 279 def dwc_minimum_depth_in_meters dwc_internal_attribute_for(:collecting_event, :minimumDepthInMeters) end |
#dwc_minimum_elevation_in_meters ⇒ Object
316 317 318 |
# File 'app/models/collection_object/dwc_extensions.rb', line 316 def dwc_minimum_elevation_in_meters collecting_event&.minimum_elevation end |
#dwc_month ⇒ Object
531 532 533 534 |
# File 'app/models/collection_object/dwc_extensions.rb', line 531 def dwc_month return unless collecting_event collecting_event.start_date_month.presence end |
#dwc_nomenclatural_code ⇒ Object
492 493 494 |
# File 'app/models/collection_object/dwc_extensions.rb', line 492 def dwc_nomenclatural_code current_otu.try(:taxon_name).try(:nomenclatural_code) end |
#dwc_occurrence_remarks ⇒ Object
162 163 164 |
# File 'app/models/collection_object/dwc_extensions.rb', line 162 def dwc_occurrence_remarks notes.collect{|n| n.text}.join('|') end |
#dwc_occurrence_status ⇒ Object
157 158 159 |
# File 'app/models/collection_object/dwc_extensions.rb', line 157 def dwc_occurrence_status 'present' end |
#dwc_order ⇒ Object
377 378 379 |
# File 'app/models/collection_object/dwc_extensions.rb', line 377 def dwc_order taxonomy['order'] end |
#dwc_other_catalog_numbers ⇒ Object
243 244 245 246 247 |
# File 'app/models/collection_object/dwc_extensions.rb', line 243 def dwc_other_catalog_numbers i = identifiers.where.not('type ilike ?', 'Identifier::Global::Uuid%').order(:position).to_a i.shift i.map(&:cached).join(CollectionObject::DWC_DELIMITER).presence end |
#dwc_phylum ⇒ Object
369 370 371 |
# File 'app/models/collection_object/dwc_extensions.rb', line 369 def dwc_phylum taxonomy['phylum'] end |
#dwc_preparations ⇒ Object
551 552 553 |
# File 'app/models/collection_object/dwc_extensions.rb', line 551 def dwc_preparations preparation_type_name end |
#dwc_previous_identifications ⇒ Object
249 250 251 252 253 |
# File 'app/models/collection_object/dwc_extensions.rb', line 249 def dwc_previous_identifications a = taxon_determinations.order(:position).to_a a.shift a.collect{|d| ApplicationController.helpers.label_for_taxon_determination(d)}.join(CollectionObject::DWC_DELIMITER).presence end |
#dwc_recorded_by ⇒ Object
Definition: A list (concatenated and separated) of names of people, groups, or organizations responsible for recording the original Occurrence. The primary collector or observer, especially one who applies a personal identifier (recordNumber), should be listed first.
This was interpreted as collectors (in the field in this context), not those who recorded other aspectes of the data.
407 408 409 410 411 412 413 414 415 416 417 418 |
# File 'app/models/collection_object/dwc_extensions.rb', line 407 def dwc_recorded_by v = nil if collecting_event v = collecting_event.collectors .order('roles.position') .pluck(:cached) .join(CollectionObject::DWC_DELIMITER) .presence v = collecting_event.verbatim_collectors.presence if v.blank? end v end |
#dwc_recorded_by_id ⇒ Object
See dwc_recorded_by
421 422 423 424 425 426 427 428 429 430 431 432 |
# File 'app/models/collection_object/dwc_extensions.rb', line 421 def dwc_recorded_by_id if collecting_event collecting_event.collectors .order('roles.position') .map(&:orcid) .compact .join(CollectionObject::DWC_DELIMITER) .presence end end |
#dwc_sampling_protocol ⇒ Object
TODO: Reconcile with Protocol (capital P) assignments
321 322 323 |
# File 'app/models/collection_object/dwc_extensions.rb', line 321 def dwc_sampling_protocol collecting_event&.verbatim_method end |
#dwc_scientific_name ⇒ Object
396 397 398 |
# File 'app/models/collection_object/dwc_extensions.rb', line 396 def dwc_scientific_name current_taxon_name.try(:cached_name_and_author_year) end |
#dwc_sex ⇒ Object
TODO: consider CVT attributes with Predicates linked to URIs
298 299 300 301 |
# File 'app/models/collection_object/dwc_extensions.rb', line 298 def dwc_sex biocuration_classes.tagged_with_uri(::DWC_ATTRIBUTE_URIS[:sex]) .pluck(:name)&.join(', ').presence end |
#dwc_specific_epithet ⇒ Object
392 393 394 |
# File 'app/models/collection_object/dwc_extensions.rb', line 392 def dwc_specific_epithet taxonomy['species'] && taxonomy['species'].compact.join(' ').presence end |
#dwc_start_day_of_year ⇒ Object
541 542 543 544 |
# File 'app/models/collection_object/dwc_extensions.rb', line 541 def dwc_start_day_of_year return unless collecting_event collecting_event.start_day_of_year.presence end |
#dwc_state_province ⇒ Object
466 467 468 469 |
# File 'app/models/collection_object/dwc_extensions.rb', line 466 def dwc_state_province v = try(:collecting_event).try(:geographic_names) v[:state] if v end |
#dwc_taxon_name_authorship ⇒ Object
400 401 402 |
# File 'app/models/collection_object/dwc_extensions.rb', line 400 def current_taxon_name.try(:cached_author_year) end |
#dwc_taxon_rank ⇒ Object
341 342 343 |
# File 'app/models/collection_object/dwc_extensions.rb', line 341 def dwc_taxon_rank current_taxon_name&.rank end |
#dwc_type_status ⇒ Object
holotype of Ctenomys sociabilis. Pearson O. P., and M. I. Christie. 1985. Historia Natural, 5(37):388, holotype of Pinus abies | holotype of Picea abies
346 347 348 349 350 |
# File 'app/models/collection_object/dwc_extensions.rb', line 346 def dwc_type_status type_materials.all.collect{|t| ApplicationController.helpers.label_for_type_material(t) }.join(CollectionObject::DWC_DELIMITER).presence end |
#dwc_verbatim_coordinates ⇒ Object
303 304 305 306 |
# File 'app/models/collection_object/dwc_extensions.rb', line 303 def dwc_verbatim_coordinates return nil unless collecting_event [collecting_event.verbatim_latitude, collecting_event.verbatim_longitude].compact.join(' ').presence end |
#dwc_verbatim_depth ⇒ Object
287 288 289 |
# File 'app/models/collection_object/dwc_extensions.rb', line 287 def dwc_verbatim_depth dwc_internal_attribute_for(:collecting_event, :verbatimDepth) end |
#dwc_verbatim_elevation ⇒ Object
308 309 310 |
# File 'app/models/collection_object/dwc_extensions.rb', line 308 def dwc_verbatim_elevation collecting_event&.verbatim_elevation end |
#dwc_verbatim_event_date ⇒ Object
509 510 511 |
# File 'app/models/collection_object/dwc_extensions.rb', line 509 def dwc_verbatim_event_date collecting_event&.verbatim_date end |
#dwc_verbatim_habitat ⇒ Object
330 331 332 |
# File 'app/models/collection_object/dwc_extensions.rb', line 330 def dwc_verbatim_habitat collecting_event&.verbatim_habitat end |
#dwc_verbatim_latitude ⇒ Object
235 236 237 |
# File 'app/models/collection_object/dwc_extensions.rb', line 235 def dwc_verbatim_latitude collecting_event&.verbatim_latitude end |
#dwc_verbatim_locality ⇒ Object
488 489 490 |
# File 'app/models/collection_object/dwc_extensions.rb', line 488 def dwc_verbatim_locality collecting_event.try(:verbatim_locality) end |
#dwc_verbatim_longitude ⇒ Object
239 240 241 |
# File 'app/models/collection_object/dwc_extensions.rb', line 239 def dwc_verbatim_longitude collecting_event&.verbatim_longitude end |
#dwc_verbatim_srs ⇒ Object
216 217 218 |
# File 'app/models/collection_object/dwc_extensions.rb', line 216 def dwc_verbatim_srs georeference_attributes[:dwcVerbatimSrs] end |
#dwc_water_body ⇒ Object
275 276 277 |
# File 'app/models/collection_object/dwc_extensions.rb', line 275 def dwc_water_body dwc_internal_attribute_for(:collecting_event, :waterBody) end |
#dwc_year ⇒ Object
526 527 528 529 |
# File 'app/models/collection_object/dwc_extensions.rb', line 526 def dwc_year return unless collecting_event collecting_event.start_date_year.presence end |
#is_fossil? ⇒ Boolean
153 154 155 |
# File 'app/models/collection_object/dwc_extensions.rb', line 153 def is_fossil? biocuration_classes.where(uri: DWC_FOSSIL_URI).any? end |
#set_georeference_attributes ⇒ Hash
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'app/models/collection_object/dwc_extensions.rb', line 123 def set_georeference_attributes case collecting_event&.dwc_georeference_source when :georeference collecting_event.preferred_georeference.dwc_georeference_attributes when :verbatim h = collecting_event.dwc_georeference_attributes if a = collecting_event&.attribute_updater(:verbatim_latitude) h[:georeferencedBy] = User.find(a).name end # verbatim_longitude could technically be different, but... h[:georeferencedDate] = collecting_event&.attribute_updated(:verbatim_latitude) h when :geographic_area h = collecting_event.geographic_area.dwc_georeference_attributes if a = collecting_event&.attribute_updater(:geographic_area_id) h[:georeferencedBy] = User.find(a).name end h[:georeferencedDate] = collecting_event&.attribute_updated(:geographic_area_id) h else {} end end |