effective_polls 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +132 -0
  4. data/Rakefile +32 -0
  5. data/app/assets/config/effective_polls_manifest.js +1 -0
  6. data/app/assets/stylesheets/effective_polls.scss +0 -0
  7. data/app/controllers/admin/poll_notifications_controller.rb +15 -0
  8. data/app/controllers/admin/poll_questions_controller.rb +15 -0
  9. data/app/controllers/admin/polls_controller.rb +23 -0
  10. data/app/controllers/effective/ballots_controller.rb +70 -0
  11. data/app/controllers/effective/polls_controller.rb +19 -0
  12. data/app/datatables/admin/effective_poll_notifications_datatable.rb +43 -0
  13. data/app/datatables/admin/effective_poll_questions_datatable.rb +28 -0
  14. data/app/datatables/admin/effective_poll_results_datatable.rb +50 -0
  15. data/app/datatables/admin/effective_polls_datatable.rb +29 -0
  16. data/app/datatables/effective_polls_datatable.rb +30 -0
  17. data/app/helpers/effective_polls_helper.rb +23 -0
  18. data/app/mailers/effective/polls_mailer.rb +23 -0
  19. data/app/models/effective/access_denied.rb +17 -0
  20. data/app/models/effective/ballot.rb +73 -0
  21. data/app/models/effective/ballot_response.rb +92 -0
  22. data/app/models/effective/ballot_response_option.rb +6 -0
  23. data/app/models/effective/poll.rb +149 -0
  24. data/app/models/effective/poll_notification.rb +144 -0
  25. data/app/models/effective/poll_question.rb +76 -0
  26. data/app/models/effective/poll_question_option.rb +26 -0
  27. data/app/views/admin/poll_notifications/_form.html.haml +55 -0
  28. data/app/views/admin/poll_questions/_form.html.haml +100 -0
  29. data/app/views/admin/polls/_form.html.haml +20 -0
  30. data/app/views/admin/polls/_form_content.html.haml +27 -0
  31. data/app/views/admin/polls/_form_poll.html.haml +32 -0
  32. data/app/views/admin/polls/_poll.html.haml +2 -0
  33. data/app/views/admin/polls/results.html.haml +6 -0
  34. data/app/views/effective/ballot_responses/_ballot_response.html.haml +2 -0
  35. data/app/views/effective/ballot_responses/_fields.html.haml +14 -0
  36. data/app/views/effective/ballot_responses/fields/_choose_one.html.haml +1 -0
  37. data/app/views/effective/ballot_responses/fields/_date.html.haml +1 -0
  38. data/app/views/effective/ballot_responses/fields/_email.html.haml +1 -0
  39. data/app/views/effective/ballot_responses/fields/_long_answer.html.haml +1 -0
  40. data/app/views/effective/ballot_responses/fields/_number.html.haml +1 -0
  41. data/app/views/effective/ballot_responses/fields/_select_all_that_apply.html.haml +1 -0
  42. data/app/views/effective/ballot_responses/fields/_select_upto_1.html.haml +1 -0
  43. data/app/views/effective/ballot_responses/fields/_select_upto_2.html.haml +1 -0
  44. data/app/views/effective/ballot_responses/fields/_select_upto_3.html.haml +1 -0
  45. data/app/views/effective/ballot_responses/fields/_select_upto_4.html.haml +1 -0
  46. data/app/views/effective/ballot_responses/fields/_select_upto_5.html.haml +1 -0
  47. data/app/views/effective/ballot_responses/fields/_short_answer.html.haml +1 -0
  48. data/app/views/effective/ballot_responses/fields/_upload_file.html.haml +1 -0
  49. data/app/views/effective/ballot_responses/responses/_choose_one.html.haml +1 -0
  50. data/app/views/effective/ballot_responses/responses/_date.html.haml +1 -0
  51. data/app/views/effective/ballot_responses/responses/_email.html.haml +1 -0
  52. data/app/views/effective/ballot_responses/responses/_long_answer.html.haml +1 -0
  53. data/app/views/effective/ballot_responses/responses/_number.html.haml +1 -0
  54. data/app/views/effective/ballot_responses/responses/_select_all_that_apply.html.haml +5 -0
  55. data/app/views/effective/ballot_responses/responses/_select_upto_1.html.haml +1 -0
  56. data/app/views/effective/ballot_responses/responses/_select_upto_2.html.haml +5 -0
  57. data/app/views/effective/ballot_responses/responses/_select_upto_3.html.haml +5 -0
  58. data/app/views/effective/ballot_responses/responses/_select_upto_4.html.haml +5 -0
  59. data/app/views/effective/ballot_responses/responses/_select_upto_5.html.haml +5 -0
  60. data/app/views/effective/ballot_responses/responses/_short_answer.html.haml +1 -0
  61. data/app/views/effective/ballot_responses/responses/_upload_file.html.haml +4 -0
  62. data/app/views/effective/ballots/_ballot.html.haml +14 -0
  63. data/app/views/effective/ballots/complete.html.haml +11 -0
  64. data/app/views/effective/ballots/start.html.haml +17 -0
  65. data/app/views/effective/ballots/submit.html.haml +17 -0
  66. data/app/views/effective/ballots/vote.html.haml +19 -0
  67. data/app/views/effective/poll_results/_poll_result.html.haml +2 -0
  68. data/app/views/effective/poll_results/_results.html.haml +38 -0
  69. data/app/views/effective/poll_results/results/_choose_one.html.haml +2 -0
  70. data/app/views/effective/poll_results/results/_date.html.haml +14 -0
  71. data/app/views/effective/poll_results/results/_email.html.haml +14 -0
  72. data/app/views/effective/poll_results/results/_long_answer.html.haml +2 -0
  73. data/app/views/effective/poll_results/results/_number.html.haml +14 -0
  74. data/app/views/effective/poll_results/results/_poll_question_option.html.haml +17 -0
  75. data/app/views/effective/poll_results/results/_select_all_that_apply.html.haml +2 -0
  76. data/app/views/effective/poll_results/results/_select_upto_1.html.haml +2 -0
  77. data/app/views/effective/poll_results/results/_select_upto_2.html.haml +2 -0
  78. data/app/views/effective/poll_results/results/_select_upto_3.html.haml +2 -0
  79. data/app/views/effective/poll_results/results/_select_upto_4.html.haml +2 -0
  80. data/app/views/effective/poll_results/results/_select_upto_5.html.haml +2 -0
  81. data/app/views/effective/poll_results/results/_short_answer.html.haml +2 -0
  82. data/app/views/effective/poll_results/results/_upload_file.html.haml +3 -0
  83. data/app/views/effective/polls/_form.html.haml +10 -0
  84. data/app/views/effective/polls/_poll.html.haml +2 -0
  85. data/app/views/layouts/effective_polls_mailer_layout.html.haml +7 -0
  86. data/config/effective_polls.rb +59 -0
  87. data/config/routes.rb +23 -0
  88. data/db/migrate/01_create_effective_polls.rb.erb +92 -0
  89. data/lib/effective_polls.rb +50 -0
  90. data/lib/effective_polls/engine.rb +11 -0
  91. data/lib/effective_polls/version.rb +3 -0
  92. data/lib/generators/effective_polls/install_generator.rb +46 -0
  93. data/lib/generators/templates/effective_polls_mailer_preview.rb +35 -0
  94. data/lib/tasks/effective_polls_tasks.rake +24 -0
  95. metadata +276 -0
@@ -0,0 +1,23 @@
1
+ Rails.application.routes.draw do
2
+ mount EffectivePolls::Engine => '/', as: 'effective_polls'
3
+ end
4
+
5
+ EffectivePolls::Engine.routes.draw do
6
+ scope module: 'effective' do
7
+ resources :polls, only: [:show] do
8
+ resources :ballots, only: [:new, :show] do
9
+ resources :build, controller: :ballots, only: [:show, :update]
10
+ end
11
+ end
12
+ end
13
+
14
+ namespace :admin do
15
+ resources :polls, except: [:show] do
16
+ get :results, on: :member
17
+ end
18
+
19
+ resources :poll_notifications, except: [:show]
20
+ resources :poll_questions, except: [:show]
21
+ end
22
+
23
+ end
@@ -0,0 +1,92 @@
1
+ class CreateEffectivePolls < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table <%= @polls_table_name %> do |t|
4
+ t.string :title
5
+
6
+ t.string :token
7
+ t.datetime :start_at
8
+ t.datetime :end_at
9
+
10
+ t.string :audience
11
+ t.text :audience_scope
12
+
13
+ t.datetime :updated_at
14
+ t.datetime :created_at
15
+ end
16
+
17
+ create_table <%= @poll_notifications_table_name %> do |t|
18
+ t.references :poll
19
+
20
+ t.string :category
21
+ t.integer :reminder
22
+
23
+ t.string :subject
24
+ t.text :body
25
+
26
+ t.datetime :started_at
27
+ t.datetime :completed_at
28
+
29
+ t.datetime :updated_at
30
+ t.datetime :created_at
31
+ end
32
+
33
+ create_table <%= @poll_questions_table_name %> do |t|
34
+ t.references :poll
35
+
36
+ t.string :title
37
+ t.string :category
38
+ t.boolean :required, default: true
39
+
40
+ t.integer :position
41
+
42
+ t.datetime :updated_at
43
+ t.datetime :created_at
44
+ end
45
+
46
+ create_table <%= @poll_question_options_table_name %> do |t|
47
+ t.references :poll_question
48
+
49
+ t.string :title
50
+ t.integer :position
51
+
52
+ t.datetime :updated_at
53
+ t.datetime :created_at
54
+ end
55
+
56
+ create_table <%= @ballots_table_name %> do |t|
57
+ t.references :poll
58
+ t.references :user
59
+
60
+ t.string :token
61
+ t.text :wizard_steps
62
+ t.datetime :completed_at
63
+
64
+ t.datetime :updated_at
65
+ t.datetime :created_at
66
+ end
67
+
68
+ create_table <%= @ballot_responses_table_name %> do |t|
69
+ t.references :ballot
70
+ t.references :poll
71
+ t.references :poll_question
72
+
73
+ t.date :date
74
+ t.string :email
75
+ t.integer :number
76
+ t.text :long_answer
77
+ t.text :short_answer
78
+
79
+ t.datetime :updated_at
80
+ t.datetime :created_at
81
+ end
82
+
83
+ create_table <%= @ballot_response_options_table_name %> do |t|
84
+ t.references :ballot_response
85
+ t.references :poll_question_option
86
+
87
+ t.datetime :updated_at
88
+ t.datetime :created_at
89
+ end
90
+
91
+ end
92
+ end
@@ -0,0 +1,50 @@
1
+ require 'effective_resources'
2
+ require 'effective_datatables'
3
+ require 'effective_polls/engine'
4
+ require 'effective_polls/version'
5
+
6
+ module EffectivePolls
7
+ mattr_accessor :polls_table_name
8
+ mattr_accessor :poll_notifications_table_name
9
+ mattr_accessor :poll_questions_table_name
10
+ mattr_accessor :poll_question_options_table_name
11
+ mattr_accessor :ballots_table_name
12
+ mattr_accessor :ballot_responses_table_name
13
+ mattr_accessor :ballot_response_options_table_name
14
+
15
+ mattr_accessor :authorization_method
16
+ mattr_accessor :permitted_params
17
+
18
+ mattr_accessor :layout
19
+
20
+ mattr_accessor :audience_user_scopes
21
+
22
+ # Hashes of configs
23
+ mattr_accessor :mailer
24
+
25
+ def self.setup
26
+ yield self
27
+ end
28
+
29
+ def self.authorized?(controller, action, resource)
30
+ @_exceptions ||= [Effective::AccessDenied, (CanCan::AccessDenied if defined?(CanCan)), (Pundit::NotAuthorizedError if defined?(Pundit))].compact
31
+
32
+ return !!authorization_method unless authorization_method.respond_to?(:call)
33
+ controller = controller.controller if controller.respond_to?(:controller)
34
+
35
+ begin
36
+ !!(controller || self).instance_exec((controller || self), action, resource, &authorization_method)
37
+ rescue *@_exceptions
38
+ false
39
+ end
40
+ end
41
+
42
+ def self.authorize!(controller, action, resource)
43
+ raise Effective::AccessDenied.new('Access Denied', action, resource) unless authorized?(controller, action, resource)
44
+ end
45
+
46
+ def self.permitted_params
47
+ raise('todo')
48
+ end
49
+
50
+ end
@@ -0,0 +1,11 @@
1
+ module EffectivePolls
2
+ class Engine < ::Rails::Engine
3
+ engine_name 'effective_polls'
4
+
5
+ # Set up our default configuration options.
6
+ initializer 'effective_polls.defaults', before: :load_config_initializers do |app|
7
+ eval File.read("#{config.root}/config/effective_polls.rb")
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module EffectivePolls
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,46 @@
1
+ module EffectivePolls
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ include Rails::Generators::Migration
5
+
6
+ desc 'Creates an EffectivePolls initializer in your application.'
7
+
8
+ source_root File.expand_path('../../templates', __FILE__)
9
+
10
+ def self.next_migration_number(dirname)
11
+ if not ActiveRecord::Base.timestamped_migrations
12
+ Time.new.utc.strftime("%Y%m%d%H%M%S")
13
+ else
14
+ '%.3d' % (current_migration_number(dirname) + 1)
15
+ end
16
+ end
17
+
18
+ def copy_initializer
19
+ template ('../' * 3) + 'config/effective_polls.rb', 'config/initializers/effective_polls.rb'
20
+ end
21
+
22
+ def create_migration_file
23
+ @polls_table_name = ':' + EffectivePolls.polls_table_name.to_s
24
+ @poll_questions_table_name = ':' + EffectivePolls.poll_questions_table_name.to_s
25
+ @poll_notifications_table_name = ':' + EffectivePolls.poll_notifications_table_name.to_s
26
+ @poll_question_options_table_name = ':' + EffectivePolls.poll_question_options_table_name.to_s
27
+ @ballots_table_name = ':' + EffectivePolls.ballots_table_name.to_s
28
+ @ballot_responses_table_name = ':' + EffectivePolls.ballot_responses_table_name.to_s
29
+ @ballot_response_options_table_name = ':' + EffectivePolls.ballot_responses_table_name.to_s
30
+
31
+ migration_template ('../' * 3) + 'db/migrate/01_create_effective_polls.rb.erb', 'db/migrate/create_effective_polls.rb'
32
+ end
33
+
34
+ def copy_mailer_preview
35
+ mailer_preview_path = (Rails.application.config.action_mailer.preview_path rescue nil)
36
+
37
+ if mailer_preview_path.present?
38
+ template 'effective_polls_mailer_preview.rb', File.join(mailer_preview_path, 'effective_polls_mailer_preview.rb')
39
+ else
40
+ puts "couldn't find action_mailer.preview_path. Skipping effective_polls_mailer_preview."
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,35 @@
1
+ # Visit http://localhost:3000/rails/mailers
2
+
3
+ class EffectivePollsMailerPreview < ActionMailer::Preview
4
+
5
+ def poll_upcoming_reminder(poll_notification, bcc)
6
+ mail(bcc: bcc, body: poll_notification.body, subject: poll_notification.subject)
7
+ end
8
+
9
+ def poll_start
10
+ poll_notification = build_poll_notification('The poll has started')
11
+ Effective::PollsMailer.poll_start(poll_notification, bccs)
12
+ end
13
+
14
+ def poll_reminder
15
+ poll_notification = build_poll_notification('This is a reminder')
16
+ Effective::PollsMailer.poll_reminder(poll_notification, bccs)
17
+ end
18
+
19
+ def poll_end
20
+ poll_notification = build_poll_notification('The poll has ended')
21
+ Effective::PollsMailer.poll_end(poll_notification, bccs)
22
+ end
23
+
24
+ protected
25
+
26
+ def bccs
27
+ ['one@example.com', 'two@example.com', 'three@example.com', 'two-hundred-fifty@example.com']
28
+ end
29
+
30
+ def build_poll_notification(text)
31
+ poll = Effective::Poll.new(start_at: Time.zone.now)
32
+ Effective::PollNotification.new(poll: poll, body: text, subject: text)
33
+ end
34
+
35
+ end
@@ -0,0 +1,24 @@
1
+ # rake effective_polls:notify
2
+
3
+ namespace :effective_polls do
4
+ desc 'Send email notifications for effective polls'
5
+ task notify: :environment do
6
+ poll_notifications = Effective::PollNotification.all.deep.notifiable
7
+
8
+ poll_notifications.find_each do |poll_notification|
9
+ begin
10
+ notified = poll_notification.notify!
11
+ puts "Sent #{poll_notification.category} for #{poll_notification.poll}" if notified
12
+ rescue => e
13
+ if defined?(ExceptionNotifier)
14
+ data = { poll_notification_id: poll_notification.id, poll_id: poll_notification.poll_id }
15
+ ExceptionNotifier.notify_exception(e, data: data)
16
+ end
17
+
18
+ puts "Error with effective poll_notification #{poll_notification.id}: #{e.errors.inspect}"
19
+ end
20
+ end
21
+
22
+ puts 'All done'
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,276 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: effective_polls
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Code and Effect
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-01-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 6.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 6.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: sass
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: effective_bootstrap
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: effective_datatables
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 4.0.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 4.0.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: effective_resources
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: devise
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: haml-rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: wicked
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pry-byebug
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: Online polls and user voting.
154
+ email:
155
+ - info@codeandeffect.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - MIT-LICENSE
161
+ - README.md
162
+ - Rakefile
163
+ - app/assets/config/effective_polls_manifest.js
164
+ - app/assets/stylesheets/effective_polls.scss
165
+ - app/controllers/admin/poll_notifications_controller.rb
166
+ - app/controllers/admin/poll_questions_controller.rb
167
+ - app/controllers/admin/polls_controller.rb
168
+ - app/controllers/effective/ballots_controller.rb
169
+ - app/controllers/effective/polls_controller.rb
170
+ - app/datatables/admin/effective_poll_notifications_datatable.rb
171
+ - app/datatables/admin/effective_poll_questions_datatable.rb
172
+ - app/datatables/admin/effective_poll_results_datatable.rb
173
+ - app/datatables/admin/effective_polls_datatable.rb
174
+ - app/datatables/effective_polls_datatable.rb
175
+ - app/helpers/effective_polls_helper.rb
176
+ - app/mailers/effective/polls_mailer.rb
177
+ - app/models/effective/access_denied.rb
178
+ - app/models/effective/ballot.rb
179
+ - app/models/effective/ballot_response.rb
180
+ - app/models/effective/ballot_response_option.rb
181
+ - app/models/effective/poll.rb
182
+ - app/models/effective/poll_notification.rb
183
+ - app/models/effective/poll_question.rb
184
+ - app/models/effective/poll_question_option.rb
185
+ - app/views/admin/poll_notifications/_form.html.haml
186
+ - app/views/admin/poll_questions/_form.html.haml
187
+ - app/views/admin/polls/_form.html.haml
188
+ - app/views/admin/polls/_form_content.html.haml
189
+ - app/views/admin/polls/_form_poll.html.haml
190
+ - app/views/admin/polls/_poll.html.haml
191
+ - app/views/admin/polls/results.html.haml
192
+ - app/views/effective/ballot_responses/_ballot_response.html.haml
193
+ - app/views/effective/ballot_responses/_fields.html.haml
194
+ - app/views/effective/ballot_responses/fields/_choose_one.html.haml
195
+ - app/views/effective/ballot_responses/fields/_date.html.haml
196
+ - app/views/effective/ballot_responses/fields/_email.html.haml
197
+ - app/views/effective/ballot_responses/fields/_long_answer.html.haml
198
+ - app/views/effective/ballot_responses/fields/_number.html.haml
199
+ - app/views/effective/ballot_responses/fields/_select_all_that_apply.html.haml
200
+ - app/views/effective/ballot_responses/fields/_select_upto_1.html.haml
201
+ - app/views/effective/ballot_responses/fields/_select_upto_2.html.haml
202
+ - app/views/effective/ballot_responses/fields/_select_upto_3.html.haml
203
+ - app/views/effective/ballot_responses/fields/_select_upto_4.html.haml
204
+ - app/views/effective/ballot_responses/fields/_select_upto_5.html.haml
205
+ - app/views/effective/ballot_responses/fields/_short_answer.html.haml
206
+ - app/views/effective/ballot_responses/fields/_upload_file.html.haml
207
+ - app/views/effective/ballot_responses/responses/_choose_one.html.haml
208
+ - app/views/effective/ballot_responses/responses/_date.html.haml
209
+ - app/views/effective/ballot_responses/responses/_email.html.haml
210
+ - app/views/effective/ballot_responses/responses/_long_answer.html.haml
211
+ - app/views/effective/ballot_responses/responses/_number.html.haml
212
+ - app/views/effective/ballot_responses/responses/_select_all_that_apply.html.haml
213
+ - app/views/effective/ballot_responses/responses/_select_upto_1.html.haml
214
+ - app/views/effective/ballot_responses/responses/_select_upto_2.html.haml
215
+ - app/views/effective/ballot_responses/responses/_select_upto_3.html.haml
216
+ - app/views/effective/ballot_responses/responses/_select_upto_4.html.haml
217
+ - app/views/effective/ballot_responses/responses/_select_upto_5.html.haml
218
+ - app/views/effective/ballot_responses/responses/_short_answer.html.haml
219
+ - app/views/effective/ballot_responses/responses/_upload_file.html.haml
220
+ - app/views/effective/ballots/_ballot.html.haml
221
+ - app/views/effective/ballots/complete.html.haml
222
+ - app/views/effective/ballots/start.html.haml
223
+ - app/views/effective/ballots/submit.html.haml
224
+ - app/views/effective/ballots/vote.html.haml
225
+ - app/views/effective/poll_results/_poll_result.html.haml
226
+ - app/views/effective/poll_results/_results.html.haml
227
+ - app/views/effective/poll_results/results/_choose_one.html.haml
228
+ - app/views/effective/poll_results/results/_date.html.haml
229
+ - app/views/effective/poll_results/results/_email.html.haml
230
+ - app/views/effective/poll_results/results/_long_answer.html.haml
231
+ - app/views/effective/poll_results/results/_number.html.haml
232
+ - app/views/effective/poll_results/results/_poll_question_option.html.haml
233
+ - app/views/effective/poll_results/results/_select_all_that_apply.html.haml
234
+ - app/views/effective/poll_results/results/_select_upto_1.html.haml
235
+ - app/views/effective/poll_results/results/_select_upto_2.html.haml
236
+ - app/views/effective/poll_results/results/_select_upto_3.html.haml
237
+ - app/views/effective/poll_results/results/_select_upto_4.html.haml
238
+ - app/views/effective/poll_results/results/_select_upto_5.html.haml
239
+ - app/views/effective/poll_results/results/_short_answer.html.haml
240
+ - app/views/effective/poll_results/results/_upload_file.html.haml
241
+ - app/views/effective/polls/_form.html.haml
242
+ - app/views/effective/polls/_poll.html.haml
243
+ - app/views/layouts/effective_polls_mailer_layout.html.haml
244
+ - config/effective_polls.rb
245
+ - config/routes.rb
246
+ - db/migrate/01_create_effective_polls.rb.erb
247
+ - lib/effective_polls.rb
248
+ - lib/effective_polls/engine.rb
249
+ - lib/effective_polls/version.rb
250
+ - lib/generators/effective_polls/install_generator.rb
251
+ - lib/generators/templates/effective_polls_mailer_preview.rb
252
+ - lib/tasks/effective_polls_tasks.rake
253
+ homepage: https://github.com/code-and-effect/effective_polls
254
+ licenses:
255
+ - MIT
256
+ metadata: {}
257
+ post_install_message:
258
+ rdoc_options: []
259
+ require_paths:
260
+ - lib
261
+ required_ruby_version: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - ">="
264
+ - !ruby/object:Gem::Version
265
+ version: '0'
266
+ required_rubygems_version: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - ">="
269
+ - !ruby/object:Gem::Version
270
+ version: '0'
271
+ requirements: []
272
+ rubygems_version: 3.1.2
273
+ signing_key:
274
+ specification_version: 4
275
+ summary: Online polls and user voting.
276
+ test_files: []