mumuki-laboratory 7.3.1 → 7.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2f2119060da9d8e6e5c83715a763f3f78d6433c7da2ed7de4f63ad0d36b9a85e
4
- data.tar.gz: 73a5e031b87d2aeafd20bb9bf38d679badf56ea6bac35415c6397219841873b1
3
+ metadata.gz: 7c23a0042d4601c10b7b61f3196cb7e227fe0ac33f9c7a48b70c57a8a12854cb
4
+ data.tar.gz: ee21361e7e928cdd3552e00c112ef2d4a38215b8e165f353e9ec701dfa1a22f9
5
5
  SHA512:
6
- metadata.gz: c81b960760d56143c6b393418eac611d08c45cc31f827998c53833ea852dfbef23f082b138c203475cefedb4bf74e67f7d0f0079e1588606730416159ab5a038
7
- data.tar.gz: 6dd3f6673aed2e5d4119171e5f361727bc4a6518fe409ea6d49db8dba53ace606f0578dbde35e9d85396dc5095eee7749cf38c5132a593fd77b13be94b52a9d7
6
+ metadata.gz: df62506d35e812616ec5476b728d89d8128594503c04b9d152778be3aa4242f209cd20578a49ca85df231e7bc812b3530a555680b897034667f006bc56f53f60
7
+ data.tar.gz: b4c914f2ebaa83f9d685b0e87262e8f1588e154896cc0f18fa434c00edd3504324b63c10f8251f607990d3d9bf4d50b30d35d5f1459e7416b8d456b5a57ca3db
@@ -25,4 +25,7 @@
25
25
  .danger {
26
26
  background-color: $brand-danger;
27
27
  }
28
+ .info {
29
+ background-color: $brand-info;
30
+ }
28
31
  }
@@ -1,4 +1,6 @@
1
1
  module BreadcrumbsHelper
2
+ include DiscussionsHelper
3
+
2
4
  def breadcrumbs(e, extra=nil)
3
5
  breadcrumbs0(e.navigable_name, e, extra, 'last')
4
6
  end
@@ -28,6 +30,17 @@ module BreadcrumbsHelper
28
30
  breadcrumb_list_item link_to(e, link_path), clazz
29
31
  end
30
32
 
33
+ def breadcrumbs_for_discussion(discussion, e)
34
+ discussions_breadcrumb = breadcrumbs_for_linkable(e, link_to(t(:discussions), item_discussions_path(e)))
35
+ discussion_item = breadcrumb_list_item(breadcrumb_name_for(discussion), 'last')
36
+
37
+ discussions_breadcrumb + discussion_item
38
+ end
39
+
40
+ def breadcrumb_name_for(discussion)
41
+ discussion.friendly.truncate_words(4)
42
+ end
43
+
31
44
  private
32
45
 
33
46
  def breadcrumbs_for_linkable(e, extra=nil, last='')
@@ -18,7 +18,7 @@ module ContextualizationResultHelper
18
18
  def contextualization_status(contextualization)
19
19
  if contextualization.exercise.hidden?
20
20
  :hidden_done
21
- elsif contextualization.exercise.choices?
21
+ elsif contextualization.exercise.choice?
22
22
  contextualization.passed? ? :correct_answer : :wrong_answer
23
23
  else
24
24
  contextualization.submission_status
@@ -1,7 +1,6 @@
1
1
  module IconsHelper
2
- #FIXME refactor names
3
2
  def status_icon(status_like)
4
- fa_icon *icon_for_status(status_like.to_submission_status)
3
+ fa_icon *icon_for(status_like.to_submission_status)
5
4
  end
6
5
 
7
6
  def fixed_fa_icon(name, options={})
@@ -19,25 +18,37 @@ module IconsHelper
19
18
 
20
19
  private
21
20
 
22
- def status_fa_icon(status)
23
- fa_icon(*icon_for_status(status))
21
+ def contextualization_fa_icon(contextualization)
22
+ fa_icon(*icon_for(contextualization))
24
23
  end
25
24
 
26
25
  def exercise_status_fa_icon(exercise)
27
- status_fa_icon(exercise.status_for(current_user))
26
+ contextualization_fa_icon(exercise.assignment_for(current_user))
28
27
  end
29
28
 
30
29
  def discussion_status_fa_icon(discussion)
31
- status_fa_icon(discussion.status)
30
+ contextualization_fa_icon(discussion)
32
31
  end
33
32
 
34
- def icon_for_status(s)
35
- iconized = s.iconize
33
+ def icon_for(iconizable)
34
+ iconized = iconizable.iconize
36
35
  [iconized[:type], class: "text-#{iconized[:class]} status-icon"]
37
36
  end
38
37
 
39
- def label_for_status(s)
40
- iconized = s.iconize
38
+ def class_for_exercise(exercise)
39
+ icon_class_for(exercise.assignment_for(current_user))
40
+ end
41
+
42
+ def icon_class_for(iconizable)
43
+ iconizable.iconize[:class].to_s
44
+ end
45
+
46
+ def icon_type_for(iconizable)
47
+ iconizable.iconize[:type].to_s
48
+ end
49
+
50
+ def label_for_contextualization(contextualization)
51
+ iconized = contextualization.iconize
41
52
  %Q{
42
53
  <span class="text-#{iconized[:class]} status-label">
43
54
  #{fa_icon "#{iconized[:type]}"}
@@ -1,5 +1,5 @@
1
1
  module ProgressBarHelper
2
- include StatusHelper
2
+ include IconsHelper
3
3
 
4
4
  def class_for_progress_list_item(exercise, active)
5
5
  "progress-list-item text-center #{class_for_exercise(exercise)} #{active ? 'active' : ''}"
@@ -1,6 +1,5 @@
1
1
  <%= content_for :breadcrumbs do %>
2
- <%= breadcrumbs_for_linkable @debatable, link_to(t(:discussions), item_discussions_path(@debatable))%>
3
- <%= breadcrumb_list_item('last', @discussion.friendly.truncate_words(4)) %>
2
+ <%= breadcrumbs_for_discussion @discussion, @debatable %>
4
3
  <% end %>
5
4
 
6
5
  <div>
@@ -1,5 +1,5 @@
1
- <% if contextualization.results_visible? %>
2
- <div>
1
+ <div>
2
+ <% unless contextualization.results_body_hidden? %>
3
3
  <%= render partial: 'exercise_solutions/expectations', locals: {assignment: contextualization} %>
4
4
  <% if render_feedback?(contextualization) %>
5
5
  <div class="results-item">
@@ -15,7 +15,5 @@
15
15
  <div id="results-section" class="<%= 'collapse' if render_feedback?(contextualization) %> results-item">
16
16
  <%= render_test_results contextualization %>
17
17
  </div>
18
- </div>
19
- <% else %>
20
- <div></div>
21
- <% end %>
18
+ <% end %>
19
+ </div>
@@ -1,4 +1,4 @@
1
- <div class="<%= "bs-callout bs-callout-#{class_for_status contextualization.submission_status}" %>">
1
+ <div class="<%= "bs-callout bs-callout-#{icon_class_for contextualization}" %>">
2
2
  <%= render partial: 'exercise_solutions/results_title', locals: {contextualization: contextualization} %>
3
3
  <%= yield %>
4
4
  </div>
@@ -3,7 +3,7 @@
3
3
  @stats = @guide.stats_for(current_user)
4
4
  %>
5
5
 
6
- <div class="<%= "mu-kids-callout-#{class_for_status assignment.submission_status}" %>">
6
+ <div class="<%= "mu-kids-callout-#{icon_class_for assignment}" %>">
7
7
  <%= manual_evaluation_comment assignment %>
8
8
  </div>
9
9
 
@@ -3,4 +3,3 @@
3
3
  <strong><%= t :out_of_attempts %></strong>
4
4
  </h4>
5
5
  </div>
6
- <%= render partial: 'exercise_solutions/results_button', locals: {assignment: assignment} %>
@@ -3,35 +3,42 @@
3
3
  @stats = @guide.stats_for(current_user)
4
4
  %>
5
5
 
6
- <%= render layout: 'exercise_solutions/contextualization_results_container', locals: {contextualization: assignment} do %>
7
- <%= manual_evaluation_comment assignment %>
8
- <% unless assignment.manual_evaluation_comment? %>
9
- <%= render partial: 'exercise_solutions/contextualization_results', locals: {contextualization: assignment} %>
10
- <% if should_render_need_help_dropdown?(assignment) %>
11
- <div class="notify-problem-box">
12
- <div class="dropdown">
13
- <%= link_to fa_icon(:'question-circle', text: t(:need_help)), "", {'data-toggle': 'dropdown'} %>
14
- <ul class="dropdown-menu" aria-labelledby="helpDropdown">
15
- <li>
16
- <%= read_discussions_link(@exercise) %>
17
- </li>
18
- <li>
19
- <%= render_community_link %>
20
- </li>
21
- <li>
22
- <%= report_bug_link(assignment) %>
23
- </li>
24
- </ul>
6
+ <% if assignment.results_hidden? %>
7
+ <%= render partial: 'exercise_solutions/results_hidden', locals: {assignment: assignment} %>
8
+ <% elsif !assignment.attempts_left? %>
9
+ <%= render partial: 'exercise_solutions/out_of_attempts', locals: {assignment: assignment} %>
10
+ <% else %>
11
+ <%= render layout: 'exercise_solutions/contextualization_results_container', locals: {contextualization: assignment} do %>
12
+ <%= manual_evaluation_comment assignment %>
13
+ <% unless assignment.manual_evaluation_comment? %>
14
+ <%= render partial: 'exercise_solutions/contextualization_results_body', locals: {contextualization: assignment} %>
15
+ <% if should_render_need_help_dropdown?(assignment) %>
16
+ <div class="notify-problem-box">
17
+ <div class="dropdown">
18
+ <%= link_to fa_icon(:'question-circle', text: t(:need_help)), "", {'data-toggle': 'dropdown'} %>
19
+ <ul class="dropdown-menu" aria-labelledby="helpDropdown">
20
+ <li>
21
+ <%= read_discussions_link(@exercise) %>
22
+ </li>
23
+ <li>
24
+ <%= render_community_link %>
25
+ </li>
26
+ <li>
27
+ <%= report_bug_link(assignment) %>
28
+ </li>
29
+ </ul>
30
+ </div>
25
31
  </div>
26
- </div>
32
+ <% end %>
27
33
  <% end %>
34
+ <%= solution_download_link assignment %>
28
35
  <% end %>
29
- <%= solution_download_link assignment %>
30
- <% end %>
31
36
 
32
- <% if assignment.passed? %>
33
- <%= corollary_box @exercise %>
34
- <% else %>
35
- <%= assistance_box assignment %>
37
+ <% if assignment.passed? %>
38
+ <%= corollary_box @exercise %>
39
+ <% else %>
40
+ <%= assistance_box assignment %>
41
+ <% end %>
36
42
  <% end %>
43
+
37
44
  <%= render partial: 'exercise_solutions/results_button', locals: {assignment: assignment} %>
@@ -0,0 +1,5 @@
1
+ <div class="bs-callout bs-callout-info submission-result-pending">
2
+ <h4>
3
+ <strong><%= t :results_hidden %></strong>
4
+ </h4>
5
+ </div>
@@ -1,3 +1,3 @@
1
- <h4 class="text-<%= class_for_status(contextualization.submission_status) %>">
2
- <strong><%= fa_icon icon_type_for_status(contextualization.submission_status) %> <%= t_contextualization_status contextualization %></strong>
1
+ <h4 class="text-<%= icon_class_for(contextualization) %>">
2
+ <strong><%= fa_icon icon_type_for(contextualization) %> <%= t_contextualization_status contextualization %></strong>
3
3
  </h4>
@@ -67,7 +67,7 @@
67
67
  <%= render layout: 'exercise_solutions/contextualization_results_container', locals: {contextualization: @discussion } do %>
68
68
  <div class="row">
69
69
  <div class="col-md-12 submission-results">
70
- <%= render partial: 'exercise_solutions/contextualization_results',
70
+ <%= render partial: 'exercise_solutions/contextualization_results_body',
71
71
  locals: {contextualization: @discussion, guide_finished_by_solution: false} %>
72
72
  </div>
73
73
  </div>
@@ -4,7 +4,7 @@
4
4
  <i class="timer timer-text text-center"><%= t :time_left %></i>
5
5
  <i id="timer" class="timer timer-text text-center"></i>
6
6
  <script>
7
- mumuki.startTimer('<%= end_time %>');
7
+ mumuki.startTimer('<%= end_time&.iso8601 %>');
8
8
  </script>
9
9
  </div>
10
10
  </div>
@@ -36,7 +36,6 @@ module Mumuki::Laboratory::Controllers::ResultsRendering
36
36
  end
37
37
 
38
38
  def render_results_html(results_partial, assignment)
39
- results_partial = 'out_of_attempts' unless assignment.attempts_left?
40
39
  render_to_string partial: results_partial,
41
40
  locals: {assignment: assignment}
42
41
  end
@@ -17,6 +17,7 @@ en:
17
17
  ask_the_first_question: Be the first one to ask!
18
18
  attempts_left:
19
19
  zero: "You've run out of attempts "
20
+ one: "1 attempt remaining"
20
21
  other: '%{count} attempts remaining'
21
22
  author: Author
22
23
  authoring: "Authoring"
@@ -181,6 +182,7 @@ en:
181
182
  reset_query: Clear current search filters
182
183
  restart: Restart
183
184
  results: Results
185
+ results_hidden: Your solution was submitted successfully!
184
186
  retry_exercise: Retry
185
187
  running: running
186
188
  save: Save
@@ -199,6 +199,7 @@ es:
199
199
  refresh_or_wait: Si no se muestra automáticamente en unos segundos, presioná F5
200
200
  reset_query: Borrar los filtros de búsqueda actuales
201
201
  restart: Reiniciar
202
+ results_hidden: ¡Tu solución fue enviada con éxito!
202
203
  results: Resultados
203
204
  retry_exercise: Reintentar
204
205
  running: procesando
@@ -18,7 +18,8 @@ pt:
18
18
  ask_the_first_question: Faça a primeira pergunta!
19
19
  attempts_left:
20
20
  zero: 'Você ficou sem tentativas'
21
- other: '%{count} tentativa restante'
21
+ one: '1 tentativa restante'
22
+ other: '%{count} tentativas restantes'
22
23
  author: Autor
23
24
  authoring: Autores
24
25
  authoring_note_html: 'Este guia foi desenvolvido por %{authors} nos termos do <a href = "https://creativecommons.org/licenses/by-sa/4.0/" target="_blank"> Creative Commons License Share-Equal, 4.0 </a>.'
@@ -192,6 +193,7 @@ pt:
192
193
  reset_query: Limpar filtros de pesquisa atuais
193
194
  restart: Reiniciar
194
195
  results: Resultados
196
+ results_hidden: Sua solução foi enviada com sucesso!
195
197
  retry_exercise: Tentar novamente
196
198
  running: processamento
197
199
  save: Salvar
@@ -1,5 +1,5 @@
1
1
  module Mumuki
2
2
  module Laboratory
3
- VERSION = '7.3.1'
3
+ VERSION = '7.4.0'
4
4
  end
5
5
  end
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 20200213175736) do
13
+ ActiveRecord::Schema.define(version: 20200312181842) do
14
14
 
15
15
  # These are extensions that must be enabled in order to support this database
16
16
  enable_extension "plpgsql"
@@ -137,6 +137,7 @@ ActiveRecord::Schema.define(version: 20200213175736) do
137
137
  t.integer "duration"
138
138
  t.integer "max_problem_submissions"
139
139
  t.integer "max_choice_submissions"
140
+ t.boolean "results_hidden_for_choices", default: false
140
141
  t.index ["classroom_id"], name: "index_exams_on_classroom_id", unique: true
141
142
  t.index ["guide_id"], name: "index_exams_on_guide_id"
142
143
  t.index ["organization_id"], name: "index_exams_on_organization_id"
@@ -7,11 +7,22 @@ feature 'Exams Flow', organization_workspace: :test do
7
7
 
8
8
  let(:other_organization) { create(:organization, name: 'baz') }
9
9
 
10
- let(:exam_with_no_submission_limits) { create(:exam, organization_id: Organization.find_by_name('test').id, guide_id: guide.id) }
10
+ let(:test_organization) { Organization.locate! 'test' }
11
+ let(:exam_with_no_submission_limits) { create(:exam, organization: test_organization, guide: guide) }
12
+
13
+ let(:capped_exam) { create(:exam, organization: test_organization, guide: problems_guide, max_choice_submissions: 2, max_problem_submissions: 5) }
14
+
11
15
  let(:guide) { create(:guide, exercises: [exercise])}
12
16
  let(:exercise) { create(:exercise, name: 'Exam Exercise') }
13
17
 
14
- before { exam_with_no_submission_limits.index_usage! Organization.find_by_name('test') }
18
+ let(:problems_guide) { create(:guide, exercises: [choice_problem, code_problem])}
19
+
20
+ let(:choice_problem) { create(:problem, name: 'Exam Choice Problem', editor: :multiple_choice,
21
+ choices: [{ value: "A", checked: true }, { value: "B", checked: false }]) }
22
+
23
+ let(:code_problem) { create(:problem, name: 'Exam Code Problem') }
24
+
25
+ before { exam_with_no_submission_limits.index_usage! test_organization }
15
26
 
16
27
  before { reindex_current_organization! }
17
28
 
@@ -44,22 +55,82 @@ feature 'Exams Flow', organization_workspace: :test do
44
55
  expect(page).to have_text('You have no permissions for this content.')
45
56
  end
46
57
 
47
- scenario 'visit exam in path, when there is no more time' do
48
- user = create(:user)
49
- set_current_user! user
50
- exam.authorize!(user)
51
- expect_any_instance_of(Exam).to receive(:enabled_for?).and_return(false)
52
- visit "/exams/#{exam.classroom_id}"
58
+ context 'visit authorized exam for user' do
59
+ let(:user) { create(:user) }
60
+ let(:current_exam) { exam }
53
61
 
54
- expect(page).to have_text('This content is no longer available.')
55
- end
62
+ before do
63
+ current_exam.authorize! user
64
+ set_current_user! user
65
+ end
66
+
67
+ scenario 'in path, when there is no more time' do
68
+ expect_any_instance_of(Exam).to receive(:enabled_for?).and_return(false)
69
+ visit "/exams/#{current_exam.classroom_id}"
70
+
71
+ expect(page).to have_text('This content is no longer available.')
72
+ end
56
73
 
57
- scenario 'visit exercise for exam with no submission limits' do
58
- user = create(:user)
59
- set_current_user! user
60
- exam_with_no_submission_limits.authorize!(user)
61
- visit "/exercises/#{exercise.id}"
74
+ feature 'with no submission limits' do
75
+ let(:current_exam) { exam_with_no_submission_limits }
76
+
77
+ scenario 'in a particular exercise' do
78
+ visit "/exercises/#{exercise.id}"
79
+
80
+ expect(page).to have_text('Exam Exercise')
81
+ end
82
+ end
62
83
 
63
- expect(page).to have_text('Exam Exercise')
84
+ feature 'with submission limits' do
85
+ let(:current_exam) { capped_exam }
86
+
87
+ feature 'when user has no remaining attempts' do
88
+ feature 'for code problem' do
89
+ before { 5.times { code_problem.submit_solution!(user, content: 'foo') } }
90
+
91
+ scenario do
92
+ visit "/exercises/#{code_problem.id}"
93
+
94
+ expect(page).to have_text('Exam Code Problem')
95
+ expect(page).to have_text('out of attempts')
96
+ end
97
+ end
98
+
99
+ feature 'for choice problem' do
100
+ before { 2.times { choice_problem.submit_solution!(user, content: 'foo') } }
101
+
102
+ scenario do
103
+ visit "/exercises/#{choice_problem.id}"
104
+
105
+ expect(page).to have_text('Exam Choice Problem')
106
+ expect(page).to have_text('out of attempts')
107
+ end
108
+ end
109
+ end
110
+
111
+ feature 'when user has remaining attempts' do
112
+ feature 'for code problem' do
113
+ before { 2.times { code_problem.submit_solution!(user, content: 'foo') } }
114
+
115
+ scenario do
116
+ visit "/exercises/#{code_problem.id}"
117
+
118
+ expect(page).to have_text('Exam Code Problem')
119
+ expect(page).to have_text('3 attempts remaining')
120
+ end
121
+ end
122
+
123
+ feature 'for choice problem' do
124
+ before { 1.times { choice_problem.submit_solution!(user, content: 'foo') } }
125
+
126
+ scenario do
127
+ visit "/exercises/#{choice_problem.id}"
128
+
129
+ expect(page).to have_text('Exam Choice Problem')
130
+ expect(page).to have_text('1 attempt remaining')
131
+ end
132
+ end
133
+ end
134
+ end
64
135
  end
65
136
  end
@@ -12,7 +12,7 @@ feature 'Exercise Flow', organization_workspace: :test do
12
12
  let!(:problem_4) { build(:problem, name: 'Succ4', description: 'Description of Succ4', layout: :input_bottom, extra: 'x = 2') }
13
13
  let!(:problem_5) { build(:problem, name: 'Succ5', description: 'Description of Succ5', layout: :input_right, editor: :upload, hint: 'lele', language: gobstones) }
14
14
  let!(:problem_6) { build(:problem, name: 'Succ6', description: 'Description of Succ6', layout: :input_right, editor: :hidden, language: haskell) }
15
- let!(:problem_7) { build(:problem, name: 'Succ7', description: 'Description of Succ7', choices: [{value: 'some choice', checked: true}]) }
15
+ let!(:problem_7) { build(:problem, name: 'Succ7', description: 'Description of Succ7', editor: :single_choice, choices: [{value: 'some choice', checked: true}]) }
16
16
  let!(:playground_1) { build(:playground, name: 'Succ5', description: 'Description of Succ4', layout: :input_right) }
17
17
  let!(:playground_2) { build(:playground, name: 'Succ6', description: 'Description of Succ4', layout: :input_right, extra: 'x = 4') }
18
18
  let!(:reading) { build(:reading, name: 'Reading about Succ', description: 'Lets understand succ history') }
@@ -71,6 +71,32 @@ describe BreadcrumbsHelper, organization_workspace: :test do
71
71
  end
72
72
  end
73
73
 
74
+ context 'discussion' do
75
+ let!(:chapter) { create(:chapter, name: 'my chapter', lessons: [lesson]) }
76
+ let(:lesson) { create(:lesson, name: 'my lesson', exercises: [exercise]) }
77
+ let(:exercise) { create(:exercise, name: 'my exercise') }
78
+
79
+ let(:discussion) { create(:discussion, item: debatable) }
80
+ let(:breadcrumb) { breadcrumbs_for_discussion(discussion, debatable) }
81
+
82
+ before { reindex_current_organization! }
83
+
84
+ context 'in exercise' do
85
+ let(:debatable) { exercise }
86
+
87
+ it 'breadcrumb goes mumuki / test organization / chapter / lesson / exercise / discussions / discussion' do
88
+ expect(breadcrumb).to include('da da-mumuki')
89
+ expect(breadcrumb).to include('test')
90
+ expect(breadcrumb).to include('my chapter')
91
+ expect(breadcrumb).to include('my lesson')
92
+ expect(breadcrumb).to include('my exercise')
93
+ expect(breadcrumb).to include('discussions')
94
+ expect(breadcrumb).to include(discussion.title)
95
+ expect(breadcrumb).to be_html_safe
96
+ end
97
+ end
98
+ end
99
+
74
100
  context 'book' do
75
101
  let(:breadcrumb) { header_breadcrumbs(link_for_organization: false) }
76
102
 
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.3.1
4
+ version: 7.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: 2020-04-01 00:00:00.000000000 Z
11
+ date: 2020-04-02 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.3.0
33
+ version: 7.4.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.3.0
40
+ version: 7.4.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mumukit-login
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -454,7 +454,6 @@ files:
454
454
  - app/helpers/progress_helper.rb
455
455
  - app/helpers/reset_button_helper.rb
456
456
  - app/helpers/runner_assets_helper.rb
457
- - app/helpers/status_helper.rb
458
457
  - app/helpers/version_helper.rb
459
458
  - app/mailers/application_mailer.rb
460
459
  - app/mailers/user_mailer.rb
@@ -475,7 +474,7 @@ files:
475
474
  - app/views/errors/not_found.html.erb
476
475
  - app/views/errors/unauthorized.html.erb
477
476
  - app/views/exams/show.html.erb
478
- - app/views/exercise_solutions/_contextualization_results.html.erb
477
+ - app/views/exercise_solutions/_contextualization_results_body.html.erb
479
478
  - app/views/exercise_solutions/_contextualization_results_container.html.erb
480
479
  - app/views/exercise_solutions/_expectations.html.erb
481
480
  - app/views/exercise_solutions/_kids_results.html.erb
@@ -483,6 +482,7 @@ files:
483
482
  - app/views/exercise_solutions/_out_of_attempts.html.erb
484
483
  - app/views/exercise_solutions/_results.html.erb
485
484
  - app/views/exercise_solutions/_results_button.html.erb
485
+ - app/views/exercise_solutions/_results_hidden.html.erb
486
486
  - app/views/exercise_solutions/_results_title.html.erb
487
487
  - app/views/exercises/_exercise_assignment.html.erb
488
488
  - app/views/exercises/_read_only.html.erb
@@ -1,13 +0,0 @@
1
- module StatusHelper
2
- def class_for_status(s)
3
- s.to_submission_status.iconize[:class].to_s
4
- end
5
-
6
- def icon_type_for_status(s)
7
- s.to_submission_status.iconize[:type].to_s
8
- end
9
-
10
- def class_for_exercise(exercise)
11
- class_for_status(exercise.status_for(current_user))
12
- end
13
- end