diff options
Diffstat (limited to 'lib/banzai/filter/design_reference_filter.rb')
-rw-r--r-- | lib/banzai/filter/design_reference_filter.rb | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/lib/banzai/filter/design_reference_filter.rb b/lib/banzai/filter/design_reference_filter.rb deleted file mode 100644 index 1754fec93d4..00000000000 --- a/lib/banzai/filter/design_reference_filter.rb +++ /dev/null @@ -1,107 +0,0 @@ -# frozen_string_literal: true - -module Banzai - module Filter - class DesignReferenceFilter < AbstractReferenceFilter - class Identifier - include Comparable - attr_reader :issue_iid, :filename - - def initialize(issue_iid:, filename:) - @issue_iid = issue_iid - @filename = filename - end - - def as_composite_id(id_for_iid) - id = id_for_iid[issue_iid] - return unless id - - { issue_id: id, filename: filename } - end - - def <=>(other) - return unless other.is_a?(Identifier) - - [issue_iid, filename] <=> [other.issue_iid, other.filename] - end - alias_method :eql?, :== - - def hash - [issue_iid, filename].hash - end - end - - self.reference_type = :design - - def find_object(project, identifier) - records_per_parent[project][identifier] - end - - def parent_records(project, identifiers) - return [] unless project.design_management_enabled? - - iids = identifiers.map(&:issue_iid).to_set - issues = project.issues.where(iid: iids) - id_for_iid = issues.index_by(&:iid).transform_values(&:id) - issue_by_id = issues.index_by(&:id) - - designs(identifiers, id_for_iid).each do |d| - issue = issue_by_id[d.issue_id] - # optimisation: assign values we have already fetched - d.project = project - d.issue = issue - end - end - - def relation_for_paths(paths) - super.includes(:route, :namespace, :group) - end - - def parent_type - :project - end - - # optimisation to reuse the parent_per_reference query information - def parent_from_ref(ref) - parent_per_reference[ref || current_parent_path] - end - - def url_for_object(design, project) - path_options = { vueroute: design.filename } - Gitlab::Routing.url_helpers.designs_project_issue_path(project, design.issue, path_options) - end - - def data_attributes_for(_text, _project, design, **_kwargs) - super.merge(issue: design.issue_id) - end - - def self.object_class - ::DesignManagement::Design - end - - def self.object_sym - :design - end - - def self.parse_symbol(raw, match_data) - filename = match_data[:url_filename] - iid = match_data[:issue].to_i - Identifier.new(filename: CGI.unescape(filename), issue_iid: iid) - end - - def record_identifier(design) - Identifier.new(filename: design.filename, issue_iid: design.issue.iid) - end - - private - - def designs(identifiers, id_for_iid) - identifiers - .map { |identifier| identifier.as_composite_id(id_for_iid) } - .compact - .in_groups_of(100, false) # limitation of by_issue_id_and_filename, so we batch - .flat_map { |ids| DesignManagement::Design.by_issue_id_and_filename(ids) } - end - end - end -end |