Refactor segment constant into a class method
We're going to make it dynamic using the geozones. Besides, class methods can be overwritten using custom models, while constants can't be overwritten without getting a warning [1]. Makes the definition of segments with geozones a little cleaner. I think it’s worth it, compared to the slight memory gain of using a constant [2]. [1] warning: already initialized constant UserSegments::SEGMENTS [2] https://stackoverflow.com/questions/15903835/class-method-vs-constant-in-ruby-rails#answer-15903970
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
module UserSegmentsHelper
|
||||
def user_segments_options
|
||||
UserSegments::SEGMENTS.map do |user_segment_name|
|
||||
UserSegments.segments.map do |user_segment_name|
|
||||
[t("admin.segment_recipient.#{user_segment_name}"), user_segment_name]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -14,7 +14,7 @@ section "Creating Newsletters" do
|
||||
5.times do |n|
|
||||
Newsletter.create!(
|
||||
subject: "Newsletter subject #{n}",
|
||||
segment_recipient: UserSegments::SEGMENTS.sample,
|
||||
segment_recipient: UserSegments.segments.sample,
|
||||
from: "no-reply@consul.dev",
|
||||
body: newsletter_body.sample,
|
||||
sent_at: [Time.current, nil].sample
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
class UserSegments
|
||||
SEGMENTS = %w[all_users
|
||||
administrators
|
||||
all_proposal_authors
|
||||
proposal_authors
|
||||
investment_authors
|
||||
feasible_and_undecided_investment_authors
|
||||
selected_investment_authors
|
||||
winner_investment_authors
|
||||
not_supported_on_current_budget].freeze
|
||||
def self.segments
|
||||
%w[all_users
|
||||
administrators
|
||||
all_proposal_authors
|
||||
proposal_authors
|
||||
investment_authors
|
||||
feasible_and_undecided_investment_authors
|
||||
selected_investment_authors
|
||||
winner_investment_authors
|
||||
not_supported_on_current_budget].freeze
|
||||
end
|
||||
|
||||
def self.all_users
|
||||
User.active.where.not(confirmed_at: nil)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
FactoryBot.define do
|
||||
factory :newsletter do
|
||||
sequence(:subject) { |n| "Subject #{n}" }
|
||||
segment_recipient { UserSegments::SEGMENTS.sample }
|
||||
segment_recipient { UserSegments.segments.sample }
|
||||
sequence(:from) { |n| "noreply#{n}@consul.dev" }
|
||||
sequence(:body) { |n| "Body #{n}" }
|
||||
end
|
||||
|
||||
@@ -24,7 +24,7 @@ FactoryBot.define do
|
||||
sequence(:title) { |n| "Admin Notification title #{n}" }
|
||||
sequence(:body) { |n| "Admin Notification body #{n}" }
|
||||
link { nil }
|
||||
segment_recipient { UserSegments::SEGMENTS.sample }
|
||||
segment_recipient { UserSegments.segments.sample }
|
||||
recipients_count { nil }
|
||||
sent_at { nil }
|
||||
|
||||
|
||||
@@ -215,7 +215,7 @@ describe "Admin Notifications", :admin do
|
||||
end
|
||||
|
||||
scenario "Select list of users to send notification" do
|
||||
UserSegments::SEGMENTS.each do |user_segment|
|
||||
UserSegments.segments.each do |user_segment|
|
||||
segment_recipient = I18n.t("admin.segment_recipient.#{user_segment}")
|
||||
|
||||
visit new_admin_admin_notification_path
|
||||
|
||||
@@ -162,7 +162,7 @@ describe "Admin newsletter emails", :admin do
|
||||
end
|
||||
|
||||
scenario "Select list of users to send newsletter" do
|
||||
UserSegments::SEGMENTS.each do |user_segment|
|
||||
UserSegments.segments.each do |user_segment|
|
||||
visit new_admin_newsletter_path
|
||||
|
||||
fill_in_newsletter_form(segment_recipient: I18n.t("admin.segment_recipient.#{user_segment}"))
|
||||
|
||||
Reference in New Issue
Block a user