self.wildcard_match?

in lib/aws-xray-sdk/search_pattern.rb [10:57]


    def self.wildcard_match?(pattern:, text:, case_insensitive: true)
      return false unless pattern && text
      pattern_len = pattern.length
      text_len = text.length
      return text_len.zero? if pattern_len.zero?
      
      return true if pattern == '*'

      if case_insensitive
        
        pattern = pattern.downcase
        text = text.downcase
      end
      
      
      if !pattern.include?('*') || pattern.index('*') == pattern_len - 1
        return simple_wildcard_match? pattern: pattern, text: text
      end

      
      
      
      
      
      
      
      
      
      res = Array.new(text_len + 1)
      res[0] = true
      (0...pattern_len).each do |j|
        p = pattern[j]
        if p != '*'
          (text_len - 1).downto(0) do |i|
            res[i + 1] = res[i] && (p == '?' || (p == text[i]))
          end
        else
          i = 0
          i += 1 while i <= text_len && !res[i]
          (i..text_len + 1).each do |m|
            res[m] = true
          end
        end
        res[0] = res[0] && (p == '*')
      end
      res[text_len]
    end