From 6d9609f9444376922af3e4ee5ce2109494c3b7d9 Mon Sep 17 00:00:00 2001 From: f Date: Mon, 3 Jun 2024 17:47:05 -0300 Subject: [PATCH] feat: no romper relaciones retroactivamente MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit oculta los artículos relacionados que ya tienen una relación establecida, para no romperla sin querer. --- .../metadata/unused_values_concern.rb | 27 +++++++++++++++++++ app/models/metadata_new_belongs_to.rb | 4 ++- app/models/metadata_new_has_many.rb | 4 ++- 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 app/models/concerns/metadata/unused_values_concern.rb diff --git a/app/models/concerns/metadata/unused_values_concern.rb b/app/models/concerns/metadata/unused_values_concern.rb new file mode 100644 index 00000000..6f0a0bf1 --- /dev/null +++ b/app/models/concerns/metadata/unused_values_concern.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module Metadata + # Hasta ahora veníamos habilitando la opción de romper + # retroactivamente relaciones, sin informar que estaba sucediendo. + # Con este módulo, todas las relaciones que ya tienen una relación + # inversa son ignoradas. + module UnusedValuesConcern + extend ActiveSupport::Concern + + included do + # Genera un Hash de { title | slug => uuid }, excluyendo el Post + # actual y todos los que ya tengan una relación inversa, para no + # romperla. + # + # @return [Hash] + def values + @values ||= posts.map do |p| + next if p.uuid.value == post.uuid.value + next unless inverse? && (p[inverse].empty? || [p[inverse].value].flatten.include?(post.uuid.value)) + + [title(p), p.uuid.value] + end.compact.to_h + end + end + end +end diff --git a/app/models/metadata_new_belongs_to.rb b/app/models/metadata_new_belongs_to.rb index db90cb8f..46d25ce6 100644 --- a/app/models/metadata_new_belongs_to.rb +++ b/app/models/metadata_new_belongs_to.rb @@ -1,4 +1,6 @@ # frozen_string_literal: true # Nueva interfaz -class MetadataNewBelongsTo < MetadataBelongsTo; end +class MetadataNewBelongsTo < MetadataBelongsTo + include Metadata::UnusedValuesConcern +end diff --git a/app/models/metadata_new_has_many.rb b/app/models/metadata_new_has_many.rb index 3bf37d45..e4b3869c 100644 --- a/app/models/metadata_new_has_many.rb +++ b/app/models/metadata_new_has_many.rb @@ -1,4 +1,6 @@ # frozen_string_literal: true # Interfaz nueva para uno a muchos -class MetadataNewHasMany < MetadataHasMany; end +class MetadataNewHasMany < MetadataHasMany + include Metadata::UnusedValuesConcern +end