diff options
Diffstat (limited to 'app/models/concerns/timebox.rb')
-rw-r--r-- | app/models/concerns/timebox.rb | 92 |
1 files changed, 4 insertions, 88 deletions
diff --git a/app/models/concerns/timebox.rb b/app/models/concerns/timebox.rb index d53594eb5af..5b74e88429c 100644 --- a/app/models/concerns/timebox.rb +++ b/app/models/concerns/timebox.rb @@ -3,13 +3,10 @@ module Timebox extend ActiveSupport::Concern - include AtomicInternalId include CacheMarkdownField include Gitlab::SQL::Pattern - include IidRoutes include Referable include StripAttribute - include FromUnion TimeboxStruct = Struct.new(:title, :name, :id, :class_name) do # Ensure these models match the interface required for exporting @@ -42,39 +39,19 @@ module Timebox alias_method :timebox_id, :id - validates :group, presence: true, unless: :project - validates :project, presence: true, unless: :group - - validate :timebox_type_check validate :start_date_should_be_less_than_due_date, if: proc { |m| m.start_date.present? && m.due_date.present? } validate :dates_within_4_digits cache_markdown_field :title, pipeline: :single_line cache_markdown_field :description, issuable_reference_expansion_enabled: true - belongs_to :project - belongs_to :group - has_many :issues has_many :labels, -> { distinct.reorder('labels.title') }, through: :issues has_many :merge_requests - scope :of_projects, ->(ids) { where(project_id: ids) } - scope :of_groups, ->(ids) { where(group_id: ids) } scope :closed, -> { with_state(:closed) } - scope :for_projects, -> { where(group: nil).includes(:project) } scope :with_title, -> (title) { where(title: title) } - scope :for_projects_and_groups, -> (projects, groups) do - projects = projects.compact if projects.is_a? Array - projects = [] if projects.nil? - - groups = groups.compact if groups.is_a? Array - groups = [] if groups.nil? - - from_union([where(project_id: projects), where(group_id: groups)], remove_duplicates: false) - end - # A timebox is within the timeframe (start_date, end_date) if it overlaps # with that timeframe: # @@ -132,10 +109,6 @@ module Timebox end end - def count_by_state - reorder(nil).group(:state).count - end - def predefined_id?(id) [Any.id, None.id, Upcoming.id, Started.id].include?(id) end @@ -145,29 +118,8 @@ module Timebox end end - ## - # Returns the String necessary to reference a Timebox in Markdown. Group - # timeboxes only support name references, and do not support cross-project - # references. - # - # format - Symbol format to use (default: :iid, optional: :name) - # - # Examples: - # - # Milestone.first.to_reference # => "%1" - # Iteration.first.to_reference(format: :name) # => "*iteration:\"goal\"" - # Milestone.first.to_reference(cross_namespace_project) # => "gitlab-org/gitlab-foss%1" - # Iteration.first.to_reference(same_namespace_project) # => "gitlab-foss*iteration:1" - # - def to_reference(from = nil, format: :name, full: false) - format_reference = timebox_format_reference(format) - reference = "#{self.class.reference_prefix}#{format_reference}" - - if project - "#{project.to_reference_base(from, full: full)}#{reference}" - else - reference - end + def to_reference + raise NotImplementedError end def reference_link_text(from = nil) @@ -182,20 +134,12 @@ module Timebox model_name.singular end - def group_timebox? - group_id.present? - end - - def project_timebox? - project_id.present? - end - def safe_title title.to_slug.normalize.to_s end def resource_parent - group || project + raise NotImplementedError end def to_ability_name @@ -203,13 +147,7 @@ module Timebox end def merge_requests_enabled? - if group_timebox? - # Assume that groups have at least one project with merge requests enabled. - # Otherwise, we would need to load all of the projects from the database. - true - elsif project_timebox? - project&.merge_requests_enabled? - end + raise NotImplementedError end def weight_available? @@ -218,28 +156,6 @@ module Timebox private - def timebox_format_reference(format = :iid) - raise ArgumentError, _('Unknown format') unless [:iid, :name].include?(format) - - if group_timebox? && format == :iid - raise ArgumentError, _('Cannot refer to a group %{timebox_type} by an internal id!') % { timebox_type: timebox_name } - end - - if format == :name && !name.include?('"') - %("#{name}") - else - iid - end - end - - # Timebox should be either a project timebox or a group timebox - def timebox_type_check - if group_id && project_id - field = project_id_changed? ? :project_id : :group_id - errors.add(field, _("%{timebox_name} should belong either to a project or a group.") % { timebox_name: timebox_name }) - end - end - def start_date_should_be_less_than_due_date if due_date <= start_date errors.add(:due_date, _("must be greater than start date")) |