effective_polls 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +132 -0
- data/Rakefile +32 -0
- data/app/assets/config/effective_polls_manifest.js +1 -0
- data/app/assets/stylesheets/effective_polls.scss +0 -0
- data/app/controllers/admin/poll_notifications_controller.rb +15 -0
- data/app/controllers/admin/poll_questions_controller.rb +15 -0
- data/app/controllers/admin/polls_controller.rb +23 -0
- data/app/controllers/effective/ballots_controller.rb +70 -0
- data/app/controllers/effective/polls_controller.rb +19 -0
- data/app/datatables/admin/effective_poll_notifications_datatable.rb +43 -0
- data/app/datatables/admin/effective_poll_questions_datatable.rb +28 -0
- data/app/datatables/admin/effective_poll_results_datatable.rb +50 -0
- data/app/datatables/admin/effective_polls_datatable.rb +29 -0
- data/app/datatables/effective_polls_datatable.rb +30 -0
- data/app/helpers/effective_polls_helper.rb +23 -0
- data/app/mailers/effective/polls_mailer.rb +23 -0
- data/app/models/effective/access_denied.rb +17 -0
- data/app/models/effective/ballot.rb +73 -0
- data/app/models/effective/ballot_response.rb +92 -0
- data/app/models/effective/ballot_response_option.rb +6 -0
- data/app/models/effective/poll.rb +149 -0
- data/app/models/effective/poll_notification.rb +144 -0
- data/app/models/effective/poll_question.rb +76 -0
- data/app/models/effective/poll_question_option.rb +26 -0
- data/app/views/admin/poll_notifications/_form.html.haml +55 -0
- data/app/views/admin/poll_questions/_form.html.haml +100 -0
- data/app/views/admin/polls/_form.html.haml +20 -0
- data/app/views/admin/polls/_form_content.html.haml +27 -0
- data/app/views/admin/polls/_form_poll.html.haml +32 -0
- data/app/views/admin/polls/_poll.html.haml +2 -0
- data/app/views/admin/polls/results.html.haml +6 -0
- data/app/views/effective/ballot_responses/_ballot_response.html.haml +2 -0
- data/app/views/effective/ballot_responses/_fields.html.haml +14 -0
- data/app/views/effective/ballot_responses/fields/_choose_one.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_date.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_email.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_long_answer.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_number.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_select_all_that_apply.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_select_upto_1.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_select_upto_2.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_select_upto_3.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_select_upto_4.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_select_upto_5.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_short_answer.html.haml +1 -0
- data/app/views/effective/ballot_responses/fields/_upload_file.html.haml +1 -0
- data/app/views/effective/ballot_responses/responses/_choose_one.html.haml +1 -0
- data/app/views/effective/ballot_responses/responses/_date.html.haml +1 -0
- data/app/views/effective/ballot_responses/responses/_email.html.haml +1 -0
- data/app/views/effective/ballot_responses/responses/_long_answer.html.haml +1 -0
- data/app/views/effective/ballot_responses/responses/_number.html.haml +1 -0
- data/app/views/effective/ballot_responses/responses/_select_all_that_apply.html.haml +5 -0
- data/app/views/effective/ballot_responses/responses/_select_upto_1.html.haml +1 -0
- data/app/views/effective/ballot_responses/responses/_select_upto_2.html.haml +5 -0
- data/app/views/effective/ballot_responses/responses/_select_upto_3.html.haml +5 -0
- data/app/views/effective/ballot_responses/responses/_select_upto_4.html.haml +5 -0
- data/app/views/effective/ballot_responses/responses/_select_upto_5.html.haml +5 -0
- data/app/views/effective/ballot_responses/responses/_short_answer.html.haml +1 -0
- data/app/views/effective/ballot_responses/responses/_upload_file.html.haml +4 -0
- data/app/views/effective/ballots/_ballot.html.haml +14 -0
- data/app/views/effective/ballots/complete.html.haml +11 -0
- data/app/views/effective/ballots/start.html.haml +17 -0
- data/app/views/effective/ballots/submit.html.haml +17 -0
- data/app/views/effective/ballots/vote.html.haml +19 -0
- data/app/views/effective/poll_results/_poll_result.html.haml +2 -0
- data/app/views/effective/poll_results/_results.html.haml +38 -0
- data/app/views/effective/poll_results/results/_choose_one.html.haml +2 -0
- data/app/views/effective/poll_results/results/_date.html.haml +14 -0
- data/app/views/effective/poll_results/results/_email.html.haml +14 -0
- data/app/views/effective/poll_results/results/_long_answer.html.haml +2 -0
- data/app/views/effective/poll_results/results/_number.html.haml +14 -0
- data/app/views/effective/poll_results/results/_poll_question_option.html.haml +17 -0
- data/app/views/effective/poll_results/results/_select_all_that_apply.html.haml +2 -0
- data/app/views/effective/poll_results/results/_select_upto_1.html.haml +2 -0
- data/app/views/effective/poll_results/results/_select_upto_2.html.haml +2 -0
- data/app/views/effective/poll_results/results/_select_upto_3.html.haml +2 -0
- data/app/views/effective/poll_results/results/_select_upto_4.html.haml +2 -0
- data/app/views/effective/poll_results/results/_select_upto_5.html.haml +2 -0
- data/app/views/effective/poll_results/results/_short_answer.html.haml +2 -0
- data/app/views/effective/poll_results/results/_upload_file.html.haml +3 -0
- data/app/views/effective/polls/_form.html.haml +10 -0
- data/app/views/effective/polls/_poll.html.haml +2 -0
- data/app/views/layouts/effective_polls_mailer_layout.html.haml +7 -0
- data/config/effective_polls.rb +59 -0
- data/config/routes.rb +23 -0
- data/db/migrate/01_create_effective_polls.rb.erb +92 -0
- data/lib/effective_polls.rb +50 -0
- data/lib/effective_polls/engine.rb +11 -0
- data/lib/effective_polls/version.rb +3 -0
- data/lib/generators/effective_polls/install_generator.rb +46 -0
- data/lib/generators/templates/effective_polls_mailer_preview.rb +35 -0
- data/lib/tasks/effective_polls_tasks.rake +24 -0
- metadata +276 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
= effective_form_with(model: [:admin, poll], engine: true) do |f|
|
2
|
+
= f.text_field :title, hint: 'The title of your poll.'
|
3
|
+
|
4
|
+
= f.datetime_field :start_at, input_js: { minDate: [f.object.start_at.presence, Time.zone.now].compact.min.strftime('%F') }
|
5
|
+
= f.datetime_field :end_at
|
6
|
+
|
7
|
+
-# Audience
|
8
|
+
= f.radios :audience, Effective::Poll::AUDIENCES
|
9
|
+
|
10
|
+
= f.show_if :audience, 'All Users' do
|
11
|
+
.card
|
12
|
+
.card-body
|
13
|
+
%h5 All Users
|
14
|
+
%p All users may complete this poll
|
15
|
+
|
16
|
+
= f.show_if :audience, 'Individual Users' do
|
17
|
+
.card
|
18
|
+
.card-body
|
19
|
+
%h5 Individual Users
|
20
|
+
%p Only the following individual users may complete this poll
|
21
|
+
|
22
|
+
- user_ids = User.respond_to?(:sorted) ? User.sorted : User.all
|
23
|
+
= f.select :audience_scope, user_ids, multiple: true, label: false
|
24
|
+
|
25
|
+
= f.show_if :audience, 'Selected Users' do
|
26
|
+
.card
|
27
|
+
.card-body
|
28
|
+
%h5 Selected Users
|
29
|
+
%p Users within any of the following groups may complete this poll
|
30
|
+
= f.checks :audience_scope, effective_polls_audience_scope_collection(), multiple: true, label: false
|
31
|
+
|
32
|
+
= effective_submit(f)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
.row
|
2
|
+
.col
|
3
|
+
%h3= poll_question
|
4
|
+
%p.text-muted.mb-2= poll_question.category
|
5
|
+
|
6
|
+
- if poll_question.body.present?
|
7
|
+
.mb-3= poll_question.body
|
8
|
+
|
9
|
+
= f.hidden_field :poll_id
|
10
|
+
= f.hidden_field :poll_question_id
|
11
|
+
|
12
|
+
- ballot_response = f.object
|
13
|
+
- partial = 'effective/ballot_responses/fields/' + poll_question.category_partial
|
14
|
+
= render(partial, f: f, ballot_response: ballot_response, poll_question: poll_question)
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.radios :poll_question_option_ids, poll_question.poll_question_options, label: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.date_field :date, label: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.email_field :email, label: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.text_area :long_answer, label: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.number_field :number, label: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.checks :poll_question_option_ids, poll_question.poll_question_options, label: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.checks :poll_question_option_ids, poll_question.poll_question_options, label: false, actions: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.checks :poll_question_option_ids, poll_question.poll_question_options, label: false, actions: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.checks :poll_question_option_ids, poll_question.poll_question_options, label: false, actions: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.checks :poll_question_option_ids, poll_question.poll_question_options, label: false, actions: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.checks :poll_question_option_ids, poll_question.poll_question_options, label: false, actions: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.text_field :short_answer, label: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= f.file_field :upload_file, label: false, required: poll_question.required?
|
@@ -0,0 +1 @@
|
|
1
|
+
= ballot_response.response.presence || '-'
|
@@ -0,0 +1 @@
|
|
1
|
+
= ballot_response.response&.strftime('%F') || '-'
|
@@ -0,0 +1 @@
|
|
1
|
+
= ballot_response.response.present? ? mail_to(ballot_response.response) : '-'
|
@@ -0,0 +1 @@
|
|
1
|
+
= ballot_response.response.presence || '-'
|
@@ -0,0 +1 @@
|
|
1
|
+
= ballot_response.response.presence || '-'
|
@@ -0,0 +1 @@
|
|
1
|
+
= ballot_response.response&.title || '-'
|
@@ -0,0 +1 @@
|
|
1
|
+
= ballot_response.response.presence || '-'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
.effective-ballot
|
2
|
+
%table.table.table-hover
|
3
|
+
%thead
|
4
|
+
%tr
|
5
|
+
%th Poll Question
|
6
|
+
%th Ballot Response
|
7
|
+
|
8
|
+
%tbody
|
9
|
+
- ballot.poll.poll_questions.each_with_index do |poll_question, index|
|
10
|
+
- ballot_response = ballot.ballot_response(poll_question)
|
11
|
+
|
12
|
+
%tr
|
13
|
+
%td= poll_question
|
14
|
+
%td= render(ballot_response)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
= render_wizard_sidebar(resource) do
|
2
|
+
%h1= @page_title
|
3
|
+
|
4
|
+
- if resource.poll.all_steps_content.present?
|
5
|
+
.mb-2= resource.poll.all_steps_content
|
6
|
+
|
7
|
+
- if resource.poll.complete_content.present?
|
8
|
+
.mb-2= resource.poll.complete_content
|
9
|
+
|
10
|
+
.text-center
|
11
|
+
%p= link_to 'Home', root_path, class: 'btn btn-primary'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
= render_wizard_sidebar(resource) do
|
2
|
+
%h1 Poll: #{resource.poll}
|
3
|
+
|
4
|
+
.alert.alert-warning
|
5
|
+
This is a <strong>Secret Ballot</strong>.
|
6
|
+
Only you will know what you have submitted and no one has access to individual ballots.
|
7
|
+
|
8
|
+
- if resource.poll.all_steps_content.present?
|
9
|
+
.mb-2= resource.poll.all_steps_content
|
10
|
+
|
11
|
+
- if resource.poll.start_content.present?
|
12
|
+
.mb-2= resource.poll.start_content
|
13
|
+
|
14
|
+
= effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
|
15
|
+
= f.hidden_field :current_step
|
16
|
+
|
17
|
+
= f.submit 'Start', center: true
|
@@ -0,0 +1,17 @@
|
|
1
|
+
= render_wizard_sidebar(resource) do
|
2
|
+
%h1 Review: #{resource.poll}
|
3
|
+
|
4
|
+
- if resource.poll.all_steps_content.present?
|
5
|
+
.mb-2= resource.poll.all_steps_content
|
6
|
+
|
7
|
+
- if resource.poll.submit_content.present?
|
8
|
+
.mb-2= resource.poll.submit_content
|
9
|
+
|
10
|
+
= effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
|
11
|
+
= f.hidden_field :current_step
|
12
|
+
|
13
|
+
= render(resource)
|
14
|
+
|
15
|
+
= f.submit(center: true) do
|
16
|
+
= link_to 'Change Ballot', wizard_path(:vote), class: 'btn btn-secondary'
|
17
|
+
= f.save 'Submit Ballot'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
= render_wizard_sidebar(resource) do
|
2
|
+
%h1 Ballot: #{resource.poll}
|
3
|
+
|
4
|
+
- if resource.poll.all_steps_content.present?
|
5
|
+
.mb-2= resource.poll.all_steps_content
|
6
|
+
|
7
|
+
- if resource.poll.vote_content.present?
|
8
|
+
.mb-2= resource.poll.vote_content
|
9
|
+
|
10
|
+
= effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
|
11
|
+
= f.hidden_field :current_step
|
12
|
+
|
13
|
+
- resource.poll.poll_questions.deep.all.each_with_index do |poll_question, index|
|
14
|
+
- ballot_response = resource.ballot_response(poll_question)
|
15
|
+
|
16
|
+
= f.fields_for :ballot_responses, ballot_response do |fbr|
|
17
|
+
= render('/effective/ballot_responses/fields', f: fbr, poll_question: poll_question)
|
18
|
+
|
19
|
+
= f.submit 'Save and Continue', center: true
|
@@ -0,0 +1,38 @@
|
|
1
|
+
.card.mb-3
|
2
|
+
.card-body
|
3
|
+
%h5.card-title Results
|
4
|
+
|
5
|
+
%p #{poll} was available from #{poll.available_date}.
|
6
|
+
|
7
|
+
%p
|
8
|
+
%strong
|
9
|
+
= pluralize(poll.completed_ballots.count, 'users')
|
10
|
+
completed
|
11
|
+
ballots from an audience of
|
12
|
+
= succeed('.') do
|
13
|
+
%strong= pluralize(poll.users.count, 'total users')
|
14
|
+
|
15
|
+
.card.mb-3
|
16
|
+
.card-body
|
17
|
+
%h5.card-title Question Results
|
18
|
+
|
19
|
+
.effective-ballot
|
20
|
+
%table.table.table-hover
|
21
|
+
%thead
|
22
|
+
%tr
|
23
|
+
%th Poll Question
|
24
|
+
%th Results
|
25
|
+
|
26
|
+
%tbody
|
27
|
+
- ballots = poll.ballots
|
28
|
+
|
29
|
+
- poll.poll_questions.each_with_index do |poll_question, index|
|
30
|
+
- ballot_responses = poll.poll_results(poll_question: poll_question)
|
31
|
+
|
32
|
+
%tr
|
33
|
+
%td
|
34
|
+
#{poll_question.position + 1}. #{poll_question}
|
35
|
+
%br
|
36
|
+
%small.text-muted= poll_question.category
|
37
|
+
|
38
|
+
%td= render('effective/poll_results/poll_result', poll_question: poll_question, ballot_responses: ballot_responses)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
- sorted = ballot_responses.sort { |a, b| (a.date || Time.zone.now.end_of_year) <=> (b.date || Time.zone.now.end_of_year) }
|
2
|
+
|
3
|
+
- sorted.group_by { |br| br.response }.each do |response, responses|
|
4
|
+
- count = responses.length
|
5
|
+
- total = ballot_responses.length
|
6
|
+
- percent = (total.zero? ? 0 : ((count * 100.0) / total).round)
|
7
|
+
|
8
|
+
.poll-result-option
|
9
|
+
.d-flex
|
10
|
+
.mr-auto= response.blank? ? 'None of the Above' : response.strftime('%F')
|
11
|
+
.text-muted #{count} (#{percent}%)
|
12
|
+
|
13
|
+
.progress.mb-3
|
14
|
+
.progress-bar{role: 'progressbar', 'aria-valuenow': count, 'aria-valuemin': 0, 'aria-valuemax': total, style: "width: #{percent}%"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
- sorted = ballot_responses.sort { |a, b| (a.email || '') <=> (b.email || '') }
|
2
|
+
|
3
|
+
- sorted.group_by { |br| br.response }.each do |response, responses|
|
4
|
+
- count = responses.length
|
5
|
+
- total = ballot_responses.length
|
6
|
+
- percent = (total.zero? ? 0 : ((count * 100.0) / total).round)
|
7
|
+
|
8
|
+
.poll-result-option
|
9
|
+
.d-flex
|
10
|
+
.mr-auto= response.blank? ? 'None of the Above' : response
|
11
|
+
.text-muted #{count} (#{percent}%)
|
12
|
+
|
13
|
+
.progress.mb-3
|
14
|
+
.progress-bar{role: 'progressbar', 'aria-valuenow': count, 'aria-valuemin': 0, 'aria-valuemax': total, style: "width: #{percent}%"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
- sorted = ballot_responses.sort { |a, b| (a.number || 999999999) <=> (b.number || 999999999) }
|
2
|
+
|
3
|
+
- sorted.group_by { |br| br.response }.each do |response, responses|
|
4
|
+
- count = responses.length
|
5
|
+
- total = ballot_responses.length
|
6
|
+
- percent = (total.zero? ? 0 : ((count * 100.0) / total).round)
|
7
|
+
|
8
|
+
.poll-result-option
|
9
|
+
.d-flex
|
10
|
+
.mr-auto= response.blank? ? 'None of the Above' : response
|
11
|
+
.text-muted #{count} (#{percent}%)
|
12
|
+
|
13
|
+
.progress.mb-3
|
14
|
+
.progress-bar{role: 'progressbar', 'aria-valuenow': count, 'aria-valuemin': 0, 'aria-valuemax': total, style: "width: #{percent}%"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
- (poll_question.poll_question_options + [nil]).each do |poll_question_option|
|
2
|
+
- responses = ballot_responses.select { |br| br.response.blank? } if poll_question_option.blank?
|
3
|
+
- responses ||= ballot_responses.select { |br| Array(br.response).include?(poll_question_option) }
|
4
|
+
|
5
|
+
- count = responses.length
|
6
|
+
- total = ballot_responses.length
|
7
|
+
- percent = (total.zero? ? 0 : ((count * 100.0) / total).round)
|
8
|
+
|
9
|
+
- next if poll_question_option.blank? && count == 0
|
10
|
+
|
11
|
+
.poll-result-option
|
12
|
+
.d-flex
|
13
|
+
.mr-auto= poll_question_option.blank? ? 'None of the Above' : poll_question_option
|
14
|
+
.text-muted #{count} (#{percent}%)
|
15
|
+
|
16
|
+
.progress.mb-3
|
17
|
+
.progress-bar{role: 'progressbar', 'aria-valuenow': count, 'aria-valuemin': 0, 'aria-valuemax': total, style: "width: #{percent}%"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
= effective_form_with(model: poll, engine: true) do |f|
|
2
|
+
= f.text_field :title, hint: 'The title of your poll.'
|
3
|
+
= f.text_area :body
|
4
|
+
|
5
|
+
= f.datetime_field :start_at
|
6
|
+
= f.datetime_field :end_at
|
7
|
+
|
8
|
+
= f.check_box :draft, hint: 'Save this poll as a draft. It will not be accessible on the website.'
|
9
|
+
|
10
|
+
= effective_submit(f)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
EffectivePolls.setup do |config|
|
2
|
+
config.polls_table_name = :polls
|
3
|
+
config.poll_notifications_table_name = :poll_notifications
|
4
|
+
config.poll_questions_table_name = :poll_questions
|
5
|
+
config.poll_question_options_table_name = :poll_question_options
|
6
|
+
config.ballots_table_name = :ballots
|
7
|
+
config.ballot_responses_table_name = :ballot_responses
|
8
|
+
config.ballot_response_options_table_name = :ballot_response_options
|
9
|
+
|
10
|
+
# Authorization Method
|
11
|
+
#
|
12
|
+
# This method is called by all controller actions with the appropriate action and resource
|
13
|
+
# If it raises an exception or returns false, an Effective::AccessDenied Error will be raised
|
14
|
+
#
|
15
|
+
# Use via Proc:
|
16
|
+
# Proc.new { |controller, action, resource| authorize!(action, resource) } # CanCan
|
17
|
+
# Proc.new { |controller, action, resource| can?(action, resource) } # CanCan with skip_authorization_check
|
18
|
+
# Proc.new { |controller, action, resource| authorize "#{action}?", resource } # Pundit
|
19
|
+
# Proc.new { |controller, action, resource| current_user.is?(:admin) } # Custom logic
|
20
|
+
#
|
21
|
+
# Use via Boolean:
|
22
|
+
# config.authorization_method = true # Always authorized
|
23
|
+
# config.authorization_method = false # Always unauthorized
|
24
|
+
#
|
25
|
+
# Use via Method (probably in your application_controller.rb):
|
26
|
+
# config.authorization_method = :my_authorization_method
|
27
|
+
# def my_authorization_method(resource, action)
|
28
|
+
# true
|
29
|
+
# end
|
30
|
+
config.authorization_method = Proc.new { |controller, action, resource| authorize!(action, resource) }
|
31
|
+
|
32
|
+
# Layout Settings
|
33
|
+
# Configure the Layout per controller, or all at once
|
34
|
+
config.layout = {
|
35
|
+
polls: 'application',
|
36
|
+
admin: 'admin'
|
37
|
+
}
|
38
|
+
|
39
|
+
# Audience Scope Collection
|
40
|
+
#
|
41
|
+
# When creating a new poll, an Array of User scopes can be provided
|
42
|
+
# The User model must respond to these
|
43
|
+
#
|
44
|
+
# config.audience_user_scopes = [:all, :registered]
|
45
|
+
# config.audience_user_scopes = [['All Users', :all], ['Registered Users', :registered]]
|
46
|
+
#
|
47
|
+
config.audience_user_scopes = [['All Users', :all]]
|
48
|
+
|
49
|
+
# Notifications Mailer Settings
|
50
|
+
#
|
51
|
+
# Schedule rake effective_polls:notify to run every 10 minutes
|
52
|
+
# to send out email poll notifications
|
53
|
+
#
|
54
|
+
config.mailer = {
|
55
|
+
layout: 'effective_polls_mailer_layout',
|
56
|
+
default_from: 'info@example.com'
|
57
|
+
}
|
58
|
+
|
59
|
+
end
|