tasuku 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.
- checksums.yaml +7 -0
- data/README.md +82 -0
- data/Rakefile +28 -0
- data/app/assets/javascripts/tasks/application.js +13 -0
- data/app/assets/stylesheets/tasks/application.css +15 -0
- data/app/controllers/tasks/application_controller.rb +13 -0
- data/app/controllers/tasks/taskables/image/responses_controller.rb +32 -0
- data/app/controllers/tasks/taskables/questions/answers_controller.rb +37 -0
- data/app/controllers/tasks/taskables/text/responses_controller.rb +32 -0
- data/app/controllers/tasks/taskables/url/responses_controller.rb +32 -0
- data/app/controllers/tasks/taskables/verifications/confirmations_controller.rb +28 -0
- data/app/controllers/tasks/tasks_controller.rb +7 -0
- data/app/helpers/tasks/application_helper.rb +7 -0
- data/app/helpers/tasks/taskables/verifications_helper.rb +18 -0
- data/app/models/tasks/task.rb +5 -0
- data/app/models/tasks/taskables.rb +7 -0
- data/app/models/tasks/taskables/image.rb +7 -0
- data/app/models/tasks/taskables/image/request.rb +7 -0
- data/app/models/tasks/taskables/image/response.rb +17 -0
- data/app/models/tasks/taskables/question.rb +7 -0
- data/app/models/tasks/taskables/question/answer.rb +39 -0
- data/app/models/tasks/taskables/question/option.rb +7 -0
- data/app/models/tasks/taskables/question/vote.rb +6 -0
- data/app/models/tasks/taskables/taskable.rb +31 -0
- data/app/models/tasks/taskables/taskable/response.rb +9 -0
- data/app/models/tasks/taskables/taskable/submission.rb +39 -0
- data/app/models/tasks/taskables/text.rb +7 -0
- data/app/models/tasks/taskables/text/request.rb +7 -0
- data/app/models/tasks/taskables/text/response.rb +15 -0
- data/app/models/tasks/taskables/url.rb +7 -0
- data/app/models/tasks/taskables/url/request.rb +5 -0
- data/app/models/tasks/taskables/url/response.rb +18 -0
- data/app/models/tasks/taskables/verification.rb +7 -0
- data/app/models/tasks/taskables/verification/confirmation.rb +12 -0
- data/app/uploaders/tasks/image_uploader.rb +58 -0
- data/app/views/tasks/taskables/image/requests/_request.html.erb +19 -0
- data/app/views/tasks/taskables/image/responses/_form.html.erb +8 -0
- data/app/views/tasks/taskables/image/responses/create.html.erb +2 -0
- data/app/views/tasks/taskables/questions/_question.html.erb +27 -0
- data/app/views/tasks/taskables/questions/answers/_form.html.erb +16 -0
- data/app/views/tasks/taskables/questions/answers/_statistics.html.erb +26 -0
- data/app/views/tasks/taskables/text/requests/_request.html.erb +19 -0
- data/app/views/tasks/taskables/text/responses/_form.html.erb +5 -0
- data/app/views/tasks/taskables/text/responses/create.html.erb +2 -0
- data/app/views/tasks/taskables/url/requests/_request.html.erb +19 -0
- data/app/views/tasks/taskables/url/responses/_form.html.erb +5 -0
- data/app/views/tasks/taskables/url/responses/create.html.erb +2 -0
- data/app/views/tasks/taskables/verifications/_verification.html.erb +1 -0
- data/app/views/tasks/taskables/verifications/confirmations/_form.html.erb +3 -0
- data/app/views/tasks/tasks/_task.html.erb +3 -0
- data/app/views/tasks/tasks/show.html.erb +1 -0
- data/config/locales/en.yml +24 -0
- data/config/locales/nb.yml +122 -0
- data/config/routes.rb +35 -0
- data/db/migrate/20140315151838_create_tasks_tasks.rb +9 -0
- data/db/migrate/20140315152116_create_tasks_taskables_verifications.rb +11 -0
- data/db/migrate/20140315153512_create_tasks_taskables_verification_confirmations.rb +13 -0
- data/db/migrate/20140316203422_create_tasks_taskables_questions.rb +9 -0
- data/db/migrate/20140316203812_create_tasks_taskables_question_options.rb +10 -0
- data/db/migrate/20140316204119_create_tasks_taskables_question_answers.rb +12 -0
- data/db/migrate/20140316221703_remove_unique_constraint_on_task_taskable_question_answer_index.rb +6 -0
- data/db/migrate/20140320123047_remove_unique_constraint_on_confirmation_author.rb +6 -0
- data/db/migrate/20140402132837_create_tasks_taskables_image_requests.rb +9 -0
- data/db/migrate/20140402135306_create_tasks_taskables_image_responses.rb +13 -0
- data/db/migrate/20140403090537_remove_unique_constraint_on_image_response_author.rb +6 -0
- data/db/migrate/20140404113158_add_description_to_taskables_questions.rb +5 -0
- data/db/migrate/20140404130151_add_description_to_tasks_taskables_image_requests.rb +5 -0
- data/db/migrate/20140512072931_create_tasks_taskables_url_requests.rb +10 -0
- data/db/migrate/20140512074135_create_tasks_taskables_url_responses.rb +13 -0
- data/db/migrate/20140512120632_create_tasks_taskables_question_votes.rb +10 -0
- data/db/migrate/20140512121254_add_multiple_to_question.rb +5 -0
- data/db/migrate/20140512131526_remove_option_id_from_questions.rb +21 -0
- data/db/migrate/20140514082129_create_tasks_taskables_text_requests.rb +10 -0
- data/db/migrate/20140514082143_create_tasks_taskables_text_responses.rb +13 -0
- data/db/migrate/20140520122938_add_correct_to_tasks_taskables_question_option.rb +5 -0
- data/db/migrate/20140521134515_add_show_statistics_to_tasks_taskables_question.rb +5 -0
- data/db/migrate/20140523091152_add_images.rb +8 -0
- data/db/migrate/20140604075046_add_obligatory_to_tasks_task.rb +5 -0
- data/db/migrate/20140605095241_create_tasks_taskables_taskable_responses.rb +10 -0
- data/db/migrate/20140605124021_add_task_to_response.rb +6 -0
- data/db/migrate/20140606072225_migrate_existing_date.rb +15 -0
- data/lib/generators/tasks/install/USAGE +8 -0
- data/lib/generators/tasks/install/install_generator.rb +23 -0
- data/lib/generators/tasks/install/templates/tasks.rb +3 -0
- data/lib/generators/tasks/views/USAGE +5 -0
- data/lib/generators/tasks/views/views_generator.rb +9 -0
- data/lib/tasks.rb +20 -0
- data/lib/tasks/concerns.rb +7 -0
- data/lib/tasks/concerns/controllers.rb +5 -0
- data/lib/tasks/concerns/controllers/tasks_controller.rb +18 -0
- data/lib/tasks/concerns/illustratable.rb +9 -0
- data/lib/tasks/concerns/models.rb +4 -0
- data/lib/tasks/concerns/models/task.rb +25 -0
- data/lib/tasks/concerns/models/taskables.rb +7 -0
- data/lib/tasks/concerns/models/taskables/image.rb +3 -0
- data/lib/tasks/concerns/models/taskables/image/request.rb +18 -0
- data/lib/tasks/concerns/models/taskables/question.rb +31 -0
- data/lib/tasks/concerns/models/taskables/text.rb +3 -0
- data/lib/tasks/concerns/models/taskables/text/request.rb +18 -0
- data/lib/tasks/concerns/models/taskables/url.rb +3 -0
- data/lib/tasks/concerns/models/taskables/url/request.rb +18 -0
- data/lib/tasks/concerns/models/taskables/verification.rb +20 -0
- data/lib/tasks/concerns/redirectable.rb +11 -0
- data/lib/tasks/concerns/verifiable.rb +9 -0
- data/lib/tasks/engine.rb +22 -0
- data/lib/tasks/seeds.rb +13 -0
- data/lib/tasks/tasks_tasks.rake +4 -0
- data/lib/tasks/version.rb +3 -0
- data/lib/tasuku.rb +1 -0
- data/spec/controllers/tasks/taskables/image/responses_controller_spec.rb +37 -0
- data/spec/controllers/tasks/taskables/questions/answers_controller_spec.rb +39 -0
- data/spec/controllers/tasks/taskables/text/responses_controller_spec.rb +37 -0
- data/spec/controllers/tasks/taskables/verifications/confirmations_controller_spec.rb +38 -0
- data/spec/controllers/tasks/tasks_controller_spec.rb +17 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +7 -0
- data/spec/dummy/app/helpers/application_helper.rb +5 -0
- data/spec/dummy/app/models/article.rb +3 -0
- data/spec/dummy/app/models/user.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +17 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +29 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +30 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +83 -0
- data/spec/dummy/config/environments/test.rb +39 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/migrate/20140315162017_create_users.rb +8 -0
- data/spec/dummy/db/migrate/20140315185502_create_articles.rb +8 -0
- data/spec/dummy/db/schema.rb +166 -0
- data/spec/dummy/db/seeds.rb +3 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +90 -0
- data/spec/dummy/log/test.log +2568 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/uploads/tasks/taskables/image/request/image/1/doge.jpg +0 -0
- data/spec/dummy/public/uploads/tasks/taskables/image/response/image/1/doge.jpg +0 -0
- data/spec/dummy/public/uploads/tasks/taskables/question/image/1/doge.jpg +0 -0
- data/spec/dummy/public/uploads/tasks/taskables/text/request/image/1/doge.jpg +0 -0
- data/spec/dummy/public/uploads/tasks/taskables/url/request/image/1/doge.jpg +0 -0
- data/spec/dummy/spec/factories/articles.rb +6 -0
- data/spec/dummy/spec/factories/users.rb +6 -0
- data/spec/dummy/spec/models/article_spec.rb +4 -0
- data/spec/dummy/spec/models/user_spec.rb +4 -0
- data/spec/factories/tasks_taskables_image_requests.rb +7 -0
- data/spec/factories/tasks_taskables_image_responses.rb +8 -0
- data/spec/factories/tasks_taskables_question_answers.rb +17 -0
- data/spec/factories/tasks_taskables_question_options.rb +10 -0
- data/spec/factories/tasks_taskables_question_votes.rb +8 -0
- data/spec/factories/tasks_taskables_questions.rb +19 -0
- data/spec/factories/tasks_taskables_taskable_responses.rb +8 -0
- data/spec/factories/tasks_taskables_text_requests.rb +5 -0
- data/spec/factories/tasks_taskables_text_responses.rb +6 -0
- data/spec/factories/tasks_taskables_url_requests.rb +8 -0
- data/spec/factories/tasks_taskables_url_responses.rb +9 -0
- data/spec/factories/tasks_taskables_verification_confirmations.rb +8 -0
- data/spec/factories/tasks_taskables_verifications.rb +7 -0
- data/spec/factories/tasks_tasks.rb +14 -0
- data/spec/fixtures/doge.jpg +0 -0
- data/spec/helpers/tasks/taskables/verifications_helper_spec.rb +20 -0
- data/spec/lib/generators/views_generators_spec.rb +22 -0
- data/spec/lib/tasks/concerns/verifiable_spec.rb +23 -0
- data/spec/models/tasks/task_spec.rb +20 -0
- data/spec/models/tasks/taskables/image/request_spec.rb +6 -0
- data/spec/models/tasks/taskables/image/response_spec.rb +18 -0
- data/spec/models/tasks/taskables/question/answer_spec.rb +91 -0
- data/spec/models/tasks/taskables/question/option_spec.rb +6 -0
- data/spec/models/tasks/taskables/question/vote_spec.rb +6 -0
- data/spec/models/tasks/taskables/question_spec.rb +18 -0
- data/spec/models/tasks/taskables/taskable/response_spec.rb +7 -0
- data/spec/models/tasks/taskables/taskable/submission_spec.rb +30 -0
- data/spec/models/tasks/taskables/taskable_spec.rb +49 -0
- data/spec/models/tasks/taskables/text/request_spec.rb +6 -0
- data/spec/models/tasks/taskables/text/response_spec.rb +17 -0
- data/spec/models/tasks/taskables/url/request_spec.rb +6 -0
- data/spec/models/tasks/taskables/url/response_spec.rb +6 -0
- data/spec/models/tasks/taskables/verification/confirmation_spec.rb +6 -0
- data/spec/models/tasks/taskables/verification_spec.rb +18 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/support/fixture.rb +3 -0
- data/spec/support/shared_examples_for_redirectable.rb +37 -0
- data/spec/support/trackable_submission_spec.rb +14 -0
- data/spec/views/tasks/taskables/image/requests/_request.html.erb_spec.rb +35 -0
- data/spec/views/tasks/taskables/image/responses/create.html.erb_spec.rb +4 -0
- data/spec/views/tasks/taskables/questions/_question.html.erb_spec.rb +35 -0
- data/spec/views/tasks/taskables/questions/answers/_form.html.erb_spec.rb +18 -0
- data/spec/views/tasks/taskables/text/requests/_request.html.erb_spec.rb +35 -0
- data/spec/views/tasks/taskables/url/requests/_request.html.erb_spec.rb +35 -0
- data/spec/views/tasks/taskables/verifications/confirmations/_form.html.erb_spec.rb +17 -0
- data/spec/views/tasks/tasks/show.html.erb_spec.rb +4 -0
- metadata +550 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 178d927e42e8632c3e04c9b4aac2cd3dddbed77e
|
4
|
+
data.tar.gz: 54d26f3a25a48853d7601e286b800daed8e2d118
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8d66367eaa1020978555af13a58f8a0b4a998e78db97964a47b5ac5163f558976efc422b5e69cc3d5863337dcfcf5367e4042a31a4cfd7eadd4c142bbf4a4ff5
|
7
|
+
data.tar.gz: 3ef5129686febd7059ae1706e5e2af7740ee58b56edd4f559d0b352778f92e8cd73fa644380e178a00ef9f73588f2b71d3e835b491d6a297fc3afac96dd789c3
|
data/README.md
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# Tasuku
|
2
|
+
|
3
|
+
[](https://rubygems.org/gems/tasuku)
|
4
|
+
[](https://travis-ci.org/hyperoslo/tasuku)
|
5
|
+
[](https://gemnasium.com/hyperoslo/tasuku)
|
6
|
+
[](https://codeclimate.com/github/hyperoslo/tasuku)
|
7
|
+
[](https://coveralls.io/r/hyperoslo/tasuku)
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
gem 'tasuku'
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install tasuku
|
22
|
+
|
23
|
+
Install the gem:
|
24
|
+
|
25
|
+
$ rails generate tasks:install
|
26
|
+
|
27
|
+
Run the migrations:
|
28
|
+
|
29
|
+
$ rake db:migrate
|
30
|
+
|
31
|
+
Then you can change the default configurations:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
# config/routes.rb
|
35
|
+
Rails.application.routes.draw do
|
36
|
+
mount Tasks::Engine, at: '/tasks'
|
37
|
+
end
|
38
|
+
```
|
39
|
+
|
40
|
+
And the method to use in deriving the current user:
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
# config/initializers/tasks.rb
|
44
|
+
Tasks.configure do |config|
|
45
|
+
config.author = :current_user
|
46
|
+
end
|
47
|
+
```
|
48
|
+
|
49
|
+
### Views
|
50
|
+
|
51
|
+
Tasuku ships with views, but you can copy them to customize things to your liking:
|
52
|
+
|
53
|
+
```
|
54
|
+
$ rails generate tasks:views
|
55
|
+
```
|
56
|
+
|
57
|
+
Tasuku defaults to using your application's layout, so you'll need to prefix your own route helpers with `main_app` so Ruby on Rails knows where to look.
|
58
|
+
|
59
|
+
## Usage
|
60
|
+
|
61
|
+
...
|
62
|
+
|
63
|
+
## Configuration
|
64
|
+
|
65
|
+
...
|
66
|
+
|
67
|
+
## Contributing
|
68
|
+
|
69
|
+
1. Fork it
|
70
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
71
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
72
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
73
|
+
5. Create new Pull Request
|
74
|
+
|
75
|
+
## Credits
|
76
|
+
|
77
|
+
Hyper made this. We're a digital communications agency with a passion for good code,
|
78
|
+
and if you're using this library we probably want to hire you.
|
79
|
+
|
80
|
+
## License
|
81
|
+
|
82
|
+
Tasks is available under the MIT license. See the LICENSE file for more info.
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Tasks'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
Bundler::GemHelper.install_tasks
|
21
|
+
|
22
|
+
require 'rspec/core'
|
23
|
+
require 'rspec/core/rake_task'
|
24
|
+
|
25
|
+
desc 'Run all specs in spec directory (excluding plugin specs)'
|
26
|
+
RSpec::Core::RakeTask.new spec: 'app:db:test:prepare'
|
27
|
+
|
28
|
+
task default: :spec
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require_tree .
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any styles
|
10
|
+
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
|
11
|
+
* file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_dependency "tasks/application_controller"
|
2
|
+
|
3
|
+
module Tasks
|
4
|
+
class Taskables::Image::ResponsesController < ApplicationController
|
5
|
+
include Concerns::Redirectable
|
6
|
+
|
7
|
+
before_action :set_request
|
8
|
+
|
9
|
+
def create
|
10
|
+
response = @request.responses.new response_params
|
11
|
+
response.author = send Tasks.config.author
|
12
|
+
|
13
|
+
respond_to do |format|
|
14
|
+
if response.save
|
15
|
+
format.html { redirect_to redirect_path_for(response) }
|
16
|
+
else
|
17
|
+
format.html { redirect_to :back, alert: response.errors.full_messages.to_sentence }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def response_params
|
25
|
+
params.require(:taskables_image_response).permit(:image)
|
26
|
+
end
|
27
|
+
|
28
|
+
def set_request
|
29
|
+
@request = Taskables::Image::Request.find params[:request_id]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_dependency "tasks/application_controller"
|
2
|
+
|
3
|
+
module Tasks
|
4
|
+
class Taskables::Questions::AnswersController < ApplicationController
|
5
|
+
include Concerns::Redirectable
|
6
|
+
|
7
|
+
before_action :set_question
|
8
|
+
|
9
|
+
def create
|
10
|
+
answer = Taskables::Question::Answer.new
|
11
|
+
|
12
|
+
answer_params[:option_ids].each do |num|
|
13
|
+
answer.votes.build option_id: num
|
14
|
+
end
|
15
|
+
|
16
|
+
answer.author = send Tasks.config.author
|
17
|
+
|
18
|
+
respond_to do |format|
|
19
|
+
if answer.save
|
20
|
+
format.html { redirect_to redirect_path_for(answer) }
|
21
|
+
else
|
22
|
+
format.html { redirect_to :back, alert: answer.errors.full_messages.to_sentence }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def answer_params
|
30
|
+
params.require(:taskables_question_answer).permit(option_ids: [])
|
31
|
+
end
|
32
|
+
|
33
|
+
def set_question
|
34
|
+
@question = Taskables::Question.find params[:question_id]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_dependency "tasks/application_controller"
|
2
|
+
|
3
|
+
module Tasks
|
4
|
+
class Taskables::Text::ResponsesController < ApplicationController
|
5
|
+
include Concerns::Redirectable
|
6
|
+
|
7
|
+
before_action :set_request
|
8
|
+
|
9
|
+
def create
|
10
|
+
response = @request.responses.new response_params
|
11
|
+
response.author = send Tasks.config.author
|
12
|
+
|
13
|
+
respond_to do |format|
|
14
|
+
if response.save
|
15
|
+
format.html { redirect_to redirect_path_for(response) }
|
16
|
+
else
|
17
|
+
format.html { redirect_to :back, alert: response.errors.full_messages.to_sentence }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def response_params
|
25
|
+
params.require(:taskables_text_response).permit(:text)
|
26
|
+
end
|
27
|
+
|
28
|
+
def set_request
|
29
|
+
@request = Taskables::Text::Request.find params[:request_id]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_dependency "tasks/application_controller"
|
2
|
+
|
3
|
+
module Tasks
|
4
|
+
class Taskables::URL::ResponsesController < ApplicationController
|
5
|
+
include Concerns::Redirectable
|
6
|
+
|
7
|
+
before_action :set_request
|
8
|
+
|
9
|
+
def create
|
10
|
+
response = @request.responses.new response_params
|
11
|
+
response.author = send Tasks.config.author
|
12
|
+
|
13
|
+
respond_to do |format|
|
14
|
+
if response.save
|
15
|
+
format.html { redirect_to redirect_path_for(response) }
|
16
|
+
else
|
17
|
+
format.html { redirect_to :back, alert: response.errors.full_messages.to_sentence }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def response_params
|
25
|
+
params.require(:taskables_url_response).permit(:url)
|
26
|
+
end
|
27
|
+
|
28
|
+
def set_request
|
29
|
+
@request = Taskables::URL::Request.find params[:request_id]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_dependency "tasks/application_controller"
|
2
|
+
|
3
|
+
module Tasks
|
4
|
+
class Taskables::Verifications::ConfirmationsController < ApplicationController
|
5
|
+
include Concerns::Redirectable
|
6
|
+
|
7
|
+
before_action :set_verification
|
8
|
+
|
9
|
+
def create
|
10
|
+
confirmation = @verification.confirmations.new
|
11
|
+
confirmation.author = send Tasks.config.author
|
12
|
+
|
13
|
+
respond_to do |format|
|
14
|
+
if confirmation.save
|
15
|
+
format.html { redirect_to redirect_path_for(confirmation) }
|
16
|
+
else
|
17
|
+
format.html { render text: 'Failed to confirm verification', status: :unprocessable_entity }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def set_verification
|
25
|
+
@verification = Taskables::Verification.find params[:verification_id]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Tasks
|
2
|
+
module Taskables::VerificationsHelper
|
3
|
+
|
4
|
+
# Render a button to confirm the given verification.
|
5
|
+
#
|
6
|
+
# verification - A Verification instance.
|
7
|
+
#
|
8
|
+
# Example:
|
9
|
+
#
|
10
|
+
# confirm terms_of_service.verification
|
11
|
+
#
|
12
|
+
def confirm verification
|
13
|
+
render partial: 'tasks/taskables/verifications/confirmations/form.html.erb', locals: {
|
14
|
+
confirmation: verification.confirmations.build
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Tasks
|
2
|
+
module Taskables
|
3
|
+
class Image::Response < ActiveRecord::Base
|
4
|
+
include Taskable::Submission
|
5
|
+
|
6
|
+
mount_uploader :image, ImageUploader
|
7
|
+
|
8
|
+
belongs_to :request
|
9
|
+
belongs_to :author, polymorphic: true
|
10
|
+
|
11
|
+
validates :author_id, :author_type, presence: true
|
12
|
+
validates :image, presence: true
|
13
|
+
|
14
|
+
request is: :request
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Tasks
|
2
|
+
module Taskables
|
3
|
+
class Question::Answer < ActiveRecord::Base
|
4
|
+
include Taskable::Submission
|
5
|
+
|
6
|
+
belongs_to :author, polymorphic: true
|
7
|
+
has_many :votes, dependent: :destroy
|
8
|
+
|
9
|
+
validates :author_id, :author_type, presence: true
|
10
|
+
validates :votes, length: { minimum: 1 }
|
11
|
+
validate :can_only_answer_each_question_once
|
12
|
+
validate :can_only_vote_once_for_single_choice_questions
|
13
|
+
|
14
|
+
def question
|
15
|
+
if votes.any?
|
16
|
+
votes.first.option.question
|
17
|
+
else
|
18
|
+
raise StandardError, "Cannot derive question for #{self}, as it has no votes"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
request is: :question
|
23
|
+
|
24
|
+
def correct?
|
25
|
+
votes.all? { |vote| vote.option.correct? }
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def can_only_answer_each_question_once
|
31
|
+
errors.add :base, I18n.t('tasks.taskables.questions.answers.already_answered') if question.answers.find_by author: author
|
32
|
+
end
|
33
|
+
|
34
|
+
def can_only_vote_once_for_single_choice_questions
|
35
|
+
errors.add :base, I18n.t('tasks.taskables.questions.answers.can_only_vote_once') if question.single? && votes.many?
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|