Sha256: 3f3760ed8013a8eb24e288aefc48eacd9acbddbbf5effb21b2111f6f4d8fbad0

Contents?: true

Size: 1.26 KB

Versions: 38

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

module Decidim
  module ContentParsers
    # A parser that searches mentions of Proposals in content.
    #
    # This parser accepts two ways for linking Proposals.
    # - Using a standard url starting with http or https.
    # - With a word starting with `~` and digits afterwards will be considered a possible mentioned proposal.
    # For example `~1234`, but no `~ 1234`.
    #
    # Also fills a `Metadata#linked_proposals` attribute.
    #
    # @see BaseParser Examples of how to use a content parser
    class ProposalParser < ResourceParser
      # Class used as a container for metadata
      #
      # @!attribute linked_proposals
      #   @return [Array] an array of Decidim::Proposals::Proposal mentioned in content
      Metadata = Struct.new(:linked_proposals)

      def initialize(content, context)
        super
        @metadata = Metadata.new([])
      end

      # (see BaseParser#metadata)
      attr_reader :metadata

      private

      def url_regex
        %r{#{URL_REGEX_SCHEME}#{URL_REGEX_CONTENT}/proposals/#{URL_REGEX_END_CHAR}+}i
      end

      def model_class
        "Decidim::Proposals::Proposal"
      end

      def update_metadata(resource)
        @metadata.linked_proposals << resource.id
      end
    end
  end
end

Version data entries

38 entries across 38 versions & 1 rubygems

Version Path
decidim-proposals-0.30.0.rc3 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.30.0.rc2 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.30.0.rc1 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.29.2 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.28.5 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.29.1 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.28.4 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.27.9 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.29.0 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.28.3 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.27.8 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.29.0.rc4 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.29.0.rc3 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.29.0.rc2 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.29.0.rc1 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.28.2 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.27.7 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.28.1 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.27.6 lib/decidim/content_parsers/proposal_parser.rb
decidim-proposals-0.26.10 lib/decidim/content_parsers/proposal_parser.rb