Sha256: 34fe844ab9e2b59e83b4edabdf22c20f48e76c5e59126e6697c746e4481d5d70

Contents?: true

Size: 1.09 KB

Versions: 15

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

module MiniDefender
  class RulesFactory
    def self.blueprints
      @@blueprints ||= []
    end

    def self.register(klass)
      blueprints << klass
    end

    def init_set(rule_set)
      if rule_set.is_a?(String)
        rule_set = rule_set.split('|')
      end

      unless rule_set.is_a?(Array)
        raise ArgumentError, 'Rule set must be a string or an array'
      end

      rule_set = rule_set.map do |rule|
        unless rule.is_a?(String) || rule.is_a?(Rule)
          raise ArgumentError, 'Rule must be a string or an instance of MiniDefender::Rule'
        end

        rule.is_a?(String) ? init_rule(rule) : rule
      end

      rule_set.sort_by! { |r| r.priority }
    end

    def init_rule(signature)
      @blueprints ||= RulesFactory.blueprints

      signature = signature.split(':')
      blueprint = @blueprints.find { |b| b.available? && b.signature == signature[0] }
      raise ArgumentError, "The rule name #{signature[0]} is invalid or not available" if blueprint.nil?

      blueprint.make(signature[1..].join(':').split(','))
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
mini_defender-0.6.8 lib/mini_defender/rules_factory.rb
mini_defender-0.6.7 lib/mini_defender/rules_factory.rb
mini_defender-0.6.5 lib/mini_defender/rules_factory.rb
mini_defender-0.6.4 lib/mini_defender/rules_factory.rb
mini_defender-0.6.3 lib/mini_defender/rules_factory.rb
mini_defender-0.6.2 lib/mini_defender/rules_factory.rb
mini_defender-0.6.1 lib/mini_defender/rules_factory.rb
mini_defender-0.6.0 lib/mini_defender/rules_factory.rb
mini_defender-0.5.8 lib/mini_defender/rules_factory.rb
mini_defender-0.5.7 lib/mini_defender/rules_factory.rb
mini_defender-0.5.6 lib/mini_defender/rules_factory.rb
mini_defender-0.5.5 lib/mini_defender/rules_factory.rb
mini_defender-0.5.4 lib/mini_defender/rules_factory.rb
mini_defender-0.5.3 lib/mini_defender/rules_factory.rb
mini_defender-0.5.2 lib/mini_defender/rules_factory.rb