Module: RackPipeline::Caching

Included in:
Base
Defined in:
lib/rack-pipeline/caching.rb

Instance Method Summary collapse

Instance Method Details

#cache_target(source, target) ⇒ Object



6
7
8
9
10
11
12
13
14
# File 'lib/rack-pipeline/caching.rb', line 6

def cache_target(source, target)
  target_path = File.join(settings[:temp], "#{File.basename(target)}.#{calculate_hash(source)}#{File.extname(target)}")
  if File.file?(target_path)
    target_path
  else
    cleanup_cache(target)
    yield target_path
  end
end

#calculate_hash(sources) ⇒ Object



31
32
33
# File 'lib/rack-pipeline/caching.rb', line 31

def calculate_hash(sources)
  Digest::MD5.hexdigest(Array(sources).inject(''){ |all,(file,_)| all << "#{file}:#{File.mtime(file).to_i}" })
end

#cleanup_cache(target) ⇒ Object



27
28
29
# File 'lib/rack-pipeline/caching.rb', line 27

def cleanup_cache(target)
  FileUtils.rm Dir.glob(File.join(settings[:temp], File.basename(target)) + '.*')
end

#create_temp_directoryObject



16
17
18
19
20
21
22
23
24
25
# File 'lib/rack-pipeline/caching.rb', line 16

def create_temp_directory
  temp = if settings[:temp]
    settings[:temp]
  else
    require 'tmpdir'
    File.join(Dir.tmpdir, 'RackPipeline')
  end
  FileUtils.mkdir_p temp
  settings[:temp] = temp
end