Sha256: ead86454aa33397f447146509f26ecaada44777c4fb7a7fd121f2e982bc15655

Contents?: true

Size: 1.06 KB

Versions: 2

Compression:

Stored size: 1.06 KB

Contents

require 'open-uri'

module SpatialFeatures
  module Download
    # file can be a url, path, or file, any of which can return be a zipped archive
    def self.open(file)
      file = Kernel.open(file)
      file = normalize_file(file) if file.is_a?(StringIO)
      return file
    end

    # file can be a url, path, or file, any of which can return be a zipped archive
    def self.open_each(file, unzip: nil, **unzip_options)
      file = Download.open(file)
      files = if unzip && Unzip.is_zip?(file)
        find_in_zip(file, find: unzip, **unzip_options)
      else
        [file]
      end

      return files.map { |f| File.open(f) }
    end

    def self.normalize_file(file)
      Tempfile.new.tap do |temp|
        temp.binmode
        temp.write(file.read)
        temp.rewind
      end
    end

    def self.entries(file)
      file = Kernel.open(file)
      file = normalize_file(file) if file.is_a?(StringIO)
      Unzip.entries(file)
    end

    def self.find_in_zip(file, find:, **unzip_options)
      Unzip.paths(file, :find => find, **unzip_options)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
spatial_features-3.1.0 lib/spatial_features/download.rb
spatial_features-3.0.2 lib/spatial_features/download.rb