class Decidim::ContentRenderers::ProposalRenderer

A renderer that searches Global IDs representing proposals in content and replaces it with a link to their show page.

e.g. gid://<APP_NAME>/Decidim::Proposals::Proposal/1

@see BaseRenderer Examples of how to use a content renderer

Constants

GLOBAL_ID_REGEX

Matches a global id representing a Decidim::User

Public Instance Methods

render(_options = nil) click to toggle source

Replaces found Global IDs matching an existing proposal with a link to its show page. The Global IDs representing an invalid Decidim::Proposals::Proposal are replaced with '???' string.

@return [String] the content ready to display (contains HTML)

# File lib/decidim/content_renderers/proposal_renderer.rb, line 20
def render(_options = nil)
  return content unless content.respond_to?(:gsub)

  content.gsub(GLOBAL_ID_REGEX) do |proposal_gid|
    proposal = GlobalID::Locator.locate(proposal_gid)
    Decidim::Proposals::ProposalPresenter.new(proposal).display_mention
  rescue ActiveRecord::RecordNotFound
    proposal_id = proposal_gid.split("/").last
    "~#{proposal_id}"
  end
end