Class: Noteikumi::Rules
- Inherits:
-
Object
- Object
- Noteikumi::Rules
- Defined in:
- lib/noteikumi/rules.rb
Overview
A collection of rules with various methods to load and find rules
Instance Attribute Summary collapse
-
#logger ⇒ Logger
readonly
private
The logger.
-
#rules ⇒ Array<Rule>
readonly
The loaded rules.
Instance Method Summary collapse
-
#<<(rule) ⇒ Rule
Append a rule to the collection.
-
#by_priority ⇒ Array<Rule>
Return the rule ordered by priority.
-
#empty? ⇒ Boolean
Determines if any rules are loaded.
-
#find_rules(directory) ⇒ Array<String>
Find all rules in a given directory.
-
#initialize(rules_dir, logger) ⇒ Object
constructor
Creates a rule collection.
-
#load_rule(file) ⇒ Rule
Load a rule from a file.
-
#load_rules ⇒ void
Load all the rules from the configured paths.
-
#rule_names ⇒ Array<String,Symbol>
Get the names of all the rules.
-
#select(&blk) ⇒ Array<Rule>
Use a block to select rules out of the overall set.
-
#size ⇒ Fixnum
(also: #count)
The amont of rules loaded.
Constructor Details
#initialize(rules_dir, logger) ⇒ Object
Creates a rule collection
18 19 20 21 22 |
# File 'lib/noteikumi/rules.rb', line 18 def initialize(rules_dir, logger) @rules = [] @logger = logger @rules_dir = Array(rules_dir) end |
Instance Attribute Details
#logger ⇒ Logger (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
The logger
11 12 13 |
# File 'lib/noteikumi/rules.rb', line 11 def logger @logger end |
#rules ⇒ Array<Rule> (readonly)
The loaded rules
6 7 8 |
# File 'lib/noteikumi/rules.rb', line 6 def rules @rules end |
Instance Method Details
#<<(rule) ⇒ Rule
Append a rule to the collection
58 59 60 |
# File 'lib/noteikumi/rules.rb', line 58 def <<(rule) @rules << rule end |
#by_priority ⇒ Array<Rule>
Return the rule ordered by priority
35 36 37 |
# File 'lib/noteikumi/rules.rb', line 35 def by_priority @rules.sort_by(&:priority) end |
#empty? ⇒ Boolean
Determines if any rules are loaded
50 51 52 |
# File 'lib/noteikumi/rules.rb', line 50 def empty? @rules.empty? end |
#find_rules(directory) ⇒ Array<String>
Find all rules in a given directory
Valid rules have names ending in _rule.rb
112 113 114 115 116 117 118 119 |
# File 'lib/noteikumi/rules.rb', line 112 def find_rules(directory) if File.directory?(directory) Dir.entries(directory).grep(/_rule.rb$/) else @logger.debug("Could not find directory %s while looking for rules" % directory) [] end end |
#load_rule(file) ⇒ Rule
Load a rule from a file
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/noteikumi/rules.rb', line 73 def load_rule(file) raise("The rule %s is not readable" % file) unless File.readable?(file) body = File.read(file) clean = Object.new rule = clean.instance_eval(body, file, 1) rule.file = file rule.logger = @logger logger.debug("Loaded rule %s from %s" % [rule.name, file]) rule end |
#load_rules ⇒ void
This method returns an undefined value.
Load all the rules from the configured paths
92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/noteikumi/rules.rb', line 92 def load_rules @rules_dir.each do |directory| find_rules(directory).each do |rule| rule = load_rule(File.join(directory, rule)) if rule_names.include?(rule.name) raise("Already have a rule called %s, cannot load another" % rule.name) end self << rule end end end |
#rule_names ⇒ Array<String,Symbol>
Get the names of all the rules
65 66 67 |
# File 'lib/noteikumi/rules.rb', line 65 def rule_names @rules.map(&:name) end |
#select(&blk) ⇒ Array<Rule>
Use a block to select rules out of the overall set
28 29 30 |
# File 'lib/noteikumi/rules.rb', line 28 def select(&blk) @rules.select(&blk) end |
#size ⇒ Fixnum Also known as: count
The amont of rules loaded
42 43 44 |
# File 'lib/noteikumi/rules.rb', line 42 def size @rules.size end |