Skip to content

Instantly share code, notes, and snippets.

@steveh
Created September 7, 2016 00:21
Show Gist options
  • Save steveh/6b97129a41d44a401cb5cb1ea60f213f to your computer and use it in GitHub Desktop.
Save steveh/6b97129a41d44a401cb5cb1ea60f213f to your computer and use it in GitHub Desktop.
require "fileutils"
Rake::Task["assets:precompile"].enhance do
Rake::Task["assets:precompile:partner"].invoke
end
Rake::Task["assets:clobber"].enhance ["assets:clobber:partner"]
namespace :assets do
# try to log like Sprockets even though their stuff is all private
def log(msg)
STDERR.puts msg
Rails.logger.info(msg) if Rails.respond_to?(:logger) && Rails.logger
end
def partner
ENV["PARTNER"] || "example"
end
def base_path
Rails.root.join("public", "assets", partner)
end
def match_pattern
/(.+)-[0-9a-f]{64}(.+)/
end
def patterns
["*.html", "*.ico"]
end
def partner_files
patterns.each do |pattern|
files = Dir[base_path + pattern]
groups = files.group_by do |file|
match = File.basename(file).match(match_pattern)
match[1..2].join("")
end
groups.each do |key, group|
src = group.sort_by { |file| File.mtime(file) }.last
dst = Rails.root.join("public", key)
yield src, dst
end
end
end
namespace :precompile do
desc "Copy the newest error page assets into /public"
task :partner do
partner_files do |src,dst|
log "copy #{src} to #{dst}"
FileUtils.cp src, dst
end
end
end
namespace :clobber do
desc "Remove the error page assets in /public"
task :partner do
partner_files do |src,dst|
log "clobber #{dst}"
FileUtils.rm_f dst
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment