Module: Middleman::Features::CacheBuster

Defined in:
lib/middleman/features/cache_buster.rb

Class Method Summary collapse

Class Method Details

.registered(app) ⇒ Object Also known as: included



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/middleman/features/cache_buster.rb', line 3

def registered(app)
  Middleman::Assets.register :cache_buster do |path, prefix, request|
    http_path = Middleman::Assets.before(:cache_buster, path, prefix, request)

    if http_path.include?("://") || !%w(.css .png .jpg .js .gif).include?(File.extname(http_path))
      http_path
    else
      begin
        prefix = Middleman::Server.images_dir if prefix == Middleman::Server.http_images_path
      rescue
      end

      real_path_static  = File.join(Middleman::Server.public, prefix, path)

      if File.readable?(real_path_static)
        http_path << "?" + File.mtime(real_path_static).strftime("%s") 
      elsif Middleman::Server.environment == :build
        real_path_dynamic = File.join(Middleman::Server.root, Middleman::Server.build_dir, prefix, path)
        http_path << "?" + File.mtime(real_path_dynamic).strftime("%s") if File.readable?(real_path_dynamic)
      end

      http_path
    end
  end

  app.after_feature_init do 
    ::Compass.configuration do |config|
      config.asset_cache_buster do |path, real_path|
        real_path = real_path.path if real_path.is_a? File
        real_path = real_path.gsub(File.join(Middleman::Server.root, Middleman::Server.build_dir), Middleman::Server.public)
        if File.readable?(real_path)
          File.mtime(real_path).strftime("%s") 
        else
          $stderr.puts "WARNING: '#{File.basename(path)}' was not found (or cannot be read) in #{File.dirname(real_path)}"
        end
      end
    end
  end
end