class Ruleset
Attributes
rule_names[RW]
rules[R]
Public Class Methods
add_rule(rule_name)
click to toggle source
# File lib/patterns/ruleset.rb, line 14 def self.add_rule(rule_name) self.rule_names ||= [] self.rule_names << rule_name.to_sym self end
new(subject = nil)
click to toggle source
# File lib/patterns/ruleset.rb, line 20 def initialize(subject = nil) raise EmptyRuleset if self.class.rules.empty? @rules = self.class.rules.map { |rule| rule.new(subject) } end
rules()
click to toggle source
# File lib/patterns/ruleset.rb, line 8 def self.rules (rule_names || []).map do |rule_name| rule_name.to_s.classify.constantize end end
Public Instance Methods
applicable?()
click to toggle source
# File lib/patterns/ruleset.rb, line 38 def applicable? !not_applicable? end
each() { |rule_or_ruleset| ... }
click to toggle source
# File lib/patterns/ruleset.rb, line 54 def each(&block) return enum_for(:each) unless block_given? rules.each do |rule_or_ruleset| if rule_or_ruleset.is_a?(Ruleset) rule_or_ruleset.each(&block) else yield rule_or_ruleset end end end
forceable?()
click to toggle source
# File lib/patterns/ruleset.rb, line 46 def forceable? rules.all? do |rule| rule.forceable? || rule.not_applicable? || rule.satisfied? end end
not_applicable?()
click to toggle source
# File lib/patterns/ruleset.rb, line 42 def not_applicable? rules.all?(&:not_applicable?) end
not_satisfied?()
click to toggle source
# File lib/patterns/ruleset.rb, line 34 def not_satisfied? !satisfied? end
satisfied?(force: false)
click to toggle source
# File lib/patterns/ruleset.rb, line 26 def satisfied?(force: false) rules.all? do |rule| rule.satisfied? || rule.not_applicable? || (force && rule.forceable?) end end