Module: RackPipeline::Caching
- Included in:
- Base
- Defined in:
- lib/rack-pipeline/caching.rb
Instance Method Summary collapse
- #cache_target(source, target) ⇒ Object
- #calculate_hash(sources) ⇒ Object
- #cleanup_cache(target) ⇒ Object
- #ensure_temp_directory ⇒ Object
Instance Method Details
#cache_target(source, target) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/rack-pipeline/caching.rb', line 6 def cache_target(source, target) ensure_temp_directory caller_method = caller.first[/`([^']*)'/, 1] extname = File.extname(target) target_filename = File.basename(target).sub(/[0-9a-f]{32}\./,'').chomp(extname) << '.' << caller_method target_path = File.join(settings[:temp], target_filename + '.' << calculate_hash(source) << extname) if File.file?(target_path) target_path else cleanup_cache(target_filename << '.*' << extname) yield target_path end end |
#calculate_hash(sources) ⇒ Object
36 37 38 |
# File 'lib/rack-pipeline/caching.rb', line 36 def calculate_hash(sources) Digest::MD5.hexdigest(Array(sources).inject(''){ |all,(file,_)| all << file << File.mtime(file).to_i.to_s }) end |
#cleanup_cache(target) ⇒ Object
31 32 33 34 |
# File 'lib/rack-pipeline/caching.rb', line 31 def cleanup_cache(target) @busted = true FileUtils.rm Dir.glob(File.join(settings[:temp], target)) end |
#ensure_temp_directory ⇒ Object
20 21 22 23 24 25 26 27 28 29 |
# File 'lib/rack-pipeline/caching.rb', line 20 def ensure_temp_directory temp = settings[:temp] return temp if temp.kind_of?(String) && File.directory?(temp) unless temp require 'tmpdir' temp = File.join(Dir.tmpdir, 'RackPipeline') end FileUtils.mkdir_p temp settings[:temp] = temp end |