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