Sha256: abcc7bbb439f718576b0d8be62b12bc8bdd4ceba0301356aa453b13cb058e0c1

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

# frozen_string_literal: true

class FastIgnore
  class RuleSet
    def initialize(rules, allow)
      @dir_rules = rules.reject(&:file_only?).freeze
      @file_rules = rules.reject(&:dir_only?).freeze
      @any_not_anchored = rules.any?(&:unanchored?)
      @has_shebang_rules = rules.any?(&:shebang)
      @allowed_recursive = { '.' => true }
      @allow = allow

      freeze
    end

    def freeze
      @dir_rules.freeze
      @file_rules.freeze

      super
    end

    def allowed_recursive?(path, dir, filename)
      @allowed_recursive.fetch(path) do
        @allowed_recursive[path] =
          allowed_recursive?(::File.dirname(path), true, nil) && allowed_unrecursive?(path, dir, filename)
      end
    end

    def allowed_unrecursive?(path, dir, filename)
      (dir ? @dir_rules : @file_rules).reverse_each do |rule|
        return rule.negation? if rule.match?(path, filename)
      end

      (not @allow) || (dir && @any_not_anchored)
    end

    def weight
      @dir_rules.length + (@has_shebang_rules ? 10 : 0)
    end

    def empty?
      @dir_rules.empty? && @file_rules.empty?
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fast_ignore-0.10.1 lib/fast_ignore/rule_set.rb