1# frozen_string_literal: true 2 3# Verifies features availability based on issue type. 4# This can be used, for example, for hiding UI elements or blocking specific 5# quick actions for particular issue types; 6module IssueAvailableFeatures 7 extend ActiveSupport::Concern 8 9 class_methods do 10 # EE only features are listed on EE::IssueAvailableFeatures 11 def available_features_for_issue_types 12 { 13 assignee: %w(issue incident), 14 confidentiality: %w(issue incident), 15 time_tracking: %w(issue incident), 16 move_and_clone: %w(issue incident) 17 }.with_indifferent_access 18 end 19 end 20 21 included do 22 scope :with_feature, ->(feature) { where(issue_type: available_features_for_issue_types[feature]) } 23 end 24 25 def issue_type_supports?(feature) 26 unless self.class.available_features_for_issue_types.has_key?(feature) 27 raise ArgumentError, 'invalid feature' 28 end 29 30 self.class.available_features_for_issue_types[feature].include?(issue_type) 31 end 32end 33 34IssueAvailableFeatures.prepend_mod_with('IssueAvailableFeatures') 35IssueAvailableFeatures::ClassMethods.prepend_mod_with('IssueAvailableFeatures::ClassMethods') 36