Sha256: 6825c916b69b0c5a5fd2da97a76c45ea60886b63f82665716e82f4967f37f03c

Contents?: true

Size: 1000 Bytes

Versions: 7

Compression:

Stored size: 1000 Bytes

Contents

# frozen_string_literal

module MiniDefender
  class RulesExpander
    # @param [Hash] rules
    # @param [Hash] flat_data
    # @return [Hash]
    def expand(rules, flat_data)
      result = {}

      rules.each do |rule_key, rule_set|
        unless rule_key.include?('*')
          result[rule_key] = rule_set
          next
        end

        k_pattern = Regexp.compile('\A' + rule_key.gsub(/\*/, '\d+') + '\Z')
        k_pattern_result = {}

        flat_data.each do |value_key, _|
          next unless k_pattern.match?(value_key)
          k_pattern_result[value_key] = rule_set
        end

        if k_pattern_result.empty?
          k_pattern_result[k_pattern.source.gsub(/\\[AZ]/, '').gsub('\d+', '0')] = rule_set
        end

        result.merge!(k_pattern_result)
      end

      result
    end

    def array_patterns(rules)
      rules
        .filter { |key, _| key.include?('*') }
        .map { |key, _| Regexp.compile('\A' + key.gsub(/\*/, '\d+') + '\Z') }
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
mini_defender-0.5.7 lib/mini_defender/rules_expander.rb
mini_defender-0.5.6 lib/mini_defender/rules_expander.rb
mini_defender-0.5.5 lib/mini_defender/rules_expander.rb
mini_defender-0.5.4 lib/mini_defender/rules_expander.rb
mini_defender-0.5.3 lib/mini_defender/rules_expander.rb
mini_defender-0.5.2 lib/mini_defender/rules_expander.rb
mini_defender-0.5.1 lib/mini_defender/rules_expander.rb