diff options
Diffstat (limited to 'app/models/concerns/issues/forbid_issue_type_column_usage.rb')
-rw-r--r-- | app/models/concerns/issues/forbid_issue_type_column_usage.rb | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/app/models/concerns/issues/forbid_issue_type_column_usage.rb b/app/models/concerns/issues/forbid_issue_type_column_usage.rb new file mode 100644 index 00000000000..46a8a0278d9 --- /dev/null +++ b/app/models/concerns/issues/forbid_issue_type_column_usage.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +# TODO: Remove with https://gitlab.com/gitlab-org/gitlab/-/issues/402699 +module Issues + module ForbidIssueTypeColumnUsage + extend ActiveSupport::Concern + + ForbiddenColumnUsed = Class.new(StandardError) + + included do + WorkItems::Type.base_types.each do |base_type, _value| + define_method "#{base_type}?".to_sym do + error_message = <<~ERROR + `#{model_name.element}.#{base_type}?` uses the `issue_type` column underneath. As we want to remove the column, + its usage is forbidden. You should use the `work_item_types` table instead. + + # Before + + #{model_name.element}.#{base_type}? => true + + # After + + #{model_name.element}.work_item_type.#{base_type}? => true + + More details in https://gitlab.com/groups/gitlab-org/-/epics/10529 + ERROR + + raise ForbiddenColumnUsed, error_message + end + + define_singleton_method base_type.to_sym do + error = ForbiddenColumnUsed.new( + <<~ERROR + `#{name}.#{base_type}` uses the `issue_type` column underneath. As we want to remove the column, + its usage is forbidden. You should use the `work_item_types` table instead. + + # Before + + #{name}.#{base_type} + + # After + + #{name}.with_issue_type(:#{base_type}) + + More details in https://gitlab.com/groups/gitlab-org/-/epics/10529 + ERROR + ) + + Gitlab::ErrorTracking.track_and_raise_for_dev_exception( + error, + method_name: "#{name}.#{base_type}" + ) + + with_issue_type(base_type.to_sym) + end + end + end + end +end |