Class: Banzai::Filter::References::DesignReferenceFilter

Inherits:
AbstractReferenceFilter show all
Defined in:
lib/banzai/filter/references/design_reference_filter.rb

Defined Under Namespace

Classes: Identifier

Constant Summary

Constants included from Concerns::TimeoutFilterHandler

Concerns::TimeoutFilterHandler::COMPLEX_MARKDOWN_MESSAGE, Concerns::TimeoutFilterHandler::RENDER_TIMEOUT, Concerns::TimeoutFilterHandler::SANITIZATION_RENDER_TIMEOUT

Constants included from Concerns::PipelineTimingCheck

Concerns::PipelineTimingCheck::MAX_PIPELINE_SECONDS

Constants inherited from ReferenceFilter

ReferenceFilter::REFERENCE_TYPE_ATTRIBUTE, ReferenceFilter::REFERENCE_TYPE_DATA_ATTRIBUTE_NAME

Constants included from Concerns::TextReplacer

Concerns::TextReplacer::REFERENCE_PLACEHOLDER, Concerns::TextReplacer::REFERENCE_PLACEHOLDER_PATTERN

Instance Method Summary collapse

Methods inherited from AbstractReferenceFilter

#call, #find_object_cached, #find_object_from_link, #find_object_from_link_cached, #from_ref_cached, #identifier, #initialize, #object_link_content_html, #object_link_content_html_extras, #object_link_filter, #object_link_title, #parent, #parent_type, #references_in, #symbol_from_match_data, #url_for_object_cached, #wrap_link

Methods included from CrossProjectReference

#parent_from_ref

Methods included from Concerns::TimeoutFilterHandler

#call

Methods included from Concerns::PipelineTimingCheck

#call, #exceeded_pipeline_max?

Methods inherited from ReferenceFilter

call, #call, #call_and_update_nodes, #each_node, #group, #initialize, #nodes, #nodes?, #object_class, #project, #references_in, #requires_unescaping?

Methods included from Concerns::TextReplacer

#replace_references_in_text_with_html

Methods included from Concerns::HtmlWriter

#write_opening_tag

Methods included from Concerns::OutputSafety

#escape_once

Methods included from RequestStoreReferenceCache

#cached_call, #get_or_set_cache

Constructor Details

This class inherits a constructor from Banzai::Filter::References::AbstractReferenceFilter

Instance Method Details

#data_attributes_for(_original, _project, design, **_kwargs) ⇒ Object



69
70
71
# File 'lib/banzai/filter/references/design_reference_filter.rb', line 69

def data_attributes_for(_original, _project, design, **_kwargs)
  super.merge(issue: design.issue_id)
end

#find_object(project, identifier) ⇒ Object



39
40
41
# File 'lib/banzai/filter/references/design_reference_filter.rb', line 39

def find_object(project, identifier)
  reference_cache.records_per_parent[project][identifier]
end

#object_symObject



73
74
75
# File 'lib/banzai/filter/references/design_reference_filter.rb', line 73

def object_sym
  :design
end

#parent_records(parent, identifiers) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/banzai/filter/references/design_reference_filter.rb', line 43

def parent_records(parent, identifiers)
  return DesignManagement::Design.none unless parent.is_a?(Project)
  return DesignManagement::Design.none unless parent.design_management_enabled?

  iids        = identifiers.map(&:issue_iid).to_set
  issues      = parent.issues.iid_in(iids).includes(:project, :namespace)
  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 = parent
    d.issue = issue
  end
end

#parse_symbol(raw, match_data) ⇒ Object



77
78
79
80
81
# File 'lib/banzai/filter/references/design_reference_filter.rb', line 77

def 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

#record_identifier(design) ⇒ Object



83
84
85
# File 'lib/banzai/filter/references/design_reference_filter.rb', line 83

def record_identifier(design)
  Identifier.new(filename: design.filename, issue_iid: design.issue.iid)
end

#relation_for_paths(paths) ⇒ Object



60
61
62
# File 'lib/banzai/filter/references/design_reference_filter.rb', line 60

def relation_for_paths(paths)
  super.includes(:route, :namespace, :group)
end

#url_for_object(design, project) ⇒ Object



64
65
66
67
# File 'lib/banzai/filter/references/design_reference_filter.rb', line 64

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