mumuki-laboratory 7.10.5 → 7.12.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -7
  3. data/Rakefile +9 -2
  4. data/app/assets/javascripts/mumuki_laboratory/application/bridge.js +26 -5
  5. data/app/assets/javascripts/mumuki_laboratory/application/characters.js +3 -1
  6. data/app/assets/javascripts/mumuki_laboratory/application/gamification.js +163 -0
  7. data/app/assets/javascripts/mumuki_laboratory/application/kids.js +171 -333
  8. data/app/assets/javascripts/mumuki_laboratory/application/kindergarten.js +159 -0
  9. data/app/assets/javascripts/mumuki_laboratory/application/mu-modal-carrousel.js +63 -0
  10. data/app/assets/javascripts/mumuki_laboratory/application/number-counter.js +18 -0
  11. data/app/assets/javascripts/mumuki_laboratory/application/primary.js +258 -0
  12. data/app/assets/javascripts/mumuki_laboratory/application/profile.js +31 -16
  13. data/app/assets/javascripts/mumuki_laboratory/application/submission.js +1 -0
  14. data/app/assets/javascripts/mumuki_laboratory/application/submissions-store.js +19 -2
  15. data/app/assets/stylesheets/mumuki_laboratory/application/_errors.scss +1 -3
  16. data/app/assets/stylesheets/mumuki_laboratory/application/_modules.scss +3 -1
  17. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_avatar.scss +21 -0
  18. data/app/assets/stylesheets/mumuki_laboratory/application/modules/{_chapter_show.scss → _content_show.scss} +0 -0
  19. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kids_results.scss +117 -0
  20. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_kindergarten.scss +335 -12
  21. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_medal.scss +48 -0
  22. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_terms.scss +44 -0
  23. data/app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss +40 -3
  24. data/app/controllers/application_controller.rb +15 -8
  25. data/app/controllers/book_discussions_controller.rb +4 -0
  26. data/app/controllers/users_controller.rb +8 -2
  27. data/app/helpers/avatar_helper.rb +11 -3
  28. data/app/helpers/contextualization_result_helper.rb +9 -1
  29. data/app/helpers/gamification_helper.rb +5 -0
  30. data/app/helpers/kindergarten_helper.rb +5 -0
  31. data/app/helpers/links_helper.rb +8 -0
  32. data/app/helpers/medal_helper.rb +36 -0
  33. data/app/helpers/open_graph_helper.rb +2 -2
  34. data/app/helpers/organization_list_helper.rb +1 -1
  35. data/app/helpers/overlapped_buttons_helper.rb +1 -1
  36. data/app/helpers/page_title_helper.rb +2 -2
  37. data/app/helpers/profile_helper.rb +9 -1
  38. data/app/views/book/_header.html.erb +17 -0
  39. data/app/views/book/show.html.erb +1 -18
  40. data/app/views/discussions/terms.html.erb +10 -0
  41. data/app/views/exercise_solutions/_contextualization_results_container.html.erb +9 -0
  42. data/app/views/exercise_solutions/_kids_level_up.html.erb +11 -0
  43. data/app/views/exercise_solutions/_kids_results.html.erb +1 -1
  44. data/app/views/exercise_solutions/_results_title.html.erb +5 -0
  45. data/app/views/exercises/show.html.erb +4 -0
  46. data/app/views/invitations/_invitation_form.html.erb +1 -0
  47. data/app/views/layouts/_discussions.html.erb +4 -0
  48. data/app/views/layouts/_error.html.erb +3 -6
  49. data/app/views/layouts/_guide.html.erb +10 -3
  50. data/app/views/layouts/_kindergarten.html.erb +38 -0
  51. data/app/views/layouts/_main.html.erb +3 -1
  52. data/app/views/layouts/_organization_chooser.html.erb +0 -7
  53. data/app/views/layouts/_terms_acceptance_disclaimer.html.erb +6 -0
  54. data/app/views/layouts/application.html.erb +10 -3
  55. data/app/views/layouts/exercise_inputs/layouts/_input_kindergarten.html.erb +27 -27
  56. data/app/views/layouts/modals/_guide_corollary.html.erb +10 -1
  57. data/app/views/layouts/modals/_kids_context.html.erb +1 -1
  58. data/app/views/layouts/modals/_kids_results.html.erb +16 -6
  59. data/app/views/layouts/modals/_kindergarten_context.html.erb +30 -0
  60. data/app/views/layouts/modals/_kindergarten_results.html.erb +36 -0
  61. data/app/views/layouts/modals/_kindergarten_results_aborted.html.erb +27 -0
  62. data/app/views/layouts/modals/_level_up.html.erb +27 -0
  63. data/app/views/users/_avatar_list.html.erb +6 -2
  64. data/app/views/users/_edit_user_form.html.erb +9 -4
  65. data/app/views/users/_term.html.erb +10 -0
  66. data/app/views/users/_user_form.html.erb +17 -3
  67. data/app/views/users/terms.html.erb +18 -0
  68. data/config/routes.rb +2 -0
  69. data/lib/mumuki/laboratory.rb +1 -1
  70. data/lib/mumuki/laboratory/controllers/current_organization.rb +1 -1
  71. data/lib/mumuki/laboratory/controllers/results_rendering.rb +4 -2
  72. data/lib/mumuki/laboratory/locales/en.yml +21 -5
  73. data/lib/mumuki/laboratory/locales/es-CL.yml +10 -4
  74. data/lib/mumuki/laboratory/locales/es.yml +22 -6
  75. data/lib/mumuki/laboratory/locales/pt.yml +21 -5
  76. data/lib/mumuki/laboratory/version.rb +1 -1
  77. data/spec/capybara_helper.rb +99 -0
  78. data/spec/controllers/exercise_solutions_controller_spec.rb +3 -4
  79. data/spec/dummy/db/schema.rb +37 -1
  80. data/spec/dummy/public/medal/outline.svg +1089 -0
  81. data/spec/features/choose_organization_spec.rb +12 -30
  82. data/spec/features/disable_user_flow_spec.rb +3 -5
  83. data/spec/features/disabled_organization_flow_spec.rb +9 -14
  84. data/spec/features/exercise_flow_spec.rb +2 -2
  85. data/spec/features/guide_reset_spec.rb +1 -1
  86. data/spec/features/guides_flow_spec.rb +1 -1
  87. data/spec/features/home_private_flow_spec.rb +1 -3
  88. data/spec/features/home_public_flow_spec.rb +6 -12
  89. data/spec/features/invitations_flow_spec.rb +2 -2
  90. data/spec/features/login_flow_spec.rb +2 -2
  91. data/spec/features/not_found_private_flow_spec.rb +4 -4
  92. data/spec/features/not_found_public_flow_spec.rb +1 -6
  93. data/spec/features/profile_flow_spec.rb +1 -1
  94. data/spec/helpers/page_title_helper_spec.rb +3 -3
  95. data/spec/javascripts/editors-spec.js +23 -0
  96. data/spec/javascripts/gamification-spec.js +58 -0
  97. data/spec/javascripts/submissions-store-spec.js +139 -6
  98. data/spec/spec_helper.rb +2 -0
  99. data/spec/teaspoon_env.rb +24 -6
  100. metadata +137 -98
@@ -12,33 +12,166 @@ describe("SubmissionsStore", () => {
12
12
  describe('getLastSubmission', () => {
13
13
  it("answers null if submission not present", () => {
14
14
  expect(mumuki.SubmissionsStore.getLastSubmissionAndResult(1)).toBe(null)
15
- })
15
+ });
16
16
 
17
17
  it("answers the last submission result if already sent", () => {
18
18
  mumuki.SubmissionsStore.setSubmissionResultFor(1, passedEmptyProgramSubmissionAndResult)
19
19
  expect(mumuki.SubmissionsStore.getLastSubmissionAndResult(1)).toEqual(passedEmptyProgramSubmissionAndResult)
20
- })
21
- })
20
+ });
21
+ });
22
22
 
23
23
  describe('getLastSubmissionStatus', () => {
24
24
  it("answers pending if submission not present", () => {
25
25
  expect(mumuki.SubmissionsStore.getLastSubmissionStatus(1)).toBe('pending')
26
- })
26
+ });
27
27
 
28
28
  it("answers the last submission status if previously sent", () => {
29
29
  mumuki.SubmissionsStore.setSubmissionResultFor(1, passedEmptyProgramSubmissionAndResult)
30
30
  expect(mumuki.SubmissionsStore.getLastSubmissionStatus(1)).toBe('passed')
31
- })
31
+ });
32
32
  });
33
33
 
34
34
  describe('getCachedResultFor', () => {
35
35
  it("answers null if submission not present", () => {
36
36
  expect(mumuki.SubmissionsStore.getSubmissionResultFor(1, emptyProgramSubmission)).toBe(null)
37
- })
37
+ });
38
38
 
39
39
  it("answers the last submission if previously sent", () => {
40
40
  mumuki.SubmissionsStore.setSubmissionResultFor(1, passedEmptyProgramSubmissionAndResult)
41
41
  expect(mumuki.SubmissionsStore.getSubmissionResultFor(1, emptyProgramSubmission)).toEqual(passedSubmissionResult)
42
+ });
43
+ });
44
+
45
+ describe('submissionSolutionContent', () => {
46
+ it("works with programatic solutions", () => {
47
+ expect(mumuki.SubmissionsStore.submissionSolutionContent({solution: {content: 'foo'}})).toEqual('foo');
48
+ });
49
+
50
+ it("works with classic solutions", () => {
51
+ expect(mumuki.SubmissionsStore.submissionSolutionContent({'solution[content]': 'foo'})).toEqual('foo');
52
+ });
53
+
54
+ it("works with multifile solutions", () => {
55
+ expect(mumuki.SubmissionsStore.submissionSolutionContent({
56
+ 'solution[content[index.html]]': 'html foo',
57
+ 'solution[content[index.css]]': 'css foo'
58
+ })).toEqual('[["solution[content[index.html]]","html foo"],["solution[content[index.css]]","css foo"]]');
59
+ });
60
+ });
61
+
62
+ describe('submissionSolutionEquals', () => {
63
+ describe('programatic submissions', () => {
64
+ it("answers true when they are equal", () => {
65
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
66
+ {solution: {content: 'foo'}},
67
+ {solution: {content: 'foo'}})).toBe(true);
68
+ });
69
+
70
+ it("answers true when they are equal but empty", () => {
71
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
72
+ {solution: {content: ''}},
73
+ {solution: {content: ''}})).toBe(true);
74
+ });
75
+
76
+ it("answers true when they are equal and there are other spurious keys", () => {
77
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
78
+ {solution: {content: 'foo'}, utf8: "✓"},
79
+ {solution: {content: 'foo'}})).toBe(true);
80
+ });
81
+
82
+ it("answers false when they are not equal", () => {
83
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
84
+ {solution: {content: 'foo'}},
85
+ {solution: {content: 'bar'}})).toBe(false);
86
+ });
87
+
88
+ it("answers false when they are not equal but one of them is empty", () => {
89
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
90
+ {solution: {content: ''}},
91
+ {solution: {content: 'bar'}})).toBe(false);
92
+ });
93
+ })
94
+
95
+ describe('classic submissons', () => {
96
+ it("answers true when they are equal", () => {
97
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
98
+ {'solution[content]': 'foo'},
99
+ {'solution[content]': 'foo'})).toBe(true);
100
+ });
101
+
102
+ it("answers true when they are equal but empty", () => {
103
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
104
+ {'solution[content]': ''},
105
+ {'solution[content]': ''})).toBe(true);
106
+ });
107
+
108
+ it("answers true when they are equal with other spurious keys", () => {
109
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
110
+ {'solution[content]': 'foo'},
111
+ {'solution[content]': 'foo', utf8: "✓"})).toBe(true);
112
+ });
113
+
114
+ it("answers false when they are not equal", () => {
115
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
116
+ {'solution[content]': 'foo'},
117
+ {'solution[content]': 'bar'})).toBe(false);
118
+ });
119
+
120
+ it("answers false when they are not equal but one of them is empty", () => {
121
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
122
+ {'solution[content]': ''},
123
+ {'solution[content]': 'bar'})).toBe(false);
124
+ });
125
+ })
126
+
127
+ describe('multifile submissions', () => {
128
+ it("answers true when they are equal", () => {
129
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
130
+ {
131
+ 'solution[content[index.html]]': 'html foo',
132
+ 'solution[content[index.css]]': 'css foo'
133
+ },
134
+ {
135
+ 'solution[content[index.html]]': 'html foo',
136
+ 'solution[content[index.css]]': 'css foo'
137
+ })).toBe(true);
138
+ });
139
+
140
+ it("answers true when they are equal with spurious keys", () => {
141
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
142
+ {
143
+ 'multifile-locales': '{"insert_file_name":"Ingresa un nombre de archivo"}',
144
+ 'solution[content[index.html]]': 'html foo',
145
+ 'solution[content[index.css]]': 'css foo'
146
+ },
147
+ {
148
+ 'solution[content[index.html]]': 'html foo',
149
+ 'solution[content[index.css]]': 'css foo'
150
+ })).toBe(true);
151
+ });
152
+
153
+ it("answers false when they are not equal", () => {
154
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
155
+ {
156
+ 'solution[content[index.html]]': 'html foo',
157
+ 'solution[content[index.css]]': 'css foo'
158
+ },
159
+ {
160
+ 'solution[content[index.html]]': 'html foo',
161
+ 'solution[content[index.css]]': 'css bar'
162
+ })).toBe(false);
163
+ });
164
+
165
+ it("answers false when they are not equal and with different keys", () => {
166
+ expect(mumuki.SubmissionsStore.submissionSolutionEquals(
167
+ {
168
+ 'solution[content[index.html]]': 'html foo',
169
+ 'solution[content[index.css]]': 'css foo'
170
+ },
171
+ {
172
+ 'solution[content[index.html]]': 'html foo'
173
+ })).toBe(false);
174
+ });
42
175
  })
43
176
  });
44
177
  })
@@ -6,6 +6,7 @@ require 'rspec/rails'
6
6
  require 'codeclimate-test-reporter'
7
7
  require 'mumukit/core/rspec'
8
8
  require 'factory_bot_rails'
9
+ require 'webdrivers'
9
10
 
10
11
  require 'mumuki/domain/factories'
11
12
 
@@ -41,6 +42,7 @@ RSpec.configure do |config|
41
42
  set_subdomain_host! 'test'
42
43
  create(:public_organization,
43
44
  name: 'test',
45
+ immersible: true,
44
46
  book: create(:book, name: 'test', slug: 'mumuki/mumuki-the-book')).switch!
45
47
  elsif RSpec.current_example.metadata[:organization_workspace] == :base
46
48
  set_subdomain_host! 'base'
@@ -1,3 +1,6 @@
1
+ require 'selenium-webdriver'
2
+ require 'webdrivers'
3
+
1
4
  unless defined?(Rails)
2
5
  ENV["RAILS_ROOT"] = File.expand_path("../dummy", __FILE__)
3
6
  require File.expand_path("../dummy/config/environment", __FILE__)
@@ -108,12 +111,27 @@ Teaspoon.configure do |config|
108
111
  # Capybara Webkit: https://github.com/modeset/teaspoon/wiki/Using-Capybara-Webkit
109
112
  # config.driver = :capybara_webkit
110
113
  config.driver = :selenium
111
- config.driver_options = {
112
- client_driver: :firefox,
113
- selenium_options: {
114
- options: Selenium::WebDriver::Firefox::Options.new(log_level: :warn)
115
- }
116
- }
114
+ config.driver_options =
115
+ case ENV['MUMUKI_SELENIUM_DRIVER']
116
+ when 'chrome'
117
+ {
118
+ client_driver: :chrome,
119
+ selenium_options: {
120
+ options: Selenium::WebDriver::Chrome::Options.new(args: ['headless', 'disable-gpu'])
121
+ }
122
+ }
123
+ when 'safari'
124
+ {
125
+ client_driver: :safari,
126
+ }
127
+ else
128
+ {
129
+ client_driver: :firefox,
130
+ selenium_options: {
131
+ options: Selenium::WebDriver::Firefox::Options.new(log_level: :warn, args: ['-headless'])
132
+ }
133
+ }
134
+ end
117
135
 
118
136
  # Specify the timeout for the driver. Specs are expected to complete within this time frame or the run will be
119
137
  # considered a failure. This is to avoid issues that can arise where tests stall.
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: 7.10.5
4
+ version: 7.12.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Bulgarelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-13 00:00:00.000000000 Z
11
+ date: 2020-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 7.10.0
33
+ version: 7.12.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 7.10.0
40
+ version: 7.12.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mumukit-bridge
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 1.21.3
117
+ version: '1.23'
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: 1.21.3
124
+ version: '1.23'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: muvment
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -318,6 +318,20 @@ dependencies:
318
318
  - - "~>"
319
319
  - !ruby/object:Gem::Version
320
320
  version: '2.0'
321
+ - !ruby/object:Gem::Dependency
322
+ name: webdrivers
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - "~>"
326
+ - !ruby/object:Gem::Version
327
+ version: '4.4'
328
+ type: :development
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - "~>"
333
+ - !ruby/object:Gem::Version
334
+ version: '4.4'
321
335
  description: Where students practice and receive automated and human feedback.
322
336
  email:
323
337
  - franco@mumuki.org
@@ -349,17 +363,22 @@ files:
349
363
  - app/assets/javascripts/mumuki_laboratory/application/events.js
350
364
  - app/assets/javascripts/mumuki_laboratory/application/exercise.js
351
365
  - app/assets/javascripts/mumuki_laboratory/application/free-form.js
366
+ - app/assets/javascripts/mumuki_laboratory/application/gamification.js
352
367
  - app/assets/javascripts/mumuki_laboratory/application/inputs.js
353
368
  - app/assets/javascripts/mumuki_laboratory/application/interval.js
354
369
  - app/assets/javascripts/mumuki_laboratory/application/kids.js
370
+ - app/assets/javascripts/mumuki_laboratory/application/kindergarten.js
355
371
  - app/assets/javascripts/mumuki_laboratory/application/load-analytics.js
356
372
  - app/assets/javascripts/mumuki_laboratory/application/load-error-svg.js
357
373
  - app/assets/javascripts/mumuki_laboratory/application/messages.js
374
+ - app/assets/javascripts/mumuki_laboratory/application/mu-modal-carrousel.js
358
375
  - app/assets/javascripts/mumuki_laboratory/application/multiple-choice.js
359
376
  - app/assets/javascripts/mumuki_laboratory/application/multiple-files.js
360
377
  - app/assets/javascripts/mumuki_laboratory/application/multiple-scenarios.js
378
+ - app/assets/javascripts/mumuki_laboratory/application/number-counter.js
361
379
  - app/assets/javascripts/mumuki_laboratory/application/pin.js
362
380
  - app/assets/javascripts/mumuki_laboratory/application/popover.js
381
+ - app/assets/javascripts/mumuki_laboratory/application/primary.js
363
382
  - app/assets/javascripts/mumuki_laboratory/application/profile.js
364
383
  - app/assets/javascripts/mumuki_laboratory/application/progress.js
365
384
  - app/assets/javascripts/mumuki_laboratory/application/results-renderer.js
@@ -386,9 +405,9 @@ files:
386
405
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_avatar.scss
387
406
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_book_header.scss
388
407
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_breadcrumb.scss
389
- - app/assets/stylesheets/mumuki_laboratory/application/modules/_chapter_show.scss
390
408
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_checkboxes.scss
391
409
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_console.scss
410
+ - app/assets/stylesheets/mumuki_laboratory/application/modules/_content_show.scss
392
411
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_datepicker.scss
393
412
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_discussion.scss
394
413
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_dropdown.scss
@@ -402,12 +421,14 @@ files:
402
421
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_kids.scss
403
422
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_kids_results.scss
404
423
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_kindergarten.scss
424
+ - app/assets/stylesheets/mumuki_laboratory/application/modules/_medal.scss
405
425
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_modal.scss
406
426
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_organization_chooser.scss
407
427
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_overlap.scss
408
428
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_popover.scss
409
429
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_progress_bar.scss
410
430
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_progress_listing.scss
431
+ - app/assets/stylesheets/mumuki_laboratory/application/modules/_terms.scss
411
432
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_timer.scss
412
433
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_upload.scss
413
434
  - app/assets/stylesheets/mumuki_laboratory/application/modules/_user_profile.scss
@@ -469,9 +490,12 @@ files:
469
490
  - app/helpers/editor_tabs_helper.rb
470
491
  - app/helpers/email_helper.rb
471
492
  - app/helpers/exercise_input_helper.rb
493
+ - app/helpers/gamification_helper.rb
472
494
  - app/helpers/globals_helper.rb
473
495
  - app/helpers/icons_helper.rb
496
+ - app/helpers/kindergarten_helper.rb
474
497
  - app/helpers/links_helper.rb
498
+ - app/helpers/medal_helper.rb
475
499
  - app/helpers/menu_bar_helper.rb
476
500
  - app/helpers/messages_helper.rb
477
501
  - app/helpers/multiple_file_editor_helper.rb
@@ -487,6 +511,7 @@ files:
487
511
  - app/mailers/application_mailer.rb
488
512
  - app/mailers/user_mailer.rb
489
513
  - app/views/appendixes/show.html.erb
514
+ - app/views/book/_header.html.erb
490
515
  - app/views/book/show.html.erb
491
516
  - app/views/book_discussions/index.html.erb
492
517
  - app/views/chapters/show.html.erb
@@ -498,6 +523,7 @@ files:
498
523
  - app/views/discussions/index.html.erb
499
524
  - app/views/discussions/new.html.erb
500
525
  - app/views/discussions/show.html.erb
526
+ - app/views/discussions/terms.html.erb
501
527
  - app/views/errors/forbidden.html.erb
502
528
  - app/views/errors/gone.html.erb
503
529
  - app/views/errors/internal_server_error.html.erb
@@ -507,6 +533,7 @@ files:
507
533
  - app/views/exercise_solutions/_contextualization_results_body.html.erb
508
534
  - app/views/exercise_solutions/_contextualization_results_container.html.erb
509
535
  - app/views/exercise_solutions/_expectations.html.erb
536
+ - app/views/exercise_solutions/_kids_level_up.html.erb
510
537
  - app/views/exercise_solutions/_kids_results.html.erb
511
538
  - app/views/exercise_solutions/_kids_results_button.html.erb
512
539
  - app/views/exercise_solutions/_out_of_attempts.html.erb
@@ -526,6 +553,7 @@ files:
526
553
  - app/views/layouts/_exercise_skipped.html.erb
527
554
  - app/views/layouts/_guide.html.erb
528
555
  - app/views/layouts/_kids.html.erb
556
+ - app/views/layouts/_kindergarten.html.erb
529
557
  - app/views/layouts/_main.html.erb
530
558
  - app/views/layouts/_messages.html.erb
531
559
  - app/views/layouts/_mixed_results.erb
@@ -539,6 +567,7 @@ files:
539
567
  - app/views/layouts/_social_media.html.erb
540
568
  - app/views/layouts/_submission_result_error.html.erb
541
569
  - app/views/layouts/_submission_result_error_body.html.erb
570
+ - app/views/layouts/_terms_acceptance_disclaimer.html.erb
542
571
  - app/views/layouts/_test_results.html.erb
543
572
  - app/views/layouts/_timer.html.erb
544
573
  - app/views/layouts/application.html.erb
@@ -576,6 +605,10 @@ files:
576
605
  - app/views/layouts/modals/_kids_context.html.erb
577
606
  - app/views/layouts/modals/_kids_results.html.erb
578
607
  - app/views/layouts/modals/_kids_results_aborted.html.erb
608
+ - app/views/layouts/modals/_kindergarten_context.html.erb
609
+ - app/views/layouts/modals/_kindergarten_results.html.erb
610
+ - app/views/layouts/modals/_kindergarten_results_aborted.html.erb
611
+ - app/views/layouts/modals/_level_up.html.erb
579
612
  - app/views/layouts/modals/_new_message.html.erb
580
613
  - app/views/lessons/show.html.erb
581
614
  - app/views/messages/errors.html.erb
@@ -590,9 +623,11 @@ files:
590
623
  - app/views/users/_avatar_list.html.erb
591
624
  - app/views/users/_edit_user_form.html.erb
592
625
  - app/views/users/_profile_fields.html.erb
626
+ - app/views/users/_term.html.erb
593
627
  - app/views/users/_user_form.html.erb
594
628
  - app/views/users/edit.html.erb
595
629
  - app/views/users/show.html.erb
630
+ - app/views/users/terms.html.erb
596
631
  - config/i18n-tasks.yml
597
632
  - config/initializers/form_builder.rb
598
633
  - config/initializers/omniauth.rb
@@ -694,6 +729,7 @@ files:
694
729
  - spec/dummy/public/error/timeout_1.svg
695
730
  - spec/dummy/public/error/timeout_2.svg
696
731
  - spec/dummy/public/error/timeout_3.svg
732
+ - spec/dummy/public/medal/outline.svg
697
733
  - spec/evaluation_helper.rb
698
734
  - spec/features/chapter_spec.rb
699
735
  - spec/features/choose_organization_spec.rb
@@ -737,6 +773,7 @@ files:
737
773
  - spec/javascripts/elipsis-spec.js
738
774
  - spec/javascripts/events-spec.js
739
775
  - spec/javascripts/exercise-spec.js
776
+ - spec/javascripts/gamification-spec.js
740
777
  - spec/javascripts/global-spec.js
741
778
  - spec/javascripts/results-renderers-spec.js
742
779
  - spec/javascripts/spec-helper.js
@@ -809,118 +846,120 @@ required_rubygems_version: !ruby/object:Gem::Requirement
809
846
  - !ruby/object:Gem::Version
810
847
  version: '0'
811
848
  requirements: []
812
- rubygems_version: 3.0.8
849
+ rubygems_version: 3.0.3
813
850
  signing_key:
814
851
  specification_version: 4
815
852
  summary: Code assement web application for the Mumuki Platform.
816
853
  test_files:
817
- - spec/mailers/previews/user_mailer_preview.rb
818
- - spec/mailers/user_mailer_spec.rb
854
+ - spec/controllers/guide_progress_controller_spec.rb
855
+ - spec/controllers/discussions_controller_spec.rb
856
+ - spec/controllers/organizations_api_controller_spec.rb
857
+ - spec/controllers/chapters_controller_spec.rb
858
+ - spec/controllers/invitations_controller_spec.rb
859
+ - spec/controllers/messages_controller_spec.rb
860
+ - spec/controllers/courses_api_controller_spec.rb
861
+ - spec/controllers/confirmations_controller_spec.rb
862
+ - spec/controllers/students_api_controller_spec.rb
863
+ - spec/controllers/api_clients_controller.rb
864
+ - spec/controllers/exercise_solutions_controller_spec.rb
865
+ - spec/controllers/discussions_messages_controller_spec.rb
866
+ - spec/controllers/users_api_controller_spec.rb
867
+ - spec/controllers/users_controller_spec.rb
819
868
  - spec/spec_helper.rb
820
- - spec/teaspoon_env.rb
821
- - spec/features/guide_reset_spec.rb
869
+ - spec/api_helper.rb
870
+ - spec/mailers/user_mailer_spec.rb
871
+ - spec/mailers/previews/user_mailer_preview.rb
872
+ - spec/javascripts/elipsis-spec.js
873
+ - spec/javascripts/csrf-token-spec.js
874
+ - spec/javascripts/global-spec.js
875
+ - spec/javascripts/events-spec.js
876
+ - spec/javascripts/gamification-spec.js
877
+ - spec/javascripts/sync-mode-spec.js
878
+ - spec/javascripts/exercise-spec.js
879
+ - spec/javascripts/timer-spec.js
880
+ - spec/javascripts/editors-spec.js
881
+ - spec/javascripts/spec-helper.js
882
+ - spec/javascripts/speech-bubble-renderer-spec.js
883
+ - spec/javascripts/submissions-store-spec.js
884
+ - spec/javascripts/results-renderers-spec.js
885
+ - spec/javascripts/bridge-spec.js
886
+ - spec/javascripts/timeout-spec.js
887
+ - spec/helpers/avatar_helper_spec.rb
888
+ - spec/helpers/with_navigation_spec.rb
889
+ - spec/helpers/exercise_input_helper_spec.rb
890
+ - spec/helpers/authors_helper_spec.rb
891
+ - spec/helpers/with_choices_spec.rb
892
+ - spec/helpers/application_helper_spec.rb
893
+ - spec/helpers/breadcrumbs_helper_spec.rb
894
+ - spec/helpers/email_helper_spec.rb
895
+ - spec/helpers/page_title_helper_spec.rb
896
+ - spec/helpers/test_results_rendering_spec.rb
897
+ - spec/helpers/icons_helper_spec.rb
822
898
  - spec/features/complements_flow_spec.rb
899
+ - spec/features/progressive_tips_spec.rb
900
+ - spec/features/runner_assets_spec.rb
901
+ - spec/features/disable_user_flow_spec.rb
902
+ - spec/features/links_flow_spec.rb
823
903
  - spec/features/not_found_public_flow_spec.rb
824
904
  - spec/features/standard_flow_spec.rb
825
- - spec/features/links_flow_spec.rb
826
- - spec/features/guides_flow_spec.rb
827
- - spec/features/profile_flow_spec.rb
828
- - spec/features/topic_flow_spec.rb
829
- - spec/features/chapter_spec.rb
905
+ - spec/features/exercise_flow_spec.rb
906
+ - spec/features/choose_organization_spec.rb
830
907
  - spec/features/disabled_organization_flow_spec.rb
831
- - spec/features/runner_assets_spec.rb
908
+ - spec/features/topic_flow_spec.rb
832
909
  - spec/features/home_private_flow_spec.rb
833
- - spec/features/lessons_flow_spec.rb
834
- - spec/features/dynamic_exam_spec.rb
835
- - spec/features/discussion_flow_spec.rb
836
- - spec/features/not_found_private_flow_spec.rb
837
- - spec/features/progressive_tips_spec.rb
838
- - spec/features/exams_flow_spec.rb
910
+ - spec/features/profile_flow_spec.rb
839
911
  - spec/features/home_public_flow_spec.rb
840
912
  - spec/features/menu_bar_spec.rb
841
- - spec/features/exercise_flow_spec.rb
842
- - spec/features/choose_organization_spec.rb
843
- - spec/features/login_flow_spec.rb
844
- - spec/features/disable_user_flow_spec.rb
913
+ - spec/features/not_found_private_flow_spec.rb
914
+ - spec/features/chapter_spec.rb
915
+ - spec/features/discussion_flow_spec.rb
845
916
  - spec/features/invitations_flow_spec.rb
846
- - spec/dummy/Rakefile
847
- - spec/dummy/bin/yarn
848
- - spec/dummy/bin/update
849
- - spec/dummy/bin/rake
850
- - spec/dummy/bin/bundle
851
- - spec/dummy/bin/rails
852
- - spec/dummy/bin/setup
917
+ - spec/features/exams_flow_spec.rb
918
+ - spec/features/guides_flow_spec.rb
919
+ - spec/features/dynamic_exam_spec.rb
920
+ - spec/features/lessons_flow_spec.rb
921
+ - spec/features/login_flow_spec.rb
922
+ - spec/features/guide_reset_spec.rb
923
+ - spec/evaluation_helper.rb
924
+ - spec/login_helper.rb
925
+ - spec/dummy/db/seeds.rb
926
+ - spec/dummy/db/schema.rb
853
927
  - spec/dummy/public/character/animations.json
928
+ - spec/dummy/public/error/500.svg
854
929
  - spec/dummy/public/error/timeout_2.svg
855
- - spec/dummy/public/error/timeout_3.svg
856
930
  - spec/dummy/public/error/401.svg
857
- - spec/dummy/public/error/500.svg
858
- - spec/dummy/public/error/404.svg
931
+ - spec/dummy/public/error/timeout_3.svg
859
932
  - spec/dummy/public/error/410.svg
860
- - spec/dummy/public/error/403.svg
933
+ - spec/dummy/public/error/404.svg
861
934
  - spec/dummy/public/error/timeout_1.svg
862
- - spec/dummy/config.ru
863
- - spec/dummy/db/schema.rb
864
- - spec/dummy/db/seeds.rb
935
+ - spec/dummy/public/error/403.svg
936
+ - spec/dummy/public/medal/outline.svg
937
+ - spec/dummy/package.json
938
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
939
+ - spec/dummy/config/initializers/wrap_parameters.rb
940
+ - spec/dummy/config/initializers/cookies_serializer.rb
941
+ - spec/dummy/config/initializers/assets.rb
942
+ - spec/dummy/config/database.yml
865
943
  - spec/dummy/config/routes.rb
866
- - spec/dummy/config/environment.rb
867
- - spec/dummy/config/spring.rb
868
944
  - spec/dummy/config/cable.yml
869
- - spec/dummy/config/secrets.yml
870
- - spec/dummy/config/application.rb
871
- - spec/dummy/config/rabbit.yml
945
+ - spec/dummy/config/spring.rb
872
946
  - spec/dummy/config/boot.rb
873
- - spec/dummy/config/environments/test.rb
947
+ - spec/dummy/config/puma.rb
874
948
  - spec/dummy/config/environments/development.rb
875
- - spec/dummy/config/locales/en.yml
949
+ - spec/dummy/config/environments/test.rb
876
950
  - spec/dummy/config/database.travis.yml
877
- - spec/dummy/config/puma.rb
878
- - spec/dummy/config/initializers/wrap_parameters.rb
879
- - spec/dummy/config/initializers/filter_parameter_logging.rb
880
- - spec/dummy/config/initializers/assets.rb
881
- - spec/dummy/config/initializers/cookies_serializer.rb
882
- - spec/dummy/config/database.yml
883
- - spec/dummy/package.json
884
- - spec/login_helper.rb
885
- - spec/helpers/with_choices_spec.rb
886
- - spec/helpers/email_helper_spec.rb
887
- - spec/helpers/authors_helper_spec.rb
888
- - spec/helpers/breadcrumbs_helper_spec.rb
889
- - spec/helpers/with_navigation_spec.rb
890
- - spec/helpers/exercise_input_helper_spec.rb
891
- - spec/helpers/avatar_helper_spec.rb
892
- - spec/helpers/test_results_rendering_spec.rb
893
- - spec/helpers/application_helper_spec.rb
894
- - spec/helpers/icons_helper_spec.rb
895
- - spec/helpers/page_title_helper_spec.rb
896
- - spec/api_helper.rb
951
+ - spec/dummy/config/rabbit.yml
952
+ - spec/dummy/config/secrets.yml
953
+ - spec/dummy/config/locales/en.yml
954
+ - spec/dummy/config/application.rb
955
+ - spec/dummy/config/environment.rb
956
+ - spec/dummy/Rakefile
957
+ - spec/dummy/bin/setup
958
+ - spec/dummy/bin/rake
959
+ - spec/dummy/bin/bundle
960
+ - spec/dummy/bin/update
961
+ - spec/dummy/bin/yarn
962
+ - spec/dummy/bin/rails
963
+ - spec/dummy/config.ru
964
+ - spec/teaspoon_env.rb
897
965
  - spec/capybara_helper.rb
898
- - spec/evaluation_helper.rb
899
- - spec/javascripts/bridge-spec.js
900
- - spec/javascripts/events-spec.js
901
- - spec/javascripts/exercise-spec.js
902
- - spec/javascripts/global-spec.js
903
- - spec/javascripts/speech-bubble-renderer-spec.js
904
- - spec/javascripts/timeout-spec.js
905
- - spec/javascripts/results-renderers-spec.js
906
- - spec/javascripts/csrf-token-spec.js
907
- - spec/javascripts/elipsis-spec.js
908
- - spec/javascripts/timer-spec.js
909
- - spec/javascripts/editors-spec.js
910
- - spec/javascripts/spec-helper.js
911
- - spec/javascripts/submissions-store-spec.js
912
- - spec/javascripts/sync-mode-spec.js
913
- - spec/controllers/discussions_controller_spec.rb
914
- - spec/controllers/chapters_controller_spec.rb
915
- - spec/controllers/students_api_controller_spec.rb
916
- - spec/controllers/courses_api_controller_spec.rb
917
- - spec/controllers/confirmations_controller_spec.rb
918
- - spec/controllers/api_clients_controller.rb
919
- - spec/controllers/invitations_controller_spec.rb
920
- - spec/controllers/users_api_controller_spec.rb
921
- - spec/controllers/users_controller_spec.rb
922
- - spec/controllers/discussions_messages_controller_spec.rb
923
- - spec/controllers/guide_progress_controller_spec.rb
924
- - spec/controllers/organizations_api_controller_spec.rb
925
- - spec/controllers/messages_controller_spec.rb
926
- - spec/controllers/exercise_solutions_controller_spec.rb