Sha256: ebe6e46815c45d636d66911a6f64c5e00488c0d21227602d3356e91d99253c63

Contents?: true

Size: 1.07 KB

Versions: 2

Compression:

Stored size: 1.07 KB

Contents

module Riserva::Commands
  class Backup < ApplicationCommand
    attr_reader :uploaders

    def initialize
      super
      @uploaders = {}
    end

    def call
      create_archives
      push_to_cloud

      success? ? broadcast(:ok) : broadcast(:failed)
    rescue StandardError => exception
      broadcast(:failed)
      raise exception
    end

    private

    def success?
      @uploaders.values.map { |uploader| uploader.files == archivator.files }.all?
    end

    def create_archives
      Riserva::Config.folders { |folder| archivator.call(folder) }
    end

    def archivator
      @archivator ||= Riserva::Commands::CreateArchive.new
    end

    def push_to_cloud
      Riserva::Config.storages do |storage|
        archivator.files.each { |file| upload_file(storage, file) }
      end
    end

    def upload_file(storage, file)
      Riserva.logger.info("Uploading file #{file} to #{storage.title}...")

      uploader(storage).call(file)
    end

    def uploader(storage)
      @uploaders[storage.title] ||= Riserva::Commands::UploadFile.new(storage)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
riserva-0.1.6 lib/riserva/commands/backup.rb
riserva-0.1.5 lib/riserva/commands/backup.rb