Class: Crawlscope::RuleRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/crawlscope/rule_registry.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rules:, default_codes: nil) ⇒ RuleRegistry

Returns a new instance of RuleRegistry.



7
8
9
10
# File 'lib/crawlscope/rule_registry.rb', line 7

def initialize(rules:, default_codes: nil)
  @rules = Array(rules)
  @default_codes = Array(default_codes).map(&:to_sym)
end

Instance Attribute Details

#default_codesObject (readonly)

Returns the value of attribute default_codes.



5
6
7
# File 'lib/crawlscope/rule_registry.rb', line 5

def default_codes
  @default_codes
end

#rulesObject (readonly)

Returns the value of attribute rules.



5
6
7
# File 'lib/crawlscope/rule_registry.rb', line 5

def rules
  @rules
end

Class Method Details

.default(site_name: nil) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/crawlscope/rule_registry.rb', line 12

def self.default(site_name: nil)
  new(
    rules: [
      Rules::Metadata.new(site_name: site_name),
      Rules::StructuredData.new,
      Rules::Uniqueness.new,
      Rules::Links.new
    ],
    default_codes: %i[metadata structured_data uniqueness links]
  )
end

Instance Method Details

#codesObject



24
25
26
# File 'lib/crawlscope/rule_registry.rb', line 24

def codes
  @rules.map(&:code)
end

#rules_for(names) ⇒ Object

Raises:



28
29
30
31
32
33
34
35
36
37
# File 'lib/crawlscope/rule_registry.rb', line 28

def rules_for(names)
  normalized_names = Array(names).flat_map { |value| value.to_s.split(",") }.map(&:strip).reject(&:empty?)
  normalized_names = @default_codes.map(&:to_s) if normalized_names.empty?

  selected_rules = @rules.select { |rule| normalized_names.include?(rule.code.to_s) }
  missing_rules = normalized_names - selected_rules.map { |rule| rule.code.to_s }
  return selected_rules if missing_rules.empty?

  raise ConfigurationError, "Unknown Crawlscope rules: #{missing_rules.join(", ")}"
end