Module: Surrender

Defined in:
lib/surrender.rb,
lib/surrender/version.rb,
lib/surrender/bucket_policy.rb,
lib/surrender/weekly_policy.rb,
lib/surrender/yearly_policy.rb,
lib/surrender/monthly_policy.rb,
lib/surrender/most_recent_policy.rb

Defined Under Namespace

Classes: BucketPolicy, MonthlyPolicy, MostRecentPolicy, WeeklyPolicy, YearlyPolicy

Constant Summary collapse

DEFAULT_ARGUMENTS =
{
  most_recent: 7,
  weekly: 5,
  monthly: 12,
  yearly: 2
}.freeze
BACKUP_RE =
/\b((?:19|2\d)\d{2})(.)?(0\d|1[012])\2?([012]\d|3[01])(?:T|\b)/
VERSION =
"0.8.2"

Class Method Summary collapse

Class Method Details

.reject(filenames, options = {}) ⇒ Array<String>

Returns The first argument returns filenames which did not match the regular expression. The second argument returns filenames which matched the regular expression and are candidates to be deleted.

Returns:

  • (Array<String>, Array<String>)

    The first argument returns filenames which did not match the regular expression. The second argument returns filenames which matched the regular expression and are candidates to be deleted.

Raises:

  • (ArgumentError)


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/surrender.rb', line 19

def self.reject(filenames, options={})
  options = DEFAULT_ARGUMENTS.merge(options)
  extra_keys = options.keys - DEFAULT_ARGUMENTS.keys
  raise ArgumentError, "Unknown keys: #{extra_keys.inspect} -- won't proceed" unless extra_keys.empty?

  policies = [
    Surrender::MostRecentPolicy.new(options.fetch(:most_recent)),
    Surrender::WeeklyPolicy.new(options.fetch(:weekly)),
    Surrender::MonthlyPolicy.new(options.fetch(:monthly)),
    Surrender::YearlyPolicy.new(options.fetch(:yearly)),
  ]

  all_files = filenames.map(&:to_s).map(&:chomp)
  valid_filenames = all_files.select{|fn| fn =~ BACKUP_RE}
  unprocessable = all_files - valid_filenames
  valid_filenames.each do |filename|
    filename =~ BACKUP_RE
    date = Date.new($1.to_i, $3.to_i, $4.to_i)

    policies.each do |policy|
      policy.add(filename, date)
    end
  end

  deleteable = valid_filenames.select do |filename|
    policies.all?{|policy| policy.deleteable?(filename)}
  end

  [unprocessable, deleteable]
end