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