Sha256: d3bfe9ecd92fb2084f97e4c6953819eb6ba7e3e172bd22cdcb68755b39482c44

Contents?: true

Size: 1.36 KB

Versions: 9

Compression:

Stored size: 1.36 KB

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)
      unless rules.is_a?(Hash)
        raise ArgumentError, 'Rules must be a Hash'
      end

      result = rules.keys.filter { |key| key.include?('*') }

      # If the user hasn't add a rule for each of the array elements, add it manually
      rules.keys.each do |key|
        current = []
        key.split('.').each do |section|
          current << section
          result << current.join('.') if section == '*'
        end
      end

      result.sort.uniq.map { |key| Regexp.compile('\A' + key.gsub(/\*/, '\d+') + '\Z') }
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
mini_defender-0.6.8 lib/mini_defender/rules_expander.rb
mini_defender-0.6.7 lib/mini_defender/rules_expander.rb
mini_defender-0.6.5 lib/mini_defender/rules_expander.rb
mini_defender-0.6.4 lib/mini_defender/rules_expander.rb
mini_defender-0.6.3 lib/mini_defender/rules_expander.rb
mini_defender-0.6.2 lib/mini_defender/rules_expander.rb
mini_defender-0.6.1 lib/mini_defender/rules_expander.rb
mini_defender-0.6.0 lib/mini_defender/rules_expander.rb
mini_defender-0.5.8 lib/mini_defender/rules_expander.rb