Sha256: 317bfbe3e65c0567f17905b17250cff9a3023c6e018983ff8e73434b8f20e242
Contents?: true
Size: 978 Bytes
Versions: 2
Compression:
Stored size: 978 Bytes
Contents
# frozen_string_literal: true module Fimon class Matcher def initialize(patterns) @patterns = Array(patterns).map {|pattern| to_regex(pattern) } end def match?(input) @patterns.any? {|pattern| pattern.match?(input) } end alias =~ match? private def to_regex(pattern) double = "__double__" single = "__single__" extension_groups = pattern.scan(/\{(.*?)\}/).flatten extension_groups.each_with_index do |group, index| pattern = pattern.gsub("{#{group}}", "__#{index}__") end pattern = pattern .gsub("**/", double) .gsub("*", single) pattern = Regexp.escape(pattern) .gsub(double, "([^/]+/)*") .gsub(single, "[^/]+") extension_groups.each_with_index do |group, i| pattern = pattern.gsub("__#{i}__", "(#{group.split(',').join('|')})") end Regexp.new("^#{pattern}$") end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
fimon-0.0.1 | lib/fimon/matcher.rb |
fimon-0.0.0 | lib/fimon/matcher.rb |