mirror of
https://github.com/gitlabhq/gitlabhq.git
synced 2025-07-25 17:08:32 +00:00
41 lines
992 B
Ruby
41 lines
992 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Issuable
|
|
class NamespaceGetter
|
|
INVALID_ISSUABLE_ERROR = Class.new(StandardError)
|
|
|
|
def initialize(issuable, excluded_issuable_types: [], allow_nil: false)
|
|
@issuable = issuable
|
|
@excluded_issuable_types = excluded_issuable_types
|
|
@allow_nil = allow_nil
|
|
|
|
raise_invalid_issuable_error if excluded_issuable_types.include?(issuable.class)
|
|
end
|
|
|
|
def namespace_id
|
|
case issuable
|
|
when Issue
|
|
issuable.namespace_id
|
|
when MergeRequest
|
|
issuable.project.project_namespace_id
|
|
else
|
|
return if @allow_nil && issuable.nil?
|
|
|
|
raise_invalid_issuable_error
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :issuable
|
|
|
|
def raise_invalid_issuable_error
|
|
raise INVALID_ISSUABLE_ERROR, "#{issuable.class.name} is not a supported Issuable type"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Gitlab::Issuable::NamespaceGetter.prepend_mod
|