# frozen_string_literal: true module Html2rss module AttributePostProcessors ## # Imagine this HTML: #

Foo bar and boo

# # YAML usage example: # selectors: # title: # selector: h1 # post_process: # name: gsub # pattern: boo # replacement: baz # # Would return: # 'Foo bar and baz' # # `pattern` can be a Regexp or a String. If it is a String, it will remove # one pair of surrounding slashes ('/') to keep backwards compatibility # and then parse it to build a Regexp. # # `replacement` can be a String or a Hash. # # See the doc on [String#gsub](https://ruby-doc.org/core/String.html#method-i-gsub) for more info. class Gsub ## # @param value [String] # @param context [Item::Context] def initialize(value, context) @value = value @options = context[:options] end ## # @return [String] def get @value.to_s.gsub(pattern, replacement) end private ## # @return [Regexp] def pattern pattern = @options[:pattern] raise ArgumentError, 'The `pattern` option is missing' unless pattern pattern.is_a?(String) ? Utils.build_regexp_from_string(pattern) : pattern end ## # @return [Hash, String] def replacement replacement = @options[:replacement] return replacement if replacement.is_a?(String) || replacement.is_a?(Hash) raise ArgumentError, 'The `replacement` option must be a String or Hash' end end end end