Sha256: 232aedd6011fce0566576f3b45d697dd14daff0ae51d08f9405623dd49ed68b5
Contents?: true
Size: 1.82 KB
Versions: 3
Compression:
Stored size: 1.82 KB
Contents
# frozen_string_literal: true module Decidim module ContentParsers # Abstract base class for content parsers, so they have the same contract # # @example How to use a content parser class # parser = Decidim::ContentParsers::CustomParser.new(content) # parser.rewrite # returns the content rewritten # parser.metadata # returns a Metadata object # # @abstract Subclass and override {#rewrite} and {#metadata} to implement a content parser class BaseParser # Class used as a container for metadata Metadata = Class.new # @return [String] the content to be rewritten attr_reader :content # Gets initialized with the `content` to parse # # @param content [String] already rewritten content or regular content def initialize(content) @content = content || "" end # Parse the `content` and return it modified # # @example Implementation for search and mark prohibited words # def rewrite # content.gsub('foo', '~~foo~~') # end # # @abstract Subclass is expected to implement it # @return [String] the content rewritten def rewrite content end # Collects and returns metadata. This metadata is accessible at parsing time # so it can be acted upon (sending emails to the users) or maybe even stored # at the DB for later consultation. # # @example Implementation for return a counter of prohibited words found # Metadata = Struct.new(:count) # # def metadata # Metadata.new(content.scan('foo').size) # end # # @abstract Subclass is expected to implement it # @return [Metadata] a Metadata object that holds extra information def metadata Metadata.new end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
decidim-core-0.9.2 | lib/decidim/content_parsers/base_parser.rb |
decidim-core-0.9.1 | lib/decidim/content_parsers/base_parser.rb |
decidim-core-0.9.0 | lib/decidim/content_parsers/base_parser.rb |