mumuki-laboratory 5.12.1 → 5.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba4ab23f5ccb5fc65d34543b5957980da3c636b2ac20555562699ea141eb9c6e
4
- data.tar.gz: 06e00713fe1a2072daef342207e67299d02921544589a5996547b43daceaade6
3
+ metadata.gz: fd4028c28b28b7924786fa0459d5406df47c9931e8d52772407960e68af4d3fe
4
+ data.tar.gz: d18dfab8db95844ce5dc18ac2c563d9e2f7de725ec946cc98081b72710395906
5
5
  SHA512:
6
- metadata.gz: bee79042cbc5aa3f93fada9b322fd41f335939cf404c8f6989a20f4fac9d78d37c0748da3345ee2d4a33727c5f9925bd8bcb29402210d00cf5618e33d8b98e83
7
- data.tar.gz: ba69eda434a00296ce5fff9b457da145fcc66802fe546bb9557ad3b7f734f7935a0e27efbae23a892a7969ea031cee9981f439493df83a1837412aa456ce10b2
6
+ metadata.gz: 150db78584cac26a99017f2bb417149d278a45bb86ed7151410047c6dd83fb5d4df93d3cec966ac332d8b52812f77a4a1c52b047eb3eeb3e915985d2798cd599
7
+ data.tar.gz: 5cba88c3a2ca3117c9885398a5d1f35617509f02d8e82b43532f1cb2450ae696cd9995d9c4609eb073c86178e4a3580ff55c901d3911d53606fb75c004fb35fd
@@ -5,7 +5,10 @@ mumuki.load(function () {
5
5
  $.ajax(token.newRequest({
6
6
  method: 'POST',
7
7
  url: $(this).data('confirmation-url'),
8
- xhrFields: {withCredentials: true}
8
+ xhrFields: {withCredentials: true},
9
+ success: function(data){
10
+ mumuki.updateProgressBarAndShowModal(data);
11
+ }
9
12
  }));
10
13
 
11
14
  return true;
@@ -1,8 +1,9 @@
1
1
  class ExerciseConfirmationsController < AjaxController
2
2
  include Mumuki::Laboratory::Controllers::NestedInExercise
3
+ include Mumuki::Laboratory::Controllers::ResultsRendering
3
4
 
4
5
  def create
5
- result = @exercise.submit_confirmation! current_user
6
- render json: result
6
+ @exercise.submit_confirmation! current_user
7
+ render json: progress_json
7
8
  end
8
9
  end
@@ -52,3 +52,7 @@ module ApplicationHelper
52
52
  }.html_safe
53
53
  end
54
54
  end
55
+
56
+ def sanitized(html)
57
+ Mumukit::ContentType::Sanitizer.sanitize html
58
+ end
@@ -21,7 +21,7 @@ module BreadcrumbsHelper
21
21
  end
22
22
 
23
23
  def breadcrumb_list_item(last, item)
24
- "<li #{breadcrumb_item_class(last)}>#{item}</li>".html_safe
24
+ "<li #{breadcrumb_item_class(last)}>#{h item}</li>".html_safe
25
25
  end
26
26
 
27
27
  private
@@ -1,7 +1,8 @@
1
1
  module WithStudentPathNavigation
2
2
  def next_button(navigable)
3
3
  return unless navigable
4
- ContinueNavigation.new(self).button(navigable) || RevisitNavigation.new(self).button(navigable)
4
+ ContinueNavigation.new(self).button(navigable) || RevisitNavigation.new(self).button(navigable) || FinishNavigation.new(self).button(navigable)
5
+ #TODO Refactor this
5
6
  end
6
7
 
7
8
  def next_lesson_button(guide)
@@ -0,0 +1,12 @@
1
+ module WithStudentPathNavigation
2
+ class FinishNavigation < Navigation
3
+ def button(navigable)
4
+ return unless navigable.is_a?(Reading) && !navigable.status_for(current_user).like?(:passed)
5
+ content_tag 'a', t(:finish), merge_confirmation_classes(navigable, class: clazz)
6
+ end
7
+
8
+ def clazz
9
+ 'btn btn-success btn-block'
10
+ end
11
+ end
12
+ end
@@ -1,6 +1,6 @@
1
1
  module ContextualizationResultHelper
2
2
  def humanized_expectation_result_item(expectation_result)
3
- %Q{<li>#{status_icon(expectation_result[:result])} #{expectation_result[:explanation]}</li>}.html_safe
3
+ %Q{<li>#{status_icon(expectation_result[:result])} #{sanitized expectation_result[:explanation]}</li>}.html_safe
4
4
  end
5
5
 
6
6
  def render_feedback?(contextualization)
@@ -22,6 +22,13 @@ class ApplicationRecord < ActiveRecord::Base
22
22
  end
23
23
  end
24
24
 
25
+ def self.serialize_symbolized_hash_array(*keys)
26
+ keys.each do |field|
27
+ serialize field
28
+ define_method(field) { self[field]&.map { |it| it.symbolize_keys } }
29
+ end
30
+ end
31
+
25
32
  def save(*)
26
33
  super
27
34
  rescue => e
@@ -19,10 +19,7 @@ module Contextualization
19
19
  serialize :submission_status, Mumuki::Laboratory::Status::Submission
20
20
  validates_presence_of :submission_status
21
21
 
22
- [:expectation_results, :test_results, :query_results].each do |field|
23
- serialize field
24
- define_method(field) { self[field]&.map { |it| it.symbolize_keys } }
25
- end
22
+ serialize_symbolized_hash_array :expectation_results, :test_results, :query_results
26
23
 
27
24
  composed_of :submission, mapping: submission_mapping, constructor: :from_attributes
28
25
 
@@ -61,7 +61,9 @@ module WithReminders
61
61
 
62
62
  module ClassMethods
63
63
  def remindable
64
- where('accepts_reminders and (last_submission_date < ? or last_submission_date is null)', reminder_frequency.days.ago)
64
+ where('accepts_reminders and email is not null
65
+ and last_organization_id is not null
66
+ and (last_submission_date < ? or last_submission_date is null)', reminder_frequency.days.ago)
65
67
  end
66
68
 
67
69
  # The frequency of reminders, expressed in days
@@ -21,7 +21,7 @@
21
21
  </div>
22
22
  <div class="discussion-message-bubble-content">
23
23
  <div class="discussion-message-content">
24
- <%= sanitize message.content_html %>
24
+ <%= message.content_html %>
25
25
  </div>
26
26
  </div>
27
27
  </div>
@@ -10,7 +10,7 @@
10
10
  <%= status_icon(test_result[:status]) %>
11
11
  <strong class="example-title"><%= test_result[:title] %></strong>
12
12
  <% unless contextualization.visible_success_output? %>
13
- <a data-toggle="collapse" href="#example-result-<%= index %>" class="example-see-more">Ver detalles</a>
13
+ <a data-toggle="collapse" href="#example-result-<%= index %>" class="example-see-more"><%= t :view_details %></a>
14
14
  <% end %>
15
15
  </span>
16
16
  <% else %>
@@ -0,0 +1,5 @@
1
+ class AddUniqueIndexToOrganizationsName < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_index :organizations, :name, unique: true
4
+ end
5
+ end
@@ -8,9 +8,7 @@ module Mumuki::Laboratory::Controllers::ResultsRendering
8
8
  end
9
9
 
10
10
  def render_results_json(assignment, results = {})
11
- render json: results.merge(
12
- guide_finished_by_solution: guide_finished_by_solution?,
13
- class_for_progress_list_item: class_for_progress_list_item(@exercise, true),
11
+ render json: results.merge(progress_json).merge(
14
12
  html: render_results_html(assignment),
15
13
  title_html: render_results_title_html(assignment),
16
14
  button_html: render_results_button_html(assignment),
@@ -18,6 +16,13 @@ module Mumuki::Laboratory::Controllers::ResultsRendering
18
16
  remaining_attempts_html: remaining_attempts_text(assignment))
19
17
  end
20
18
 
19
+ def progress_json
20
+ {
21
+ guide_finished_by_solution: guide_finished_by_solution?,
22
+ class_for_progress_list_item: class_for_progress_list_item(@exercise, true)
23
+ }
24
+ end
25
+
21
26
  def render_results_html(assignment)
22
27
  render_to_string partial: results_partial(assignment),
23
28
  locals: {assignment: assignment}
@@ -79,6 +79,7 @@ en:
79
79
  explain_redirect: You have registered in another organization
80
80
  failed: Oops, something went wrong
81
81
  feedback: Feedback
82
+ finish: Finish
82
83
  first_name: First Name
83
84
  forbidden_explanation: You are not allowed to see this content.
84
85
  go_to: 'Go to %{organization}'
@@ -228,6 +229,7 @@ en:
228
229
  user: User
229
230
  user_data_updated: Your data was updated successfuly
230
231
  username: Username
232
+ view_details: View details
231
233
  want_permissions: The next user requires permissions
232
234
  we_miss_you: We miss you!
233
235
  working: "Working"
@@ -87,6 +87,7 @@ es:
87
87
  explain_redirect: Notamos que te registraste en otra organización.
88
88
  failed: Tu solución no pasó las pruebas
89
89
  feedback: Problemas que encontramos
90
+ finish: Terminar
90
91
  first_name: Nombre
91
92
  forbidden_explanation: Es decir que no tenés autorización para ver este contenido. <br> ¿Puede que hayas ingresado con una cuenta incorrecta?
92
93
  go_to: 'Ir a %{organization}'
@@ -253,6 +254,7 @@ es:
253
254
  user_data_updated: Tus datos se actualizaron correctamente
254
255
  user: Usuario
255
256
  username: Nombre de usuario
257
+ view_details: Ver detalles
256
258
  want_permissions: El siguiente usuario requiere permisos
257
259
  we_miss_you: ¡Te extrañamos!
258
260
  will_paginate:
@@ -82,6 +82,7 @@ pt:
82
82
  explain_redirect: Percebemos que você se registrou em outra organização.
83
83
  failed: Sua solução não passou as provas
84
84
  feedback: Problemas que encontramos
85
+ finish: Terminar
85
86
  first_name: Nome
86
87
  forbidden_explanation: Isso significa que você não tem autorização para ver esse conteúdo. <br> Você poderia ter entrado com uma conta incorreta?
87
88
  fullscreen: Tela completa
@@ -236,6 +237,7 @@ pt:
236
237
  user: Usuário
237
238
  user_data_updated: Os seus dados foram atualizados corretamente
238
239
  username: Nome de usuário
240
+ view_details: Ver detalhes
239
241
  want_permissions: O próximo usuário requer permissões
240
242
  working: Processamento
241
243
  wrong_answer: A resposta não é correta
@@ -1,5 +1,5 @@
1
1
  module Mumuki
2
2
  module Laboratory
3
- VERSION = '5.12.1'
3
+ VERSION = '5.13.0'
4
4
  end
5
5
  end
@@ -15,6 +15,6 @@ describe ExerciseConfirmationsController, organization_workspace: :test do
15
15
  before { post :create, params: { exercise_id: reading.id } }
16
16
 
17
17
  it { expect(response.status).to eq 200 }
18
- it { expect(response.body.parse_json).to json_like(status: :passed, result: '') }
18
+ it { expect(response.body.parse_json).to json_like(guide_finished_by_solution: true, class_for_progress_list_item: 'progress-list-item text-center success active') }
19
19
  end
20
20
  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: 20181014233438) do
13
+ ActiveRecord::Schema.define(version: 20181101180652) do
14
14
 
15
15
  # These are extensions that must be enabled in order to support this database
16
16
  enable_extension "plpgsql"
@@ -250,6 +250,7 @@ ActiveRecord::Schema.define(version: 20181014233438) do
250
250
  t.text "theme", default: "{}", null: false
251
251
  t.text "profile", default: "{}", null: false
252
252
  t.index ["book_id"], name: "index_organizations_on_book_id"
253
+ t.index ["name"], name: "index_organizations_on_name", unique: true
253
254
  end
254
255
 
255
256
  create_table "paths", id: :serial, force: :cascade do |t|
@@ -4,7 +4,7 @@ describe BreadcrumbsHelper, organization_workspace: :test do
4
4
 
5
5
  helper BreadcrumbsHelper
6
6
  helper LinksHelper
7
-
7
+ helper ERB::Util
8
8
 
9
9
  context 'user' do
10
10
  let(:user) { create(:user) }
@@ -35,6 +35,24 @@ RSpec.describe UserMailer, type: :mailer do
35
35
  last_submission_date: 15.minutes.ago }
36
36
  it { expect(User.remindable).to_not include user }
37
37
  end
38
+
39
+ context 'when user does not have an email' do
40
+ let(:user) { create :user,
41
+ uid: 'user',
42
+ accepts_reminders: true,
43
+ last_organization: central,
44
+ email: nil,
45
+ last_submission_date: nil }
46
+ it { expect(User.remindable).to_not include user }
47
+ end
48
+
49
+ context 'when user does not have a last organization' do
50
+ let(:user) { create :user,
51
+ uid: 'user',
52
+ accepts_reminders: true,
53
+ last_submission_date: nil }
54
+ it { expect(User.remindable).to_not include user }
55
+ end
38
56
  end
39
57
 
40
58
  describe "we_miss_you_reminder" do
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.12.1
4
+ version: 5.13.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-10-25 00:00:00.000000000 Z
11
+ date: 2018-11-01 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: '1.3'
33
+ version: '1.4'
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: '1.3'
40
+ version: '1.4'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mumukit-auth
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -359,6 +359,7 @@ files:
359
359
  - app/helpers/choices_helper.rb
360
360
  - app/helpers/concerns/with_student_path_navigation.rb
361
361
  - app/helpers/concerns/with_student_path_navigation/continue_navigation.rb
362
+ - app/helpers/concerns/with_student_path_navigation/finish_navigation.rb
362
363
  - app/helpers/concerns/with_student_path_navigation/navigation.rb
363
364
  - app/helpers/concerns/with_student_path_navigation/revisit_navigation.rb
364
365
  - app/helpers/contextualization_result_helper.rb
@@ -803,6 +804,7 @@ files:
803
804
  - db/migrate/20180802190437_add_approved_to_messages.rb
804
805
  - db/migrate/20181004173216_add_free_form_editor_to_exercises.rb
805
806
  - db/migrate/20181014233438_remove_non_null_constraint_from_permissions.rb
807
+ - db/migrate/20181101180652_add_unique_index_to_organizations_name.rb
806
808
  - db/seeds/users.rb
807
809
  - lib/events.rb
808
810
  - lib/mumuki/laboratory.rb