class Sprockets::StaticAsset - sprockets-2.11.3 Documentation

# class Sprockets::StaticAsset

`StaticAsset`s are used for files that are served verbatim without any processing or concatenation. These are typical images and other binary files.

### Public Instance Methods

source() click to toggle source

Returns file contents as its `source`.

    # File lib/sprockets/static_asset.rb, line 11
    def source
      # File is read everytime to avoid memory bloat of large binary files
      pathname.open('rb') { |f| f.read }
    end

to_path() click to toggle source

Implemented for Rack SendFile support.

    # File lib/sprockets/static_asset.rb, line 17
    def to_path
      pathname.to_s
    end

write_to(filename, options = {}) click to toggle source

Save asset to disk.

    # File lib/sprockets/static_asset.rb, line 22
    def write_to(filename, options = {})
      # Gzip contents if filename has '.gz'
      options[:compress] ||= File.extname(filename) == '.gz'

      FileUtils.mkdir_p File.dirname(filename)

      if options[:compress]
        # Open file and run it through `Zlib`
        pathname.open('rb') do |rd|
          File.open("#{filename}+", 'wb') do |wr|
            gz = Zlib::GzipWriter.new(wr, Zlib::BEST_COMPRESSION)
            gz.mtime = mtime.to_i
            buf = ""
            while rd.read(16384, buf)
              gz.write(buf)
            end
            gz.close
          end
        end
      else
        # If no compression needs to be done, we can just copy it into place.
        FileUtils.cp(pathname, "#{filename}+")
      end

      # Atomic write
      FileUtils.mv("#{filename}+", filename)

      # Set mtime correctly
      File.utime(mtime, mtime, filename)

      nil
    ensure
      # Ensure tmp file gets cleaned up
      FileUtils.rm("#{filename}+") if File.exist?("#{filename}+")
    end