class Propshaft::LoadPath
Attributes
paths[R]
version[R]
Public Class Methods
new(paths = [], version: nil)
click to toggle source
# File lib/propshaft/load_path.rb, line 6 def initialize(paths = [], version: nil) @paths = dedup(paths) @version = version end
Public Instance Methods
assets(content_types: nil)
click to toggle source
# File lib/propshaft/load_path.rb, line 15 def assets(content_types: nil) if content_types assets_by_path.values.select { |asset| asset.content_type.in?(content_types) } else assets_by_path.values end end
cache_sweeper()
click to toggle source
Returns a ActiveSupport::FileUpdateChecker object configured to clear the cache of the load_path when the directories passed during its initialization have changes. This is used in development and test to ensure the map caches are reset when javascript files are changed.
# File lib/propshaft/load_path.rb, line 34 def cache_sweeper @cache_sweeper ||= begin exts_to_watch = Mime::EXTENSION_LOOKUP.map(&:first) files_to_watch = Array(paths).collect { |dir| [ dir.to_s, exts_to_watch ] }.to_h Rails.application.config.file_watcher.new([], files_to_watch) do clear_cache end end end
find(asset_name)
click to toggle source
# File lib/propshaft/load_path.rb, line 11 def find(asset_name) assets_by_path[asset_name] end
manifest()
click to toggle source
# File lib/propshaft/load_path.rb, line 23 def manifest Hash.new.tap do |manifest| assets.each do |asset| manifest[asset.logical_path.to_s] = asset.digested_path.to_s end end end
Private Instance Methods
all_files_from_tree(path)
click to toggle source
# File lib/propshaft/load_path.rb, line 57 def all_files_from_tree(path) path.children.flat_map { |child| child.directory? ? all_files_from_tree(child) : child } end
assets_by_path()
click to toggle source
# File lib/propshaft/load_path.rb, line 46 def assets_by_path @cached_assets_by_path ||= Hash.new.tap do |mapped| paths.each do |path| without_dotfiles(all_files_from_tree(path)).each do |file| logical_path = file.relative_path_from(path) mapped[logical_path.to_s] ||= Propshaft::Asset.new(file, logical_path: logical_path, version: version) end if path.exist? end end end
clear_cache()
click to toggle source
# File lib/propshaft/load_path.rb, line 65 def clear_cache @cached_assets_by_path = nil end
dedup(paths)
click to toggle source
# File lib/propshaft/load_path.rb, line 69 def dedup(paths) paths = Array(paths).map { |path| Pathname.new(path) } deduped = [].tap do |deduped| paths.sort.each { |path| deduped << path if deduped.blank? || !path.to_s.start_with?(deduped.last.to_s) } end paths & deduped end
without_dotfiles(files)
click to toggle source
# File lib/propshaft/load_path.rb, line 61 def without_dotfiles(files) files.reject { |file| file.basename.to_s.starts_with?(".") } end