Sha256: 3d0946072bc39716656c5a312f332ebd3106afda77c7242c7f0029400c175bd9

Contents?: true

Size: 1.28 KB

Versions: 4

Compression:

Stored size: 1.28 KB

Contents

# frozen_string_literal: true

module Expire
  # Take a path and return an instance of Expire::Backup
  class BackupFromPathService
    def self.call(path:)
      new(path: path).call
    end

    def initialize(path:)
      @pathname = Pathname.new(path)
    end

    attr_reader :by, :pathname

    def call
      Backup.new(time: time, pathname: pathname)
    end

    private

    def time
      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

      time_for(year, month, day, hour, minute)
    end

    def time_for(year, month, day, hour, minute)
      Date.new(year, month, day)
      Time.new(year, month, day, hour, minute)
    rescue Date::Error
      raise InvalidPathError, "can't construct date and time from #{pathname}"
    rescue ArgumentError
      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

4 entries across 4 versions & 1 rubygems

Version Path
expire-0.2.6 lib/expire/backup_from_path_service.rb
expire-0.2.5 lib/expire/backup_from_path_service.rb
expire-0.2.4 lib/expire/backup_from_path_service.rb
expire-0.2.3 lib/expire/backup_from_path_service.rb