tasuku 0.1.1 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/app/controllers/tasuku/taskables/code/responses_controller.rb +32 -0
- data/app/controllers/tasuku/taskables/questions/answers_controller.rb +1 -0
- data/app/helpers/tasuku/url_helper.rb +11 -0
- data/app/models/tasuku/task.rb +1 -0
- data/app/models/tasuku/task_requirement.rb +5 -0
- data/app/models/tasuku/taskables/code/request.rb +7 -0
- data/app/models/tasuku/taskables/code/response.rb +22 -0
- data/app/models/tasuku/taskables/code.rb +7 -0
- data/app/models/tasuku/taskables/question/option.rb +1 -0
- data/app/views/tasuku/taskables/_illustration.html.erb +7 -0
- data/app/views/tasuku/taskables/code/requests/_request.html.erb +9 -0
- data/app/views/tasuku/taskables/code/responses/_form.html.erb +5 -0
- data/app/views/tasuku/taskables/image/requests/_request.html.erb +1 -3
- data/app/views/tasuku/taskables/questions/_question.html.erb +2 -3
- data/app/views/tasuku/taskables/questions/answers/_form.html.erb +3 -1
- data/app/views/tasuku/taskables/text/requests/_request.html.erb +1 -3
- data/app/views/tasuku/taskables/url/requests/_request.html.erb +1 -3
- data/config/locales/en.yml +155 -11
- data/config/locales/nb.yml +14 -4
- data/config/routes.rb +6 -0
- data/db/migrate/20140611084458_add_video_urls.rb +8 -0
- data/db/migrate/20140813073552_create_tasuku_taskables_code_requests.rb +10 -0
- data/db/migrate/20140813075643_create_tasuku_taskables_code_responses.rb +11 -0
- data/db/migrate/20140813080116_add_reply_to_option.rb +5 -0
- data/db/migrate/20140910112050_create_tasuku_task_requirements.rb +10 -0
- data/db/migrate/20140926105940_add_description_to_code_requests.rb +5 -0
- data/lib/tasuku/concerns/illustratable.rb +3 -0
- data/lib/tasuku/concerns/models/requirables/inverse_requirable.rb +12 -0
- data/lib/tasuku/concerns/models/requirables/requirable.rb +35 -0
- data/lib/tasuku/concerns/models/requirables.rb +4 -0
- data/lib/tasuku/concerns/models/taskables/code/request.rb +19 -0
- data/lib/tasuku/concerns/models/taskables/code.rb +3 -0
- data/lib/tasuku/concerns/models/taskables.rb +1 -0
- data/lib/tasuku/concerns/models.rb +1 -0
- data/lib/tasuku/seeds.rb +3 -0
- data/lib/tasuku/version.rb +1 -1
- data/spec/controllers/tasuku/taskables/code/responses_controller_spec.rb +38 -0
- data/spec/controllers/tasuku/taskables/questions/answers_controller_spec.rb +21 -0
- data/spec/dummy/app/controllers/application_controller.rb +1 -0
- data/spec/dummy/config/routes.rb +2 -1
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +30 -1
- data/spec/dummy/db/seeds.rb +1 -1
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +7584 -57
- data/spec/dummy/log/test.log +37002 -13558
- data/spec/dummy/public/uploads/{tasks/taskables/image/request/image/1 → tasuku/taskables/image/request/image/2}/doge.jpg +0 -0
- data/spec/dummy/public/uploads/{tasks/taskables/image/response/image/1 → tasuku/taskables/question/image/2}/doge.jpg +0 -0
- data/spec/dummy/public/uploads/{tasks/taskables/question/image/1 → tasuku/taskables/text/request/image/2}/doge.jpg +0 -0
- data/spec/dummy/public/uploads/{tasks/taskables/text/request/image/1 → tasuku/taskables/url/request/image/2}/doge.jpg +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/factories/tasuku_responses.rb +6 -0
- data/spec/factories/tasuku_task_requirements.rb +8 -0
- data/spec/factories/tasuku_taskables_code_requests.rb +8 -0
- data/spec/factories/tasuku_taskables_code_responses.rb +6 -0
- data/spec/factories/tasuku_taskables_question_options.rb +1 -0
- data/spec/models/tasuku/task_requirement_spec.rb +9 -0
- data/spec/models/tasuku/task_spec.rb +42 -0
- data/spec/models/tasuku/taskables/code/request_spec.rb +6 -0
- data/spec/models/tasuku/taskables/code/response_spec.rb +27 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support/shared_examples_for_redirectable.rb +9 -0
- data/spec/views/tasuku/taskables/code/requests/_request.html.erb_spec.rb +5 -0
- data/spec/views/tasuku/taskables/illustration_spec.rb +19 -0
- data/spec/views/tasuku/taskables/image/requests/_request.html.erb_spec.rb +8 -9
- data/spec/views/tasuku/taskables/questions/_question.html.erb_spec.rb +8 -9
- data/spec/views/tasuku/taskables/text/requests/_request.html.erb_spec.rb +8 -9
- data/spec/views/tasuku/taskables/url/requests/_request.html.erb_spec.rb +8 -9
- metadata +110 -31
- data/lib/tasks/concerns/models/taskables/image.rb +0 -3
- data/lib/tasks/concerns/models/taskables/text.rb +0 -3
- data/lib/tasks/concerns/models/taskables/url.rb +0 -3
- data/lib/tasks/concerns/models/taskables.rb +0 -7
- data/lib/tasks/concerns/models.rb +0 -4
- data/spec/dummy/public/uploads/tasks/taskables/url/request/image/1/doge.jpg +0 -0
- data/spec/dummy/public/uploads/tmp/1402401935-55786-0961/doge.jpg +0 -0
- data/spec/dummy/public/uploads/tmp/1402401935-55786-2854/doge.jpg +0 -0
- data/spec/dummy/public/uploads/tmp/1402402180-56033-5455/doge.jpg +0 -0
- data/spec/dummy/public/uploads/tmp/1402402180-56033-5512/doge.jpg +0 -0
- data/spec/factories/tasks_taskables_taskable_responses.rb +0 -8
File without changes
|
File without changes
|
File without changes
|
File without changes
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# Read about factories at https://github.com/thoughtbot/factory_girl
|
2
|
+
|
3
|
+
FactoryGirl.define do
|
4
|
+
factory :tasuku_task_requirement, aliases: [:task_requirement], class: 'Tasuku::TaskRequirement' do
|
5
|
+
association :task, factory: :task
|
6
|
+
association :requirement, factory: :task
|
7
|
+
end
|
8
|
+
end
|
@@ -13,5 +13,47 @@ module Tasuku
|
|
13
13
|
expect(Tasuku::Task.completed_by(user)).to eq([task])
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
describe "Requirements" do
|
18
|
+
let!(:user) { create :user }
|
19
|
+
let!(:task) { create(:task) }
|
20
|
+
let!(:required_task) { create(:task) }
|
21
|
+
|
22
|
+
context "with requirements for task" do
|
23
|
+
let!(:requirement) { create :task_requirement, task: task, requirement: required_task }
|
24
|
+
|
25
|
+
context "without accomplished requirement" do
|
26
|
+
describe "#locked?" do
|
27
|
+
it "returns true" do
|
28
|
+
expect(task.locked? user).to be_true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#locked_by_tasks" do
|
33
|
+
it "returns list of tasks to acomplish" do
|
34
|
+
expect(task.locked_by_tasks user).to eq([required_task])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "with accomplished requirement" do
|
40
|
+
let!(:response) { create :response, author: user, task: required_task }
|
41
|
+
|
42
|
+
describe "#locked?" do
|
43
|
+
it "returns false" do
|
44
|
+
expect(task.locked? user).to be_false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#locked_by_tasks" do
|
49
|
+
it "returns empty list" do
|
50
|
+
expect(task.locked_by_tasks user).to be_empty
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
16
58
|
end
|
17
59
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Tasuku
|
4
|
+
describe Taskables::Code::Response do
|
5
|
+
let(:request) { create :code_request, code: '1337' }
|
6
|
+
let(:user) { create :user }
|
7
|
+
|
8
|
+
describe 'validations' do
|
9
|
+
context 'with an invalid code' do
|
10
|
+
let(:response) { build :code_response, author: user, request: request, code: '0000' }
|
11
|
+
|
12
|
+
it 'is not valid' do
|
13
|
+
expect(response).not_to be_valid
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'with a valid code' do
|
18
|
+
let(:response) { build :code_response, author: user, request: request, code: '1337' }
|
19
|
+
|
20
|
+
it 'is valid' do
|
21
|
+
expect(response).to be_valid
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,6 +4,9 @@ require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
|
4
4
|
require 'rspec/rails'
|
5
5
|
require 'rspec/autorun'
|
6
6
|
require 'factory_girl_rails'
|
7
|
+
require 'coveralls'
|
8
|
+
|
9
|
+
Coveralls.wear!
|
7
10
|
|
8
11
|
Rails.backtrace_cleaner.remove_silencers!
|
9
12
|
|
@@ -21,6 +24,7 @@ RSpec.configure do |config|
|
|
21
24
|
|
22
25
|
config.include FactoryGirl::Syntax::Methods
|
23
26
|
config.include ActionDispatch::TestProcess
|
27
|
+
config.include Rails.application.routes.url_helpers
|
24
28
|
|
25
29
|
config.fixture_path = "#{File.dirname(__FILE__)}/fixtures"
|
26
30
|
end
|
@@ -33,5 +33,14 @@ shared_examples 'redirectable' do
|
|
33
33
|
expect(response).to redirect_to after_completion_path
|
34
34
|
end
|
35
35
|
end
|
36
|
+
|
37
|
+
context 'with application route' do
|
38
|
+
before { expect(subject).to receive(:after_completion_path_for).and_return test_path }
|
39
|
+
|
40
|
+
it 'redirects to the configured url' do
|
41
|
+
send(verb, action, params)
|
42
|
+
expect(response).to redirect_to test_path
|
43
|
+
end
|
44
|
+
end
|
36
45
|
end
|
37
46
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
shared_examples 'illustrations' do
|
2
|
+
it 'renders the image' do
|
3
|
+
expect(rendered).to have_xpath "//img[contains(@src, \"#{request.image.url}\")]"
|
4
|
+
end
|
5
|
+
|
6
|
+
it 'renders the video' do
|
7
|
+
expect(rendered).to have_xpath "//div[@class='video']"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
shared_examples 'no illustrations' do
|
12
|
+
it 'does not render an image' do
|
13
|
+
expect(rendered).not_to have_xpath "//img"
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'does not render a video' do
|
17
|
+
expect(rendered).not_to have_xpath "//div[@class='video']"
|
18
|
+
end
|
19
|
+
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'views/tasuku/taskables/illustration_spec'
|
2
3
|
|
3
4
|
describe 'tasuku/taskables/image/requests/_request.html.erb' do
|
4
5
|
let(:user) { create :user }
|
5
6
|
|
6
|
-
context 'for image requests that have
|
7
|
-
let(:image_request) { create :image_request, image: fixture("doge.jpg") }
|
7
|
+
context 'for image requests that have picture or video' do
|
8
|
+
let(:image_request) { create :image_request, image: fixture("doge.jpg"), video_url: 'https://www.youtube.com/watch?v=z9Uz1icjwrM' }
|
8
9
|
|
9
10
|
before do
|
10
11
|
render partial: 'tasuku/taskables/image/requests/request.html.erb', locals: {
|
@@ -13,12 +14,11 @@ describe 'tasuku/taskables/image/requests/_request.html.erb' do
|
|
13
14
|
}
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
end
|
17
|
+
alias_method :request, :image_request
|
18
|
+
it_behaves_like 'illustrations'
|
19
19
|
end
|
20
20
|
|
21
|
-
context 'for image requests that have no image' do
|
21
|
+
context 'for image requests that have no image or video' do
|
22
22
|
let(:image_request) { create :image_request }
|
23
23
|
|
24
24
|
before do
|
@@ -28,8 +28,7 @@ describe 'tasuku/taskables/image/requests/_request.html.erb' do
|
|
28
28
|
}
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
end
|
31
|
+
alias_method :request, :image_request
|
32
|
+
it_behaves_like 'no illustrations'
|
34
33
|
end
|
35
34
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'views/tasuku/taskables/illustration_spec'
|
2
3
|
|
3
4
|
describe 'tasuku/taskables/questions/_question.html.erb' do
|
4
5
|
let(:user) { create :user }
|
5
6
|
|
6
|
-
context 'for questions that have an image' do
|
7
|
-
let(:question) { create :question_with_options, image: fixture("doge.jpg") }
|
7
|
+
context 'for questions that have an image or video' do
|
8
|
+
let(:question) { create :question_with_options, image: fixture("doge.jpg"), video_url: 'https://www.youtube.com/watch?v=z9Uz1icjwrM' }
|
8
9
|
|
9
10
|
before do
|
10
11
|
render partial: 'tasuku/taskables/questions/question.html.erb', locals: {
|
@@ -13,12 +14,11 @@ describe 'tasuku/taskables/questions/_question.html.erb' do
|
|
13
14
|
}
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
end
|
17
|
+
alias_method :request, :question
|
18
|
+
it_behaves_like 'illustrations'
|
19
19
|
end
|
20
20
|
|
21
|
-
context 'for questions that have no image' do
|
21
|
+
context 'for questions that have no image or video' do
|
22
22
|
let(:question) { create :question_with_options }
|
23
23
|
|
24
24
|
before do
|
@@ -28,8 +28,7 @@ describe 'tasuku/taskables/questions/_question.html.erb' do
|
|
28
28
|
}
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
end
|
31
|
+
alias_method :request, :question
|
32
|
+
it_behaves_like 'no illustrations'
|
34
33
|
end
|
35
34
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'views/tasuku/taskables/illustration_spec'
|
2
3
|
|
3
4
|
describe 'tasuku/taskables/text/requests/_request.html.erb' do
|
4
5
|
let(:user) { create :user }
|
5
6
|
|
6
|
-
context 'for text requests that have an image' do
|
7
|
-
let(:text_request) { create :text_request, image: fixture("doge.jpg") }
|
7
|
+
context 'for text requests that have an image or video' do
|
8
|
+
let(:text_request) { create :text_request, image: fixture("doge.jpg"), video_url: 'https://www.youtube.com/watch?v=z9Uz1icjwrM' }
|
8
9
|
|
9
10
|
before do
|
10
11
|
render partial: 'tasuku/taskables/text/requests/request.html.erb', locals: {
|
@@ -13,12 +14,11 @@ describe 'tasuku/taskables/text/requests/_request.html.erb' do
|
|
13
14
|
}
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
end
|
17
|
+
alias_method :request, :text_request
|
18
|
+
it_behaves_like 'illustrations'
|
19
19
|
end
|
20
20
|
|
21
|
-
context 'for text requests that have no image' do
|
21
|
+
context 'for text requests that have no image or video' do
|
22
22
|
let(:text_request) { create :text_request }
|
23
23
|
|
24
24
|
before do
|
@@ -28,8 +28,7 @@ describe 'tasuku/taskables/text/requests/_request.html.erb' do
|
|
28
28
|
}
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
end
|
31
|
+
alias_method :request, :text_request
|
32
|
+
it_behaves_like 'no illustrations'
|
34
33
|
end
|
35
34
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'views/tasuku/taskables/illustration_spec'
|
2
3
|
|
3
4
|
describe 'tasuku/taskables/url/requests/_request.html.erb' do
|
4
5
|
let(:user) { create :user }
|
5
6
|
|
6
|
-
context 'for url requests that have an image' do
|
7
|
-
let(:url_request) { create :url_request, image: fixture("doge.jpg") }
|
7
|
+
context 'for url requests that have an image or video' do
|
8
|
+
let(:url_request) { create :url_request, image: fixture("doge.jpg"), video_url: 'https://www.youtube.com/watch?v=z9Uz1icjwrM' }
|
8
9
|
|
9
10
|
before do
|
10
11
|
render partial: 'tasuku/taskables/url/requests/request.html.erb', locals: {
|
@@ -13,12 +14,11 @@ describe 'tasuku/taskables/url/requests/_request.html.erb' do
|
|
13
14
|
}
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
end
|
17
|
+
alias_method :request, :url_request
|
18
|
+
it_behaves_like 'illustrations'
|
19
19
|
end
|
20
20
|
|
21
|
-
context 'for url requests that have no image' do
|
21
|
+
context 'for url requests that have no image or video' do
|
22
22
|
let(:url_request) { create :url_request }
|
23
23
|
|
24
24
|
before do
|
@@ -28,8 +28,7 @@ describe 'tasuku/taskables/url/requests/_request.html.erb' do
|
|
28
28
|
}
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
end
|
31
|
+
alias_method :request, :url_request
|
32
|
+
it_behaves_like 'no illustrations'
|
34
33
|
end
|
35
34
|
end
|