class Querly::Check

Constants

Query

Attributes

patterns[R]
rules[R]

Public Class Methods

load(hash) click to toggle source
# File lib/querly/check.rb, line 58
def self.load(hash)
  pattern = hash["path"]

  rules = Array(hash["rules"]).map do |rule|
    case rule
    when String
      parse_rule_query(:append, rule)
    when Hash
      case
      when rule["append"]
        parse_rule_query(:append, rule["append"])
      when rule["except"]
        parse_rule_query(:except, rule["except"])
      when rule["only"]
        parse_rule_query(:only, rule["only"])
      else
        parse_rule_query(:append, rule)
      end
    end
  end

  self.new(pattern: pattern, rules: rules)
end
new(pattern:, rules:) click to toggle source
# File lib/querly/check.rb, line 23
def initialize(pattern:, rules:)
  @rules = rules

  @has_trailing_slash = pattern.end_with?("/")
  @has_middle_slash = /\/./ =~ pattern

  @patterns = []

  pattern.sub!(/\A\//, '')

  case
  when has_trailing_slash? && has_middle_slash?
    patterns << File.join(pattern, "**")
  when has_trailing_slash?
    patterns << File.join(pattern, "**")
    patterns << File.join("**", pattern, "**")
  when has_middle_slash?
    patterns << pattern
    patterns << File.join(pattern, "**")
  else
    patterns << pattern
    patterns << File.join("**", pattern)
    patterns << File.join(pattern, "**")
    patterns << File.join("**", pattern, "**")
  end
end
parse_rule_query(opr, query) click to toggle source
# File lib/querly/check.rb, line 82
def self.parse_rule_query(opr, query)
  case query
  when String
    Query.new(opr, nil, query)
  when Hash
    if query['tags']
      ts = query['tags']
      if ts.is_a?(String)
        ts = ts.split
      end
      tags = Set.new(ts)
    end
    identifier = query['id']

    Query.new(opr, tags, identifier)
  end
end

Public Instance Methods

has_middle_slash?() click to toggle source
# File lib/querly/check.rb, line 54
def has_middle_slash?
  @has_middle_slash
end
has_trailing_slash?() click to toggle source
# File lib/querly/check.rb, line 50
def has_trailing_slash?
  @has_trailing_slash
end
match?(path:) click to toggle source
# File lib/querly/check.rb, line 100
def match?(path:)
  patterns.any? {|pat| File.fnmatch?(pat, path.to_s) }
end