diff --git a/app/models/account.rb b/app/models/account.rb index 206529301e..d42da2e9af 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -118,6 +118,7 @@ class Account < ApplicationRecord validates :display_name, length: { maximum: DISPLAY_NAME_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_display_name? } validates :note, note_length: { maximum: NOTE_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_note? } validates :fields, length: { maximum: DEFAULT_FIELDS_SIZE }, if: -> { local? && will_save_change_to_fields? } + validates_with EmptyProfileFieldNamesValidator, if: -> { local? && will_save_change_to_fields? } with_options on: :create do validates :uri, absence: true, if: :local? validates :inbox_url, absence: true, if: :local? @@ -300,7 +301,7 @@ class Account < ApplicationRecord if attributes.is_a?(Hash) attributes.each_value do |attr| - next if attr[:name].blank? + next if attr[:name].blank? && attr[:value].blank? previous = old_fields.find { |item| item['value'] == attr[:value] } diff --git a/app/validators/empty_profile_field_names_validator.rb b/app/validators/empty_profile_field_names_validator.rb new file mode 100644 index 0000000000..8b841844d8 --- /dev/null +++ b/app/validators/empty_profile_field_names_validator.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class EmptyProfileFieldNamesValidator < ActiveModel::Validator + def validate(account) + return if account.fields.empty? + field_names_valid = true + account.fields.each_with_index do |field, index| + if field.name.blank? && !field.value.blank? + field_names_valid = false + end + end + return if field_names_valid + + account.errors.add(:fields, 'Names of profile fields cannot be empty') + end + end + \ No newline at end of file