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