Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/work_items/widget_definition.rb')
-rw-r--r--app/models/work_items/widget_definition.rb54
1 files changed, 54 insertions, 0 deletions
diff --git a/app/models/work_items/widget_definition.rb b/app/models/work_items/widget_definition.rb
new file mode 100644
index 00000000000..5d4414e95d8
--- /dev/null
+++ b/app/models/work_items/widget_definition.rb
@@ -0,0 +1,54 @@
+# frozen_string_literal: true
+
+module WorkItems
+ class WidgetDefinition < ApplicationRecord
+ self.table_name = 'work_item_widget_definitions'
+
+ belongs_to :namespace, optional: true
+ belongs_to :work_item_type, class_name: 'WorkItems::Type', inverse_of: :widget_definitions
+
+ validates :name, presence: true
+ validates :name, uniqueness: { case_sensitive: false, scope: [:namespace_id, :work_item_type_id] }
+ validates :name, length: { maximum: 255 }
+
+ scope :enabled, -> { where(disabled: false) }
+ scope :global, -> { where(namespace: nil) }
+
+ enum widget_type: {
+ assignees: 0,
+ description: 1,
+ hierarchy: 2,
+ labels: 3,
+ milestone: 4,
+ notes: 5,
+ start_and_due_date: 6,
+ health_status: 7, # EE-only
+ weight: 8, # EE-only
+ iteration: 9, # EE-only
+ progress: 10, # EE-only
+ status: 11, # EE-only
+ requirement_legacy: 12, # EE-only
+ test_reports: 13 # EE-only
+ }
+
+ def self.available_widgets
+ global.enabled.filter_map(&:widget_class).uniq
+ end
+
+ def self.widget_classes
+ WorkItems::WidgetDefinition.widget_types.keys.filter_map do |type|
+ WorkItems::Widgets.const_get(type.camelize, false)
+ rescue NameError
+ nil
+ end
+ end
+
+ def widget_class
+ return unless widget_type
+
+ WorkItems::Widgets.const_get(widget_type.camelize, false)
+ rescue NameError
+ nil
+ end
+ end
+end