class ReeText::Excerpt
def call(text, phrase, **opts)
def call(text, phrase, **opts) options = DEFAULTS.merge(opts) return if is_blank(text) && is_blank(phrase) separator = options[:separator] case phrase when Regexp regex = phrase else regex = /#{Regexp.escape(phrase)}/i end return unless matches = text.match(regex) phrase = matches[0] unless is_blank(separator) text.split(separator).each do |value| if value.match?(regex) phrase = value break end end end first_part, second_part = text.split(phrase, 2) prefix, first_part = cut_excerpt_part(:first, first_part, separator, options) postfix, second_part = cut_excerpt_part(:second, second_part, separator, options) affix = [first_part, separator, phrase, separator, second_part].join.strip [prefix, affix, postfix].join end