Module: Shrine::Plugins::ZipGuard

Defined in:
lib/shrine/plugins/zip_guard.rb

Defined Under Namespace

Modules: AttacherMethods Classes: EncryptedZipError, Error, MissingFileError

Class Method Summary collapse

Class Method Details

.configure(uploader, **opts) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/shrine/plugins/zip_guard.rb', line 95

def self.configure(uploader, **opts)
  uploader.opts[:zip_guard] = {
    fallback: opts[:fallback],
    required_files: opts[:required_files]
  }

  return unless opts[:required_files]

  uploader::Attacher.derivatives do |original|
    ZipGuard.with_zip(original, required_files: opts[:required_files]) do |_zip_file|
      {}
    end
  end
end

.load_dependencies(uploader) ⇒ Object



110
111
112
113
# File 'lib/shrine/plugins/zip_guard.rb', line 110

def self.load_dependencies(uploader, **)
  uploader.plugin :derivatives
  uploader.plugin :validation
end

.with_zip(original, required_files: nil) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/shrine/plugins/zip_guard.rb', line 22

def with_zip(original, required_files: nil, &)
  return yield(nil) unless zip?(original)

  Zip::File.open(original.path) do |zip_file|
    raise EncryptedZipError if zip_file.any?(&:encrypted?)

    if required_files
      Array(required_files).each do |pattern|
        raise MissingFileError, pattern unless zip_file.glob(pattern).any?
      end
    end

    yield zip_file
  end
end