diff --git a/app/controllers/admin/newsletters_controller.rb b/app/controllers/admin/newsletters_controller.rb index 4dbf963f7..980125ee7 100644 --- a/app/controllers/admin/newsletters_controller.rb +++ b/app/controllers/admin/newsletters_controller.rb @@ -56,8 +56,6 @@ class Admin::NewslettersController < Admin::BaseController private def newsletter_params - newsletter_params = params.require(:newsletter) - .permit(:subject, :segment_recipient, :from, :body) - newsletter_params.merge(segment_recipient: newsletter_params[:segment_recipient].to_i) + params.require(:newsletter).permit(:subject, :segment_recipient, :from, :body) end end diff --git a/app/helpers/user_segments_helper.rb b/app/helpers/user_segments_helper.rb new file mode 100644 index 000000000..6431216ef --- /dev/null +++ b/app/helpers/user_segments_helper.rb @@ -0,0 +1,7 @@ +module UserSegmentsHelper + def user_segments_options + UserSegments::SEGMENTS.collect do |user_segment_name| + [t("admin.segment_recipient.#{user_segment_name}"), user_segment_name] + end + end +end diff --git a/app/models/newsletter.rb b/app/models/newsletter.rb index beaa59495..98b53d295 100644 --- a/app/models/newsletter.rb +++ b/app/models/newsletter.rb @@ -1,10 +1,4 @@ class Newsletter < ActiveRecord::Base - enum segment_recipient: { all_users: 1, - proposal_authors: 2, - investment_authors: 3, - feasible_and_undecided_investment_authors: 4, - selected_investment_authors: 5, - winner_investment_authors: 6 } validates :subject, presence: true validates :segment_recipient, presence: true diff --git a/app/views/admin/emails_download/index.html.erb b/app/views/admin/emails_download/index.html.erb index 20bdb1775..7c82a6844 100644 --- a/app/views/admin/emails_download/index.html.erb +++ b/app/views/admin/emails_download/index.html.erb @@ -10,8 +10,7 @@ <%= t('admin.emails_download.index.download_segment_help_text') %>

- <%= select_tag :users_segment, options_for_select(UserSegments::SEGMENTS - .collect { |s| [t("admin.segment_recipient.#{s}"), s] }) %> + <%= select_tag :users_segment, options_for_select(user_segments_options) %>
<%= submit_tag t('admin.emails_download.index.download_emails_button'), class: "button" %> diff --git a/app/views/admin/newsletters/_form.html.erb b/app/views/admin/newsletters/_form.html.erb index 2631cfc10..bf6b71d5b 100644 --- a/app/views/admin/newsletters/_form.html.erb +++ b/app/views/admin/newsletters/_form.html.erb @@ -1,8 +1,7 @@ <%= form_for [:admin, @newsletter] do |f| %> <%= render 'shared/errors', resource: @newsletter %> - <%= f.select :segment_recipient, options_for_select(Newsletter.segment_recipients - .collect { |k,v| [t("admin.segment_recipient.#{k}"), v] }, + <%= f.select :segment_recipient, options_for_select(user_segments_options, @newsletter[:segment_recipient]) %> <%= f.text_field :subject %> <%= f.text_field :from %> diff --git a/db/dev_seeds/newsletters.rb b/db/dev_seeds/newsletters.rb index be9074f10..2f70b52b6 100644 --- a/db/dev_seeds/newsletters.rb +++ b/db/dev_seeds/newsletters.rb @@ -8,7 +8,7 @@ section "Creating Newsletters" do 5.times do |n| Newsletter.create!( subject: "Newsletter subject #{n}", - segment_recipient: Newsletter.segment_recipients.values.sample, + segment_recipient: UserSegments::SEGMENTS.sample, from: 'no-reply@consul.dev', body: newsletter_body.sample, sent_at: [Time.now, nil].sample diff --git a/db/migrate/20180220211105_change_newsletter_segment_recipient_to_string.rb b/db/migrate/20180220211105_change_newsletter_segment_recipient_to_string.rb new file mode 100644 index 000000000..1f87a56f5 --- /dev/null +++ b/db/migrate/20180220211105_change_newsletter_segment_recipient_to_string.rb @@ -0,0 +1,5 @@ +class ChangeNewsletterSegmentRecipientToString < ActiveRecord::Migration + def change + change_column :newsletters, :segment_recipient, :string, null: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 25d241bd8..612ca8e1e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20180205170054) do +ActiveRecord::Schema.define(version: 20180220211105) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -626,7 +626,7 @@ ActiveRecord::Schema.define(version: 20180205170054) do create_table "newsletters", force: :cascade do |t| t.string "subject" - t.integer "segment_recipient" + t.string "segment_recipient", null: false t.string "from" t.text "body" t.date "sent_at" diff --git a/spec/factories.rb b/spec/factories.rb index 106502fc6..5019f326a 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -945,9 +945,9 @@ LOREM_IPSUM factory :newsletter do sequence(:subject) { |n| "Subject #{n}" } - segment_recipient [1, 2, 3, 4, 5, 6].sample - sequence(:from) { |n| "noreply#{n}@consul.dev" } - sequence(:body) { |n| "Body #{n}" } + segment_recipient UserSegments::SEGMENTS.sample + sequence(:from) { |n| "noreply#{n}@consul.dev" } + sequence(:body) { |n| "Body #{n}" } end end diff --git a/spec/features/admin/emails/newsletters_spec.rb b/spec/features/admin/emails/newsletters_spec.rb index a73f4efc8..94f93556e 100644 --- a/spec/features/admin/emails/newsletters_spec.rb +++ b/spec/features/admin/emails/newsletters_spec.rb @@ -10,7 +10,7 @@ feature "Admin newsletter emails" do scenario "Show" do newsletter = create(:newsletter, subject: "This is a subject", - segment_recipient: 1, + segment_recipient: 'all_users', from: "no-reply@consul.dev", body: "This is a body") @@ -116,14 +116,14 @@ feature "Admin newsletter emails" do end scenario "Select list of users to send newsletter" do - Newsletter.segment_recipients.each_key do |user_group| + UserSegments::SEGMENTS.each do |user_segment| visit new_admin_newsletter_path fill_in_newsletter_form - select I18n.t("admin.segment_recipient.#{user_group}"), from: 'newsletter_segment_recipient' + select I18n.t("admin.segment_recipient.#{user_segment}"), from: 'newsletter_segment_recipient' click_button "Create Newsletter" - expect(page).to have_content(I18n.t("admin.segment_recipient.#{user_group}")) + expect(page).to have_content(I18n.t("admin.segment_recipient.#{user_segment}")) end end end