Class: Sprockets::StaticAsset
- Defined in:
- lib/sprockets/static_asset.rb
Overview
‘StaticAsset`s are used for files that are served verbatim without any processing or concatenation. These are typical images and other binary files.
Instance Attribute Summary
Attributes inherited from Asset
#content_type, #digest, #length, #logical_path, #mtime, #pathname
Instance Method Summary collapse
-
#source ⇒ Object
Returns file contents as its ‘source`.
-
#to_path ⇒ Object
Implemented for Rack SendFile support.
-
#write_to(filename, options = {}) ⇒ Object
Save asset to disk.
Methods inherited from Asset
#body, #dependencies, #digest_path, #each, #encode_with, #eql?, #fresh?, from_hash, #hash, #init_with, #initialize, #inspect, #stale?, #to_a, #to_s
Constructor Details
This class inherits a constructor from Sprockets::Asset
Instance Method Details
#source ⇒ Object
Returns file contents as its ‘source`.
11 12 13 14 |
# 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 ⇒ Object
Implemented for Rack SendFile support.
17 18 19 |
# File 'lib/sprockets/static_asset.rb', line 17 def to_path pathname.to_s end |
#write_to(filename, options = {}) ⇒ Object
Save asset to disk.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/sprockets/static_asset.rb', line 22 def write_to(filename, = {}) # Gzip contents if filename has '.gz' [:compress] ||= File.extname(filename) == '.gz' FileUtils.mkdir_p File.dirname(filename) if [: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 |