From 1d3ca80bf7a0ec7bb17b5c9e4905e24a3bca0872 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 17 Apr 2026 09:57:18 -0400 Subject: [PATCH] Use model constants more consistently for view expiration collections (#38589) --- app/helpers/invites_helper.rb | 11 ----------- app/models/invite.rb | 2 ++ app/models/ip_block.rb | 2 ++ app/views/admin/ip_blocks/new.html.haml | 2 +- app/views/invites/_form.html.haml | 15 ++++++++++++--- 5 files changed, 17 insertions(+), 15 deletions(-) delete mode 100644 app/helpers/invites_helper.rb diff --git a/app/helpers/invites_helper.rb b/app/helpers/invites_helper.rb deleted file mode 100644 index c189061db0..0000000000 --- a/app/helpers/invites_helper.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -module InvitesHelper - def invites_max_uses_options - [1, 5, 10, 25, 50, 100] - end - - def invites_expires_options - [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week] - end -end diff --git a/app/models/invite.rb b/app/models/invite.rb index ca692d937e..8f3463a322 100644 --- a/app/models/invite.rb +++ b/app/models/invite.rb @@ -21,7 +21,9 @@ class Invite < ApplicationRecord COMMENT_SIZE_LIMIT = 420 ELIGIBLE_CODE_CHARACTERS = [*('a'..'z'), *('A'..'Z'), *('0'..'9')].freeze + EXPIRATION_DURATIONS = [30.minutes, 1.hour, 6.hours, 12.hours, 1.day, 1.week].freeze HOMOGLYPHS = %w(0 1 I l O).freeze + MAX_USES_COUNTS = [1, 5, 10, 25, 50, 100].freeze VALID_CODE_CHARACTERS = (ELIGIBLE_CODE_CHARACTERS - HOMOGLYPHS).freeze belongs_to :user, inverse_of: :invites diff --git a/app/models/ip_block.rb b/app/models/ip_block.rb index 5bbfc1fd24..6d766c8d0a 100644 --- a/app/models/ip_block.rb +++ b/app/models/ip_block.rb @@ -20,6 +20,8 @@ class IpBlock < ApplicationRecord include InetContainer include Paginable + EXPIRATION_DURATIONS = [1.day, 2.weeks, 1.month, 6.months, 1.year, 3.years].freeze + enum :severity, { sign_up_requires_approval: 5000, sign_up_block: 5500, diff --git a/app/views/admin/ip_blocks/new.html.haml b/app/views/admin/ip_blocks/new.html.haml index acf632e476..3ef5351d3e 100644 --- a/app/views/admin/ip_blocks/new.html.haml +++ b/app/views/admin/ip_blocks/new.html.haml @@ -12,7 +12,7 @@ .fields-group = f.input :expires_in, - collection: [1.day, 2.weeks, 1.month, 6.months, 1.year, 3.years].map(&:to_i), + collection: IpBlock::EXPIRATION_DURATIONS.map(&:to_i), label_method: ->(i) { I18n.t("admin.ip_blocks.expires_in.#{i}") }, prompt: I18n.t('invites.expires_in_prompt'), wrapper: :with_block_label diff --git a/app/views/invites/_form.html.haml b/app/views/invites/_form.html.haml index dbbb785e83..514b9cf016 100644 --- a/app/views/invites/_form.html.haml +++ b/app/views/invites/_form.html.haml @@ -2,12 +2,21 @@ .fields-row .fields-row__column.fields-row__column-6.fields-group - = form.input :max_uses, wrapper: :with_label, collection: invites_max_uses_options, label_method: ->(num) { I18n.t('invites.max_uses', count: num) }, prompt: I18n.t('invites.max_uses_prompt') + = form.input :max_uses, + collection: Invite::MAX_USES_COUNTS, + label_method: ->(count) { I18n.t('invites.max_uses', count:) }, + prompt: I18n.t('invites.max_uses_prompt'), + wrapper: :with_label .fields-row__column.fields-row__column-6.fields-group - = form.input :expires_in, wrapper: :with_label, collection: invites_expires_options.map(&:to_i), label_method: ->(i) { I18n.t("invites.expires_in.#{i}") }, prompt: I18n.t('invites.expires_in_prompt') + = form.input :expires_in, + collection: Invite::EXPIRATION_DURATIONS.map(&:to_i), + label_method: ->(duration) { I18n.t("invites.expires_in.#{duration}") }, + prompt: I18n.t('invites.expires_in_prompt'), + wrapper: :with_label .fields-group - = form.input :autofollow, wrapper: :with_label + = form.input :autofollow, + wrapper: :with_label .actions = form.button :button, t('invites.generate'), type: :submit