class Expire::Rules

How backups are expired

Attributes

rules[R]

Public Class Methods

from_options(options) click to toggle source
# File lib/expire/rules.rb, line 6
def self.from_options(options)
  known_rules = RuleList.name_symbols

  rule_options = options.select { |opt, _| known_rules.include?(opt) }

  new(rule_options)
end
from_yaml(file_name) click to toggle source
# File lib/expire/rules.rb, line 14
def self.from_yaml(file_name)
  pathname = Pathname.new(file_name)
  yaml_text = pathname.read
  yaml_rules = YAML.safe_load(yaml_text, symbolize_names: true)
  new(yaml_rules)
end
new(given = {}) click to toggle source
# File lib/expire/rules.rb, line 21
def initialize(given = {})
  @rules = given.map do |rule_name, value|
    if value.respond_to? :rank
      value
    else
      rule_class = rule_class_for(rule_name)
      rule_class.from_value(value)
    end
  end
end

Public Instance Methods

any?() click to toggle source
# File lib/expire/rules.rb, line 34
def any?
  rules.any?
end
apply(backups, reference_datetime) click to toggle source
# File lib/expire/rules.rb, line 38
def apply(backups, reference_datetime)
  rules.sort.each { |rule| rule.apply(backups, reference_datetime) }

  backups
end
count() click to toggle source
# File lib/expire/rules.rb, line 44
def count
  @rules.length
end
merge(prior_rules) click to toggle source
# File lib/expire/rules.rb, line 48
def merge(prior_rules)
  self.class.new(to_h.merge(prior_rules.to_h))
end
to_h() click to toggle source
# File lib/expire/rules.rb, line 52
def to_h
  rules.map { |rule| [rule.name.to_sym, rule] }.to_h
end

Private Instance Methods

rule_class_for(key) click to toggle source
# File lib/expire/rules.rb, line 58
def rule_class_for(key)
  rule_class_name_for(key).safe_constantize || raise(UnknownRuleError, key)
end
rule_class_name_for(key) click to toggle source
# File lib/expire/rules.rb, line 62
def rule_class_name_for(key)
  "::Expire::#{key.to_s.camelize}Rule"
end