module Shrine::Plugins::Mirroring::FileMethods

Public Instance Methods

delete(mirror: true) click to toggle source

Mirrors delete to other mirror storages.

Calls superclass method
# File lib/shrine/plugins/mirroring.rb, line 98
def delete(mirror: true)
  result = super()
  trigger_mirror_delete if mirror
  result
end
mirror_delete() click to toggle source

Deletes the file from each mirror storage.

# File lib/shrine/plugins/mirroring.rb, line 124
def mirror_delete
  each_mirror do |mirror|
    self.class.new(id: id, storage: mirror).delete
  end
end
mirror_delete_background() click to toggle source

Calls mirror delete block.

# File lib/shrine/plugins/mirroring.rb, line 117
def mirror_delete_background
  fail Error, "mirror delete block is not registered" unless shrine_class.mirror_delete_block

  shrine_class.mirror_delete_block.call(self)
end
mirror_upload(**options) click to toggle source

Uploads the file to each mirror storage.

# File lib/shrine/plugins/mirroring.rb, line 82
def mirror_upload(**options)
  previously_opened = opened?

  each_mirror do |mirror|
    rewind if opened?

    shrine_class.upload(self, mirror, **options, location: id, close: false, action: :mirror)
  end
ensure
  if opened? && !previously_opened
    close
    @io = nil
  end
end
mirror_upload_background(**options) click to toggle source

Calls mirror upload block.

# File lib/shrine/plugins/mirroring.rb, line 75
def mirror_upload_background(**options)
  fail Error, "mirror upload block is not registered" unless shrine_class.mirror_upload_block

  shrine_class.mirror_upload_block.call(self, **options)
end
trigger_mirror_delete() click to toggle source

Mirrors delete if mirrors are defined. Calls mirror block if registered, otherwise mirrors synchronously.

# File lib/shrine/plugins/mirroring.rb, line 106
def trigger_mirror_delete
  return unless shrine_class.mirrors[storage_key] && shrine_class.mirror_delete?

  if shrine_class.mirror_delete_block
    mirror_delete_background
  else
    mirror_delete
  end
end
trigger_mirror_upload(**options) click to toggle source

Mirrors upload if mirrors are defined. Calls mirror block if registered, otherwise mirrors synchronously.

# File lib/shrine/plugins/mirroring.rb, line 64
def trigger_mirror_upload(**options)
  return unless shrine_class.mirrors[storage_key] && shrine_class.mirror_upload?

  if shrine_class.mirror_upload_block
    mirror_upload_background(**options)
  else
    mirror_upload(**options)
  end
end

Private Instance Methods

each_mirror(&block) click to toggle source

Iterates over mirror storages.

# File lib/shrine/plugins/mirroring.rb, line 133
def each_mirror(&block)
  mirrors = shrine_class.mirrors(storage_key)
  mirrors.map(&block)
end