From 110b0094807eb3177f026abdbe84db53a9ba114c Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Thu, 3 Dec 2020 16:23:22 +0100 Subject: [PATCH 1/3] Remove A/B test from Python20 course setup --- .../concerns/submission_scoring.rb | 8 ---- app/controllers/exercises_controller.rb | 5 --- lib/python20_course_week.rb | 44 ------------------- lib/user_group_separator.rb | 30 ------------- 4 files changed, 87 deletions(-) delete mode 100644 lib/python20_course_week.rb delete mode 100644 lib/user_group_separator.rb diff --git a/app/controllers/concerns/submission_scoring.rb b/app/controllers/concerns/submission_scoring.rb index 2b535e0d..279e7a05 100644 --- a/app/controllers/concerns/submission_scoring.rb +++ b/app/controllers/concerns/submission_scoring.rb @@ -92,13 +92,5 @@ module SubmissionScoring output.except!(:error_messages, :count, :failed, :filename, :message, :passed, :stderr, :stdout) end end - - # Return all test results except for those of a linter if not allowed - show_linter = Python20CourseWeek.show_linter? submission.exercise, submission.user_id - outputs&.reject do |output| - next if show_linter || output.blank? - - output[:file_role] == 'teacher_defined_linter' - end end end diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 44db28df..f4d3c9dd 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -298,11 +298,6 @@ class ExercisesController < ApplicationController else current_user.id end - - # Tips are collected and set with set_available_tips. - # Delete tips for those users who should not see them. - # Doing this here is beneficial because all other (admin) routes still work. - @tips = nil unless Python20CourseWeek.show_tips? @exercise, current_user.id end def set_course_token diff --git a/lib/python20_course_week.rb b/lib/python20_course_week.rb deleted file mode 100644 index 11afd4a1..00000000 --- a/lib/python20_course_week.rb +++ /dev/null @@ -1,44 +0,0 @@ -# frozen_string_literal: true - -class Python20CourseWeek - - def self.get_for(exercise) - case exercise.title - when /Python20 Aufgabe 1/ - 1 - when /Python20 Aufgabe 2/ - 2 - when /Python20 Aufgabe 3.1/ - nil # Explicitly enable everything (linter + tips if available)! - when /Python20 Aufgabe 3.2/ - 3 - when /Python20 Aufgabe 3.3/ - 3 - when /Python20 Aufgabe 3.4/ - 3 - when /Python20 Aufgabe 4/ - 4 - when /Python20 Snake/ - 4 - else - # Not part of the Python20 course - nil - end - end - - def self.show_tips?(exercise, user_id) - week = get_for(exercise) - return true if week.nil? # Exercise is not part of the experiment - - user_group = UserGroupSeparator.get_tips_group(user_id) - [1, 2].include?(week) && user_group == :show_tips - end - - def self.show_linter?(exercise, user_id) - week = get_for(exercise) - return true if week.nil? # Exercise is not part of the experiment - - user_group = UserGroupSeparator.get_linter_group(user_id) - [3].include?(week) && user_group == :show_linter - end -end diff --git a/lib/user_group_separator.rb b/lib/user_group_separator.rb deleted file mode 100644 index f1fef355..00000000 --- a/lib/user_group_separator.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true - -class UserGroupSeparator - - # Different user groups for Python20 course based on last digit of the user_id - # 0: show_tips && no_linter - # 1: no_tips && show_linter - # 2: show_tips && show_linter - # 3: no_tips && no_linter - - # separates user into 50% no tips, 50% with tips - def self.get_tips_group(user_id) - user_group = user_id % 4 # => 0, 1, 2, 3 - if [0, 2].include?(user_group) - :show_tips - else # [1, 3].include?(user_group) - :no_tips - end - end - - # separates user into 50% with linter, 50% without linter - def self.get_linter_group(user_id) - user_group = user_id % 4 # => 0, 1, 2, 3 - if [1, 2].include?(user_group) - :show_linter - else # [0, 3].include?(user_group) - :no_linter - end - end -end From 8ebe59b692fb9d0e62946e8019eed658b9a77cde Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Thu, 3 Dec 2020 16:25:04 +0100 Subject: [PATCH 2/3] Revert changes for Python20 fishbowl experiment * Show all RfCs again, even those with #loesung --- app/controllers/request_for_comments_controller.rb | 3 --- app/policies/request_for_comment_policy.rb | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/app/controllers/request_for_comments_controller.rb b/app/controllers/request_for_comments_controller.rb index 58dee88e..face8e2e 100644 --- a/app/controllers/request_for_comments_controller.rb +++ b/app/controllers/request_for_comments_controller.rb @@ -18,7 +18,6 @@ class RequestForCommentsController < ApplicationController .with_last_activity .ransack(params[:q]) @request_for_comments = @search.result - .where("question NOT LIKE '%#loesung%'") .joins(:exercise) .where(exercises: {unpublished: false}) .includes(submission: [:study_group]) @@ -99,8 +98,6 @@ class RequestForCommentsController < ApplicationController @request_for_comment = RequestForComment.new(request_for_comment_params) - @request_for_comment.solved = true if @request_for_comment.question.include?('#loesung') - respond_to do |format| if @request_for_comment.save # create thread here and execute tests. A run is triggered from the frontend and does not need to be handled here. diff --git a/app/policies/request_for_comment_policy.rb b/app/policies/request_for_comment_policy.rb index 43d2e8de..a381ad91 100644 --- a/app/policies/request_for_comment_policy.rb +++ b/app/policies/request_for_comment_policy.rb @@ -8,7 +8,7 @@ class RequestForCommentPolicy < ApplicationPolicy end def show? - admin? || teacher_in_study_group? || author? || everyone && @record.question&.exclude?('#loesung') + everyone end def destroy? From 39467ad0e025832a4d261fbd404971095d8e9c14 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Mon, 8 Mar 2021 23:20:42 +0100 Subject: [PATCH 3/3] Hide linter in week 1 and 2 of Python course --- .../concerns/submission_scoring.rb | 8 +++++ lib/python20_course_week.rb | 29 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 lib/python20_course_week.rb diff --git a/app/controllers/concerns/submission_scoring.rb b/app/controllers/concerns/submission_scoring.rb index 279e7a05..b04f0fe2 100644 --- a/app/controllers/concerns/submission_scoring.rb +++ b/app/controllers/concerns/submission_scoring.rb @@ -92,5 +92,13 @@ module SubmissionScoring output.except!(:error_messages, :count, :failed, :filename, :message, :passed, :stderr, :stdout) end end + + # Return all test results except for those of a linter if not allowed + show_linter = Python20CourseWeek.show_linter? submission.exercise + outputs&.reject do |output| + next if show_linter || output.blank? + + output[:file_role] == 'teacher_defined_linter' + end end end diff --git a/lib/python20_course_week.rb b/lib/python20_course_week.rb new file mode 100644 index 00000000..7d510ea6 --- /dev/null +++ b/lib/python20_course_week.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class Python20CourseWeek + + def self.get_for(exercise) + case exercise.title + when /Python20 Aufgabe 1/ + 1 + when /Python20 Aufgabe 2/ + 2 + when /Python20 Aufgabe 3/ + 3 + when /Python20 Aufgabe 4/ + 4 + when /Python20 Snake/ + 4 + else + # Not part of the Python20 course + nil + end + end + + def self.show_linter?(exercise) + week = get_for(exercise) + return true if week.nil? # Exercise is not part of the experiment + + [3, 4].include?(week) + end +end