Replace BooleanPresenceValidator with InclusionValidator
The `BooleanPresenceValidator` is causing issues with Ruby 3.2+ YJIT irregularly. Fixes CODEOCEAN-GQ, fixes CODEOCEAN-GR
This commit is contained in:
@ -1,7 +1,6 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require File.expand_path('../../uploaders/file_uploader', __dir__)
|
require File.expand_path('../../uploaders/file_uploader', __dir__)
|
||||||
require File.expand_path('../../../lib/active_model/validations/boolean_presence_validator', __dir__)
|
|
||||||
|
|
||||||
module CodeOcean
|
module CodeOcean
|
||||||
class File < ApplicationRecord
|
class File < ApplicationRecord
|
||||||
@ -49,9 +48,9 @@ module CodeOcean
|
|||||||
validates :feedback_message, if: :teacher_defined_assessment?, presence: true
|
validates :feedback_message, if: :teacher_defined_assessment?, presence: true
|
||||||
validates :feedback_message, absence: true, unless: :teacher_defined_assessment?
|
validates :feedback_message, absence: true, unless: :teacher_defined_assessment?
|
||||||
validates :hashed_content, if: :content_present?, presence: true
|
validates :hashed_content, if: :content_present?, presence: true
|
||||||
validates :hidden, boolean_presence: true
|
validates :hidden, inclusion: [true, false]
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
validates :read_only, boolean_presence: true
|
validates :read_only, inclusion: [true, false]
|
||||||
validates :role, inclusion: {in: ROLES}
|
validates :role, inclusion: {in: ROLES}
|
||||||
validates :weight, if: :teacher_defined_assessment?, numericality: true, presence: true
|
validates :weight, if: :teacher_defined_assessment?, numericality: true, presence: true
|
||||||
validates :weight, absence: true, unless: :teacher_defined_assessment?
|
validates :weight, absence: true, unless: :teacher_defined_assessment?
|
||||||
|
@ -7,8 +7,8 @@ class CommunitySolutionContribution < ApplicationRecord
|
|||||||
belongs_to :community_solution
|
belongs_to :community_solution
|
||||||
belongs_to :community_solution_lock
|
belongs_to :community_solution_lock
|
||||||
|
|
||||||
validates :proposed_changes, boolean_presence: true
|
validates :proposed_changes, inclusion: [true, false]
|
||||||
validates :timely_contribution, boolean_presence: true
|
validates :timely_contribution, inclusion: [true, false]
|
||||||
validates :autosave, boolean_presence: true
|
validates :autosave, inclusion: [true, false]
|
||||||
validates :working_time, presence: true
|
validates :working_time, presence: true
|
||||||
end
|
end
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require File.expand_path('../../lib/active_model/validations/boolean_presence_validator', __dir__)
|
|
||||||
|
|
||||||
class ExecutionEnvironment < ApplicationRecord
|
class ExecutionEnvironment < ApplicationRecord
|
||||||
include Creation
|
include Creation
|
||||||
include DefaultValues
|
include DefaultValues
|
||||||
@ -26,8 +24,8 @@ class ExecutionEnvironment < ApplicationRecord
|
|||||||
validates :docker_image, presence: true
|
validates :docker_image, presence: true
|
||||||
validates :memory_limit,
|
validates :memory_limit,
|
||||||
numericality: {greater_than_or_equal_to: MINIMUM_MEMORY_LIMIT, only_integer: true}, presence: true
|
numericality: {greater_than_or_equal_to: MINIMUM_MEMORY_LIMIT, only_integer: true}, presence: true
|
||||||
validates :network_enabled, boolean_presence: true
|
validates :network_enabled, inclusion: [true, false]
|
||||||
validates :privileged_execution, boolean_presence: true
|
validates :privileged_execution, inclusion: [true, false]
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
validates :permitted_execution_time, numericality: {only_integer: true}, presence: true
|
validates :permitted_execution_time, numericality: {only_integer: true}, presence: true
|
||||||
validates :pool_size, numericality: {only_integer: true}, presence: true
|
validates :pool_size, numericality: {only_integer: true}, presence: true
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'nokogiri'
|
require 'nokogiri'
|
||||||
require File.expand_path('../../lib/active_model/validations/boolean_presence_validator', __dir__)
|
|
||||||
|
|
||||||
class Exercise < ApplicationRecord
|
class Exercise < ApplicationRecord
|
||||||
include Context
|
include Context
|
||||||
@ -38,8 +37,8 @@ class Exercise < ApplicationRecord
|
|||||||
validate :valid_submission_deadlines?
|
validate :valid_submission_deadlines?
|
||||||
validates :description, presence: true
|
validates :description, presence: true
|
||||||
validates :execution_environment, presence: true, if: -> { !unpublished? }
|
validates :execution_environment, presence: true, if: -> { !unpublished? }
|
||||||
validates :public, boolean_presence: true
|
validates :public, inclusion: [true, false]
|
||||||
validates :unpublished, boolean_presence: true
|
validates :unpublished, inclusion: [true, false]
|
||||||
validates :title, presence: true
|
validates :title, presence: true
|
||||||
validates :token, presence: true, uniqueness: true
|
validates :token, presence: true, uniqueness: true
|
||||||
validates :uuid, uniqueness: {if: -> { uuid.present? }}
|
validates :uuid, uniqueness: {if: -> { uuid.present? }}
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require File.expand_path('../../lib/active_model/validations/boolean_presence_validator', __dir__)
|
|
||||||
|
|
||||||
class FileType < ApplicationRecord
|
class FileType < ApplicationRecord
|
||||||
include Creation
|
include Creation
|
||||||
include DefaultValues
|
include DefaultValues
|
||||||
@ -22,12 +20,12 @@ class FileType < ApplicationRecord
|
|||||||
has_many :files, class_name: 'CodeOcean::File'
|
has_many :files, class_name: 'CodeOcean::File'
|
||||||
has_many :file_templates
|
has_many :file_templates
|
||||||
|
|
||||||
validates :binary, boolean_presence: true
|
validates :binary, inclusion: [true, false]
|
||||||
validates :editor_mode, presence: true, unless: :binary?
|
validates :editor_mode, presence: true, unless: :binary?
|
||||||
validates :executable, boolean_presence: true
|
validates :executable, inclusion: [true, false]
|
||||||
validates :indent_size, presence: true, unless: :binary?
|
validates :indent_size, presence: true, unless: :binary?
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
validates :renderable, boolean_presence: true
|
validates :renderable, inclusion: [true, false]
|
||||||
|
|
||||||
%i[audio compressed csv excel image pdf powerpoint video word].each do |type|
|
%i[audio compressed csv excel image pdf powerpoint video word].each do |type|
|
||||||
define_method("#{type}?") do
|
define_method("#{type}?") do
|
||||||
|
@ -11,7 +11,7 @@ class ProxyExercise < ApplicationRecord
|
|||||||
has_and_belongs_to_many :exercises
|
has_and_belongs_to_many :exercises
|
||||||
has_many :user_proxy_exercise_exercises
|
has_many :user_proxy_exercise_exercises
|
||||||
|
|
||||||
validates :public, boolean_presence: true
|
validates :public, inclusion: [true, false]
|
||||||
|
|
||||||
def count_files
|
def count_files
|
||||||
exercises.count
|
exercises.count
|
||||||
|
@ -33,7 +33,7 @@ class User < ApplicationRecord
|
|||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
validates :platform_admin, boolean_presence: true
|
validates :platform_admin, inclusion: [true, false]
|
||||||
|
|
||||||
def internal_user?
|
def internal_user?
|
||||||
is_a?(InternalUser)
|
is_a?(InternalUser)
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module ActiveModel
|
|
||||||
module Validations
|
|
||||||
class BooleanPresenceValidator < EachValidator
|
|
||||||
BOOLEAN_VALUES = [false, true].freeze
|
|
||||||
|
|
||||||
def validate(record)
|
|
||||||
[attributes].flatten.each do |attribute|
|
|
||||||
value = record.send(:read_attribute_for_validation, attribute)
|
|
||||||
record.errors.add(attribute, nil, **options) unless BOOLEAN_VALUES.include?(value)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Reference in New Issue
Block a user