# frozen_string_literal: true
module Html2rss
module AttributePostProcessors
##
# Returns a defined part of a String.
#
# Both parameters must be an Integer and they can be negative.
# The +end+ parameter can be omitted, in that case it will not cut the
# String at the end.
#
# A Regexp or a MatchString is not supported.
#
# See the [`String#[]`](https://ruby-doc.org/core/String.html#method-i-5B-5D)
# documentation for more information.
#
# Imagine this HTML:
#
Foo bar and baz
#
# YAML usage example:
# selectors:
# title:
# selector: h1
# post_process:
# name: substring
# start: 4
# end: 6
#
# Would return:
# 'bar'
class Substring
##
# @param value [String] The original string to extract a substring from.
# @param env [Item::Context] Context object providing additional environment details.
def initialize(value, env)
@value = value
@options = env[:options]
end
##
# Extracts the substring from the original string based on the provided start and end indices.
#
# @return [String] The extracted substring.
def get
start_index = @options[:start].to_i
end_index = @options[:end]&.to_i || @value.length
@value[start_index..end_index]
end
end
end
end