class MemDB::Idx::Pattern::Pattern

Public Class Methods

new(source, min:) click to toggle source
# File lib/mem_db/idx/pattern.rb, line 9
def initialize(source, min:)
  @parts = source.split("*", -1)
  @min = min
end

Public Instance Methods

value() click to toggle source
# File lib/mem_db/idx/pattern.rb, line 14
def value # rubocop:disable Metrics/PerceivedComplexity, Metrics/AbcSize, Metrics/CyclomaticComplexity
  if @parts.length == 1
    [:enum, @parts[0]]
  else
    prefix = @parts[0]
    suffix = @parts[-1]

    if prefix != "" || suffix != ""
      if prefix.length >= @min && prefix.length >= suffix.length
        [:prefix, prefix]
      elsif suffix.length >= @min
        [:suffix, suffix]
      else
        candidates = [
          [:prefix, prefix],
          [:suffix, suffix]
        ]

        candidates.push([:substring, substring]) if substring # rubocop:disable Metrics/BlockNesting

        candidates.max_by { |v| v[1].length }
      end
    else
      [:substring, substring]
    end
  end
end

Private Instance Methods

substring() click to toggle source
# File lib/mem_db/idx/pattern.rb, line 44
def substring
  return @substring if defined?(@substring)

  @substring =
    if @parts.length > 2
      substrings = @parts[1..-2]
      substrings.find { |p| p.length > @min } || substrings.find { |p| p.length.positive? }
    end
end