mumuki-laboratory 5.3.0 → 5.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -1
- data/app/assets/javascripts/application/kids.js +47 -17
- data/app/assets/stylesheets/application/modules/_kids.scss +20 -0
- data/app/assets/stylesheets/application.scss +1 -1
- data/app/controllers/invitations_controller.rb +2 -2
- data/app/helpers/application_helper.rb +12 -2
- data/app/mailers/user_mailer.rb +12 -3
- data/app/models/assignment.rb +8 -0
- data/app/models/concerns/assistable.rb +17 -0
- data/app/models/concerns/with_expectations.rb +1 -5
- data/app/models/concerns/with_reminders.rb +53 -9
- data/app/models/concerns/with_slug.rb +1 -1
- data/app/models/concerns/with_status.rb +1 -1
- data/app/models/exercise.rb +2 -2
- data/app/models/organization.rb +8 -0
- data/app/models/submission/submission.rb +3 -1
- data/app/models/user.rb +4 -0
- data/app/views/book/show.html.erb +1 -1
- data/app/views/exercise_solutions/_expectations.html.erb +7 -0
- data/app/views/exercise_solutions/_results.html.erb +6 -3
- data/app/views/layouts/_kids.html.erb +3 -3
- data/app/views/layouts/application.html.erb +4 -5
- data/app/views/user_mailer/no_submissions_reminder.html.erb +349 -0
- data/app/views/user_mailer/no_submissions_reminder.text.erb +13 -0
- data/db/migrate/20180307150148_add_failed_submissions_count_to_assignments.rb +5 -0
- data/db/migrate/20180526141344_add_tips_rules_to_exercise.rb +5 -0
- data/lib/mumuki/laboratory/controllers/dynamic_errors.rb +1 -1
- data/lib/mumuki/laboratory/controllers/results_rendering.rb +7 -1
- data/lib/mumuki/laboratory/locales/en.yml +2 -0
- data/lib/mumuki/laboratory/locales/es.yml +2 -0
- data/lib/mumuki/laboratory/locales/narrator.en.yml +14 -0
- data/lib/mumuki/laboratory/locales/narrator.es.yml +14 -0
- data/lib/mumuki/laboratory/locales/narrator.pt.yml +14 -0
- data/lib/mumuki/laboratory/seed.rb +9 -29
- data/lib/mumuki/laboratory/status/base.rb +3 -1
- data/lib/mumuki/laboratory/status/failed.rb +0 -4
- data/lib/mumuki/laboratory/status/passed_with_warnings.rb +0 -4
- data/lib/mumuki/laboratory/status/unknown.rb +0 -4
- data/lib/mumuki/laboratory/version.rb +1 -1
- data/lib/mumuki/laboratory.rb +1 -0
- data/lib/tasks/users.rake +5 -4
- data/spec/dummy/db/schema.rb +3 -1
- data/spec/features/profile_flow_spec.rb +1 -1
- data/spec/features/progressive_tips_spec.rb +48 -0
- data/spec/helpers/application_helper_spec.rb +3 -5
- data/spec/helpers/email_helper_spec.rb +0 -2
- data/spec/helpers/with_navigation_spec.rb +0 -2
- data/spec/mailers/user_mailer_spec.rb +104 -10
- data/spec/models/event_generation_spec.rb +3 -0
- data/spec/models/exercise_spec.rb +0 -2
- data/spec/models/guide_import_spec.rb +7 -0
- data/spec/models/organization_spec.rb +0 -1
- data/spec/models/playground_spec.rb +0 -2
- data/spec/models/user_spec.rb +8 -0
- data/spec/spec_helper.rb +2 -0
- metadata +29 -4
@@ -72,7 +72,7 @@ feature 'Standard Flow', organization_workspace: :test do
|
|
72
72
|
|
73
73
|
context 'with organizations and messages' do
|
74
74
|
scenario 'visit organizations tab' do
|
75
|
-
user.make_student_of! organization
|
75
|
+
user.make_student_of! organization.slug
|
76
76
|
user.save!
|
77
77
|
visit "/user#organizations"
|
78
78
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
feature 'Progressive Tips', organization_workspace: :test do
|
4
|
+
let(:user) { create(:user) }
|
5
|
+
|
6
|
+
let(:haskell) { create(:haskell) }
|
7
|
+
|
8
|
+
let!(:problem) { build(:problem,
|
9
|
+
name: 'Succ1', description: 'Description of Succ1',
|
10
|
+
layout: :input_right, assistance_rules: [{when: :submission_failed, then: ['try this', 'try that']}] ) }
|
11
|
+
let(:assignment) { problem.find_or_init_assignment_for(user) }
|
12
|
+
|
13
|
+
let!(:chapter) {
|
14
|
+
create(:chapter, name: 'Functional Programming', lessons: [
|
15
|
+
create(:lesson, name: 'getting-started', description: 'An awesome guide', language: haskell, exercises: [problem])
|
16
|
+
]) }
|
17
|
+
|
18
|
+
before { reindex_current_organization! }
|
19
|
+
|
20
|
+
context 'visit failed exercise' do
|
21
|
+
before { set_current_user! user }
|
22
|
+
before { assignment.update! status: :failed }
|
23
|
+
|
24
|
+
scenario '2 failed submissions' do
|
25
|
+
assignment.update! attemps_count: 2
|
26
|
+
visit "/exercises/#{problem.slug}"
|
27
|
+
|
28
|
+
expect(page).to have_text('Try this')
|
29
|
+
expect(page).to_not have_text('Try that')
|
30
|
+
end
|
31
|
+
|
32
|
+
scenario '5 failed submissions' do
|
33
|
+
assignment.update! attemps_count: 5
|
34
|
+
visit "/exercises/#{problem.id}"
|
35
|
+
|
36
|
+
expect(page).to_not have_text('Try this')
|
37
|
+
expect(page).to have_text('Try that')
|
38
|
+
end
|
39
|
+
|
40
|
+
scenario '10 failed submissions' do
|
41
|
+
assignment.update! attemps_count: 10
|
42
|
+
visit "/exercises/#{problem.id}"
|
43
|
+
|
44
|
+
expect(page).to_not have_text('Try this')
|
45
|
+
expect(page).to have_text('Try that')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -4,8 +4,6 @@ describe ApplicationHelper, organization_workspace: :test do
|
|
4
4
|
helper ApplicationHelper
|
5
5
|
helper LinksHelper
|
6
6
|
|
7
|
-
before { I18n.locale = :en }
|
8
|
-
|
9
7
|
describe 'page_title' do
|
10
8
|
context 'in path' do
|
11
9
|
let(:exercise) { lesson.exercises.first }
|
@@ -16,9 +14,9 @@ describe ApplicationHelper, organization_workspace: :test do
|
|
16
14
|
|
17
15
|
before { reindex_current_organization! }
|
18
16
|
|
19
|
-
it { expect(page_title nil).to eq 'Mumuki - Improve your programming skills' }
|
20
|
-
it { expect(page_title Problem.new).to eq 'Mumuki - Improve your programming skills' }
|
21
|
-
it { expect(page_title exercise).to eq 'C1: A Guide - An Exercise - Mumuki' }
|
17
|
+
it { expect(page_title nil).to eq 'Mumuki - test - Improve your programming skills' }
|
18
|
+
it { expect(page_title Problem.new).to eq 'Mumuki - test - Improve your programming skills' }
|
19
|
+
it { expect(page_title exercise).to eq 'C1: A Guide - An Exercise - Mumuki - test' }
|
22
20
|
end
|
23
21
|
end
|
24
22
|
|
@@ -4,8 +4,6 @@ describe WithStudentPathNavigation, organization_workspace: :test do
|
|
4
4
|
helper WithStudentPathNavigation
|
5
5
|
helper FontAwesome::Rails::IconHelper
|
6
6
|
|
7
|
-
before { I18n.locale = :en }
|
8
|
-
|
9
7
|
describe '#next_button' do
|
10
8
|
context 'with problems' do
|
11
9
|
let(:lesson) { create(:lesson, name: 'my guide', exercises: [
|
@@ -1,16 +1,52 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
RSpec.describe UserMailer, type: :mailer do
|
4
|
+
let(:central) { create(:organization, name: 'central') }
|
5
|
+
|
6
|
+
describe '#remindable' do
|
7
|
+
context 'when user does not want to receive notifications' do
|
8
|
+
let(:user) { create :user,
|
9
|
+
accepts_reminders: false,
|
10
|
+
last_organization: central,
|
11
|
+
last_submission_date: nil }
|
12
|
+
it { expect(User.remindable).to_not include user }
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when user wants to receive notifications, and has never submitted' do
|
16
|
+
let(:user) { create :user,
|
17
|
+
accepts_reminders: true,
|
18
|
+
last_organization: central,
|
19
|
+
last_submission_date: nil }
|
20
|
+
it { expect(User.remindable).to include user }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when user wants to receive notifications, and has not sent submissions recently' do
|
24
|
+
let(:user) { create :user,
|
25
|
+
accepts_reminders: true,
|
26
|
+
last_organization: central,
|
27
|
+
last_submission_date: 30.days.ago }
|
28
|
+
it { expect(User.remindable).to include user }
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'when user wants to receive notifications, and has sent submissions recently' do
|
32
|
+
let(:user) { create :user,
|
33
|
+
accepts_reminders: true,
|
34
|
+
last_organization: central,
|
35
|
+
last_submission_date: 15.minutes.ago }
|
36
|
+
it { expect(User.remindable).to_not include user }
|
37
|
+
end
|
38
|
+
end
|
4
39
|
|
5
40
|
describe "we_miss_you_reminder" do
|
6
41
|
let(:reminder) { user.build_reminder }
|
7
|
-
let(:
|
8
|
-
|
42
|
+
let(:user) { build :user,
|
43
|
+
last_organization: central,
|
44
|
+
last_submission_date: days_since_last_submission.days.ago,
|
45
|
+
last_reminded_date: days_since_last_reminded.days.ago }
|
9
46
|
|
10
47
|
let(:days_since_last_submission) { 9 }
|
11
48
|
let(:days_since_last_reminded) { 8 }
|
12
49
|
|
13
|
-
|
14
50
|
it "renders the headers" do
|
15
51
|
expect(reminder.subject).to eq("We miss you!")
|
16
52
|
expect(reminder.to).to eq([user.email])
|
@@ -23,32 +59,32 @@ RSpec.describe UserMailer, type: :mailer do
|
|
23
59
|
context "last submission this week" do
|
24
60
|
let(:days_since_last_submission) { 3 }
|
25
61
|
|
26
|
-
it { expect(user.
|
62
|
+
it { expect(user.should_remind?).to be false }
|
27
63
|
end
|
28
64
|
|
29
65
|
context "last submission 1 week ago" do
|
30
|
-
it { expect(user.
|
66
|
+
it { expect(user.should_remind?).to be true }
|
31
67
|
it { expect(reminder.body.encoded).to include("Keep learning") }
|
32
68
|
end
|
33
69
|
|
34
70
|
context "last submission 2 weeks ago" do
|
35
71
|
let(:days_since_last_submission) { 16 }
|
36
72
|
|
37
|
-
it { expect(user.
|
73
|
+
it { expect(user.should_remind?).to be true }
|
38
74
|
it { expect(reminder.body.encoded).to include("Keep learning") }
|
39
75
|
end
|
40
76
|
|
41
77
|
context "last submission 3 weeks ago" do
|
42
78
|
let(:days_since_last_submission) { 26 }
|
43
79
|
|
44
|
-
it { expect(user.
|
80
|
+
it { expect(user.should_remind?).to be true }
|
45
81
|
it { expect(reminder.body.encoded).to include("Keep learning") }
|
46
82
|
end
|
47
83
|
|
48
84
|
context "last submission 4 weeks ago" do
|
49
85
|
let(:days_since_last_submission) { 30 }
|
50
86
|
|
51
|
-
it { expect(user.
|
87
|
+
it { expect(user.should_remind?).to be false }
|
52
88
|
end
|
53
89
|
end
|
54
90
|
|
@@ -58,12 +94,70 @@ RSpec.describe UserMailer, type: :mailer do
|
|
58
94
|
context "last submission this week" do
|
59
95
|
let(:days_since_last_submission) { 3 }
|
60
96
|
|
61
|
-
it { expect(user.
|
97
|
+
it { expect(user.should_remind?).to be false }
|
62
98
|
end
|
63
99
|
|
64
100
|
context "last submission 1 week ago" do
|
65
|
-
it { expect(user.
|
101
|
+
it { expect(user.should_remind?).to be false }
|
66
102
|
end
|
67
103
|
end
|
68
104
|
end
|
105
|
+
|
106
|
+
describe "no_submissions_reminder" do
|
107
|
+
let(:reminder) { user.build_reminder }
|
108
|
+
let(:user) { build :user, last_organization: central,
|
109
|
+
last_submission_date: nil,
|
110
|
+
last_reminded_date: days_since_last_reminded.days.ago,
|
111
|
+
created_at: days_since_user_creation.days.ago }
|
112
|
+
|
113
|
+
let(:days_since_last_reminded) { 8 }
|
114
|
+
let(:days_since_user_creation) { 8 }
|
115
|
+
|
116
|
+
it "renders the headers" do
|
117
|
+
expect(reminder.subject).to eq("Start using Mumuki!")
|
118
|
+
expect(reminder.to).to eq([user.email])
|
119
|
+
expect(reminder.from).to eq(["support@mumuki.org"])
|
120
|
+
end
|
121
|
+
|
122
|
+
context 'last reminded over 1 week ago' do
|
123
|
+
let(:days_since_last_reminded) { 8 }
|
124
|
+
|
125
|
+
context "registered this week" do
|
126
|
+
let(:days_since_user_creation) { 3 }
|
127
|
+
|
128
|
+
it { expect(user.should_remind?).to be false }
|
129
|
+
end
|
130
|
+
|
131
|
+
context "registered 1 week ago" do
|
132
|
+
it { expect(user.should_remind?).to be true }
|
133
|
+
it { expect(reminder.body.encoded).to include("you've never submitted solutions") }
|
134
|
+
end
|
135
|
+
|
136
|
+
context "last submission 2 weeks ago" do
|
137
|
+
let(:days_since_user_creation) { 16 }
|
138
|
+
|
139
|
+
it { expect(user.should_remind?).to be true }
|
140
|
+
it { expect(reminder.body.encoded).to include("you've never submitted solutions") }
|
141
|
+
end
|
142
|
+
|
143
|
+
context "last submission 3 weeks ago" do
|
144
|
+
let(:days_since_user_creation) { 26 }
|
145
|
+
|
146
|
+
it { expect(user.should_remind?).to be true }
|
147
|
+
it { expect(reminder.body.encoded).to include("you've never submitted solutions") }
|
148
|
+
end
|
149
|
+
|
150
|
+
context "last submission 4 weeks ago" do
|
151
|
+
let(:days_since_user_creation) { 30 }
|
152
|
+
|
153
|
+
it { expect(user.should_remind?).to be false }
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
context 'last reminded this week' do
|
158
|
+
let(:days_since_last_reminded) { 2 }
|
159
|
+
|
160
|
+
it { expect(user.should_remind?).to be false }
|
161
|
+
end
|
162
|
+
end
|
69
163
|
end
|
@@ -39,6 +39,7 @@ describe '#as_platform_json', organization_workspace: :test do
|
|
39
39
|
feedback: nil,
|
40
40
|
test_results: nil,
|
41
41
|
submissions_count: 2,
|
42
|
+
attemps_count: 0,
|
42
43
|
manual_evaluation_comment: nil,
|
43
44
|
exercise: {
|
44
45
|
eid: exercise.bibliotheca_id,
|
@@ -97,6 +98,7 @@ describe '#as_platform_json', organization_workspace: :test do
|
|
97
98
|
feedback: nil,
|
98
99
|
test_results: nil,
|
99
100
|
submissions_count: 2,
|
101
|
+
attemps_count: 0,
|
100
102
|
manual_evaluation_comment: nil,
|
101
103
|
exercise: {
|
102
104
|
name: exercise.name,
|
@@ -151,6 +153,7 @@ describe '#as_platform_json', organization_workspace: :test do
|
|
151
153
|
feedback: nil,
|
152
154
|
test_results: nil,
|
153
155
|
submissions_count: 2,
|
156
|
+
attemps_count: 0,
|
154
157
|
manual_evaluation_comment: nil,
|
155
158
|
exercise: {
|
156
159
|
eid: exercise.bibliotheca_id,
|
@@ -4,8 +4,6 @@ describe Exercise, organization_workspace: :test do
|
|
4
4
|
let(:exercise) { create(:exercise) }
|
5
5
|
let(:user) { create(:user) }
|
6
6
|
|
7
|
-
before { I18n.locale = :en }
|
8
|
-
|
9
7
|
describe '#slug' do
|
10
8
|
let(:guide) { create(:guide, slug: 'foo/bar') }
|
11
9
|
let(:exercise) { create(:exercise, guide: guide, bibliotheca_id: 4) }
|
@@ -25,6 +25,10 @@ describe Guide do
|
|
25
25
|
teacher_info: 'an info',
|
26
26
|
language: 'gobstones',
|
27
27
|
solution: 'foo',
|
28
|
+
assistance_rules: [
|
29
|
+
{when: :content_empty, then: 'remember to copy the code in the editor!'},
|
30
|
+
{when: :submission_errored, then: 'remember to copy code exactly as presented'},
|
31
|
+
],
|
28
32
|
id: 1},
|
29
33
|
|
30
34
|
{type: 'playground',
|
@@ -138,6 +142,9 @@ describe Guide do
|
|
138
142
|
it { expect(guide.exercises.count).to eq 5 }
|
139
143
|
it { expect(guide.exercises.first.language).to eq gobstones }
|
140
144
|
it { expect(guide.exercises.first.extra_visible).to be false }
|
145
|
+
it { expect(guide.exercises.first.assistance_rules).to be_present }
|
146
|
+
it { expect(guide.exercises.first.assistant.rules.count).to eq 2 }
|
147
|
+
|
141
148
|
it { expect(guide.exercises.second.language).to eq haskell }
|
142
149
|
it { expect(guide.exercises.second.default_content).to eq 'a default content' }
|
143
150
|
it { expect(guide.exercises.second.extra_visible).to be true }
|
@@ -81,7 +81,6 @@ describe Organization, organization_workspace: :test do
|
|
81
81
|
let(:fresh_organization) { create(:organization, name: 'foo') }
|
82
82
|
it { expect(fresh_organization.login_settings.login_methods).to eq Mumukit::Login::Settings.default_methods }
|
83
83
|
it { expect(fresh_organization.login_settings.social_login_methods).to eq [] }
|
84
|
-
it { expect(fresh_organization.login_settings.to_lock_json('/foo')).to be_html_safe }
|
85
84
|
end
|
86
85
|
|
87
86
|
describe 'validations' do
|
data/spec/models/user_spec.rb
CHANGED
@@ -252,4 +252,12 @@ describe User, organization_workspace: :test do
|
|
252
252
|
student.resubmit! Organization.current.name
|
253
253
|
end
|
254
254
|
end
|
255
|
+
|
256
|
+
describe '#accept_invitation!' do
|
257
|
+
let(:student) { create :user }
|
258
|
+
let(:invitation) { create :invitation, course: 'some_orga/some_course' }
|
259
|
+
before { student.accept_invitation! invitation }
|
260
|
+
it { expect(student.student? invitation.course).to be true }
|
261
|
+
it { expect(student.student? 'foo/bar').to be false }
|
262
|
+
end
|
255
263
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -28,6 +28,8 @@ require_relative './capybara_helper'
|
|
28
28
|
require_relative './evaluation_helper'
|
29
29
|
|
30
30
|
RSpec.configure do |config|
|
31
|
+
config.before(:each) { I18n.locale = :en }
|
32
|
+
|
31
33
|
config.before(:each) do
|
32
34
|
if RSpec.current_example.metadata[:organization_workspace] == :test
|
33
35
|
set_subdomain_host! 'test'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mumuki-laboratory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Franco Bulgarelli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '2.0'
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '2.0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: mumukit-login
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,6 +150,20 @@ dependencies:
|
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0.3'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: mumukit-assistant
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0.1'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0.1'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: rack
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -319,6 +333,7 @@ files:
|
|
319
333
|
- app/models/book.rb
|
320
334
|
- app/models/chapter.rb
|
321
335
|
- app/models/complement.rb
|
336
|
+
- app/models/concerns/assistable.rb
|
322
337
|
- app/models/concerns/friendly_name.rb
|
323
338
|
- app/models/concerns/guide_container.rb
|
324
339
|
- app/models/concerns/navigation/parent_navigation.rb
|
@@ -389,6 +404,7 @@ files:
|
|
389
404
|
- app/views/errors/not_found.html.erb
|
390
405
|
- app/views/errors/unauthorized.html.erb
|
391
406
|
- app/views/exams/show.html.erb
|
407
|
+
- app/views/exercise_solutions/_expectations.html.erb
|
392
408
|
- app/views/exercise_solutions/_kids_results.html.erb
|
393
409
|
- app/views/exercise_solutions/_kids_results_button.html.erb
|
394
410
|
- app/views/exercise_solutions/_results.html.erb
|
@@ -444,6 +460,8 @@ files:
|
|
444
460
|
- app/views/user_mailer/2nd_reminder.text.erb
|
445
461
|
- app/views/user_mailer/3rd_reminder.html.erb
|
446
462
|
- app/views/user_mailer/3rd_reminder.text.erb
|
463
|
+
- app/views/user_mailer/no_submissions_reminder.html.erb
|
464
|
+
- app/views/user_mailer/no_submissions_reminder.text.erb
|
447
465
|
- app/views/users/_users_form.html.erb
|
448
466
|
- app/views/users/show.html.erb
|
449
467
|
- config/i18n-tasks.yml
|
@@ -679,10 +697,12 @@ files:
|
|
679
697
|
- db/migrate/20180129142749_add_api_client.rb
|
680
698
|
- db/migrate/20180130194923_add_last_reminded_date_to_users.rb
|
681
699
|
- db/migrate/20180130204935_add_course.rb
|
700
|
+
- db/migrate/20180307150148_add_failed_submissions_count_to_assignments.rb
|
682
701
|
- db/migrate/20180323125804_remove_user_name.rb
|
683
702
|
- db/migrate/20180323140943_remove_unused_omniauth_fields.rb
|
684
703
|
- db/migrate/20180326224511_remove_book_ids.rb
|
685
704
|
- db/migrate/20180402015405_remove_course_uid.rb
|
705
|
+
- db/migrate/20180526141344_add_tips_rules_to_exercise.rb
|
686
706
|
- db/seeds/users.rb
|
687
707
|
- lib/events.rb
|
688
708
|
- lib/mumuki/laboratory.rb
|
@@ -711,6 +731,9 @@ files:
|
|
711
731
|
- lib/mumuki/laboratory/locales/datetime.es.yml
|
712
732
|
- lib/mumuki/laboratory/locales/en.yml
|
713
733
|
- lib/mumuki/laboratory/locales/es.yml
|
734
|
+
- lib/mumuki/laboratory/locales/narrator.en.yml
|
735
|
+
- lib/mumuki/laboratory/locales/narrator.es.yml
|
736
|
+
- lib/mumuki/laboratory/locales/narrator.pt.yml
|
714
737
|
- lib/mumuki/laboratory/locales/pt.yml
|
715
738
|
- lib/mumuki/laboratory/locales/views.es.yml
|
716
739
|
- lib/mumuki/laboratory/mumukit/auth.rb
|
@@ -830,6 +853,7 @@ files:
|
|
830
853
|
- spec/features/menu_bar_spec.rb
|
831
854
|
- spec/features/not_found_flow_spec.rb
|
832
855
|
- spec/features/profile_flow_spec.rb
|
856
|
+
- spec/features/progressive_tips_spec.rb
|
833
857
|
- spec/features/standard_flow_spec.rb
|
834
858
|
- spec/helpers/application_helper_spec.rb
|
835
859
|
- spec/helpers/email_helper_spec.rb
|
@@ -1010,6 +1034,7 @@ test_files:
|
|
1010
1034
|
- spec/features/menu_bar_spec.rb
|
1011
1035
|
- spec/features/not_found_flow_spec.rb
|
1012
1036
|
- spec/features/profile_flow_spec.rb
|
1037
|
+
- spec/features/progressive_tips_spec.rb
|
1013
1038
|
- spec/features/standard_flow_spec.rb
|
1014
1039
|
- spec/helpers/application_helper_spec.rb
|
1015
1040
|
- spec/helpers/email_helper_spec.rb
|