Module: Sprockets::ManifestUtils
- Extended by:
- ManifestUtils
- Included in:
- Manifest, ManifestUtils
- Defined in:
- lib/sprockets/manifest_utils.rb
Overview
Public: Manifest utilities.
Constant Summary collapse
- MANIFEST_RE =
/^\.sprockets-manifest-[0-9a-f]{32}.json$/
Instance Method Summary collapse
-
#find_directory_manifest(dirname, logger = Logger.new($stderr)) ⇒ Object
Public: Find or pick a new manifest filename for target build directory.
-
#generate_manifest_path ⇒ Object
Public: Generate a new random manifest path.
Instance Method Details
#find_directory_manifest(dirname, logger = Logger.new($stderr)) ⇒ Object
Public: Find or pick a new manifest filename for target build directory.
dirname - String dirname
Examples
find_directory_manifest("/app/public/assets")
# => "/app/public/assets/.sprockets-manifest-abc123.json"
Returns String filename.
37 38 39 40 41 42 43 44 45 46 |
# File 'lib/sprockets/manifest_utils.rb', line 37 def find_directory_manifest(dirname, logger = Logger.new($stderr)) entries = File.directory?(dirname) ? Dir.entries(dirname) : [] manifest_entries = entries.select { |e| e =~ MANIFEST_RE } if manifest_entries.length > 1 manifest_entries.sort! logger.warn("Found multiple manifests: #{manifest_entries}. Choosing the first alphabetically: #{manifest_entries.first}") end entry = manifest_entries.first || generate_manifest_path File.join(dirname, entry) end |
#generate_manifest_path ⇒ Object
Public: Generate a new random manifest path.
Manifests are not intended to be accessed publicly, but typically live alongside public assets for convenience. To avoid being served, the filename is prefixed with a “.” which is usually hidden by web servers like Apache. To help in other environments that may not control this, a random hex string is appended to the filename to prevent people from guessing the location. If directory indexes are enabled on the server, all bets are off.
Return String path.
23 24 25 |
# File 'lib/sprockets/manifest_utils.rb', line 23 def generate_manifest_path ".sprockets-manifest-#{SecureRandom.hex(16)}.json" end |