Skip to content

Commit

Permalink
Another refactor/simplification
Browse files Browse the repository at this point in the history
Uses AdminData.attributes_for_updates as a filter to the change set fields.
Filters out blank sony ci ids so they don't get serialized.
Adds validation routine to AdminData for guarding against fields that cannot
  be deleted once set: bulkrax_importer_id and batch_ingest_batch_id.
  These IDs are foreign keys and if they accidentally get unset, we loase
  relational integrity, so need to make sure they are not accidentally
  getting unset via ingest, or updating Assets via UI, or anywhere else.
  • Loading branch information
afred committed Jun 13, 2024
1 parent 0eb35a6 commit c5fb57a
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 30 deletions.
4 changes: 2 additions & 2 deletions app/services/aapb/batch_ingest/csv_item_ingester.rb
Original file line number Diff line number Diff line change
Expand Up @@ -213,8 +213,8 @@ def set_batch_ingest_id_on_related_asset(work_id, ability)
def set_admin_data_attributes(admin_data, attributes)
# add existing admin_data values so they're preserved in the AssetActor
AdminData.attributes_for_update.each do |admin_attr|
next unless attributes.keys.include?(admin_attr.to_s)
admin_data.send("#{admin_attr}=", attributes[admin_attr.to_s])
next unless attributes.keys.include?(admin_attr)
admin_data.send("#{admin_attr}=", attributes[admin_attr])
end
end

Expand Down
33 changes: 5 additions & 28 deletions app/transactions/ams/steps/create_aapb_admin_data.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,35 +51,12 @@ def save_aapb_admin_data(change_set)
end

def set_admin_data_attributes(admin_data, change_set)
AdminData.attributes_for_update.each do |field|
field = field.to_s

# Conditionally set new value for admin data field
new_admin_data_value = if AdminData::SERIALIZED_FIELDS.include?(field.to_sym)
# Filter out blanks if the field is a serialized field, e.g. sonyci_id.
change_set.fields[field].reject {|v| v.blank? }
elsif change_set.fields[field].blank?
# If not serialized and blank, convert to nil
nil
else
# Otherwise keep value as is.
change_set.fields[field]
end

# If the AdminData field can be emptied OR if we have a non-blank value, then update the AdminData field.
if can_empty_field?(field) || new_admin_data_value.present?
admin_data.write_attribute(field, new_admin_data_value)
else
Rails.logger.debug("Chose not to update AdminData #{admin_data.id}'s field #{field} with value(s): #{change_set.fields[field]}")
end
admin_data_values = change_set.fields.slice(*AdminData.attributes_for_update).compact
# If Sony Ci IDs are present, ensure there are no blank ones, such as empty strings.
if admin_data_values.key?('sonyci_id')
admin_data_values['sonyci_id'] = Array(admin_data_values['sonyci_id']).reject(&:blank?)
end
end

def can_empty_field?(field)
%w(
bulkrax_importer_id
hyrax_batch_ingest_batch_id
).exclude?(field.to_s)
admin_data.update!(admin_data_values)
end

def delete_removed_annotations(admin_data, change_set)
Expand Down

0 comments on commit c5fb57a

Please sign in to comment.