Sha256: 8135b323f5f75dca9818eec070fa81510610ce56c46e6e0925b56da34a1d5d6a
Contents?: true
Size: 1.34 KB
Versions: 1
Compression:
Stored size: 1.34 KB
Contents
# frozen_string_literal: true module Expire # Take a path and return an instance of Expire::Backup class BackupFromPathService def self.call(path:, by: :path) new(path: path, by: by).call end def initialize(path:, by: :path) @by = by @pathname = Pathname.new(path) raise ArgumentError, "by: must be :ctime, :mtime or :path, not #{by}" unless %i[ctime mtime path].include?(by) end attr_reader :by, :pathname def call Backup.new(datetime: datetime, pathname: pathname) end private def datetime digits = extract_digits year = digits[0..3].to_i month = digits[4..5].to_i day = digits[6..7].to_i hour = digits[8..9].to_i minute = digits[10..11].to_i datetime_for(year, month, day, hour, minute) end def datetime_for(year, month, day, hour, minute) DateTime.new(year, month, day, hour, minute) rescue Date::Error raise InvalidPathError, "can't construct date and time from #{pathname}" end def extract_digits basename = pathname.basename.to_s digits = basename.gsub(/[^0-9]/, '') digits_length = digits.length return digits if digits_length == 12 return digits if digits_length == 14 raise InvalidPathError, "can't extract date and time from #{basename}" end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
expire-0.2.0 | lib/expire/backup_from_path_service.rb |