lib/html2rss/attribute_post_processors/gsub.rb in html2rss-0.9.0 vs lib/html2rss/attribute_post_processors/gsub.rb in html2rss-0.10.0

- old
+ new

@@ -1,11 +1,10 @@ -require 'to_regexp' +# frozen_string_literal: true module Html2rss module AttributePostProcessors ## - # # Imagine this HTML: # <h1>Foo bar and boo<h1> # # YAML usage example: # selectors: @@ -17,26 +16,49 @@ # replacement: baz # # Would return: # 'Foo bar and baz' # - # `pattern` can be a Regexp or a String. + # `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 - def initialize(value, env) + ## + # @param value [String] + # @param context [Item::Context] + def initialize(value, context) @value = value - options = env[:options] - @pattern = options[:pattern].to_regexp || options[:pattern] - @replacement = options[:replacement] + @options = context[:options] end ## # @return [String] def get - @value.to_s.gsub(@pattern, @replacement) + @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