Sha256: 2549f4b97bc29a33e244360391db29bde9c65a28d352a22576ec3cc55eaa2724
Contents?: true
Size: 1.03 KB
Versions: 38
Compression:
Stored size: 1.03 KB
Contents
class GrokConverter def load_patterns(dir = nil) @patterns = {} dir ||= Rails.root.join("vendor/patterns") Dir.glob("#{dir}/*").each do |file| File.read(file).split("\n").each do |line| line.strip! next if line == "" next if line.start_with?("#") name, pattern = line.split(/\s+/, 2) next unless pattern @patterns[name] = pattern end end end def convert_to_regexp(pattern) limit = 100 expanded = pattern.dup while m = expanded.match(/%{(.*?)(?::(.*?))?}/) # %{key:name} or #{key} all, key, name = *m if name expanded = expanded.gsub(all, "(?<#{name}>#{@patterns[key]})") else expanded = expanded.gsub(all, @patterns[key]) end limit -= 1 break if limit == 0 end Regexp.new expanded end end =begin g = GrokConverter.new g.load_patterns("vendor/patterns") p g.convert_to_regexp("%{USERNAME:user} %{NOT_EXISTS:foo} %{USER} aaaa") # => /(?<user>[a-zA-Z0-9._-]+) (?<foo>) [a-zA-Z0-9._-]+ aaaa/ =end
Version data entries
38 entries across 38 versions & 1 rubygems