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