82 lines
2.0 KiB
Ruby
82 lines
2.0 KiB
Ruby
require 'rake/dsl_definition'
|
|
module Guard
|
|
|
|
class RailsAssets::RailsRunner
|
|
|
|
def initialize(options)
|
|
|
|
end
|
|
|
|
# Methods to run the asset pipeline
|
|
# Taken from - https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake
|
|
module AssetPipeline
|
|
extend self
|
|
extend Rake::DSL
|
|
|
|
def clean
|
|
assets = ::Rails.application.config.assets
|
|
public_asset_path = File.join(::Rails.public_path, assets.prefix)
|
|
rm_rf public_asset_path, :secure => true
|
|
end
|
|
|
|
def precompile
|
|
Sprockets::Helpers::RailsHelper
|
|
::ActionView::Base
|
|
|
|
config = ::Rails.application.config
|
|
env = ::Rails.application.assets
|
|
target = ::Rails.root.join("public#{config.assets.prefix}")
|
|
|
|
config.assets.precompile.each do |path|
|
|
env.each_logical_path do |logical_path|
|
|
if path.is_a?(::Regexp)
|
|
next unless path.match(logical_path)
|
|
else
|
|
next unless ::File.fnmatch(path.to_s, logical_path)
|
|
end
|
|
|
|
if asset = env.find_asset(logical_path)
|
|
filename = target.join(asset.digest_path)
|
|
mkdir_p filename.dirname
|
|
asset.write_to(filename)
|
|
asset.write_to("#{filename}.gz") if filename.to_s =~ /\.(css|js)$/
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def boot_rails
|
|
@rails_booted ||= begin
|
|
require "#{Dir.pwd}/config/environment.rb"
|
|
true
|
|
end
|
|
end
|
|
|
|
def run_compiler
|
|
begin
|
|
@failed = false
|
|
AssetPipeline.clean
|
|
AssetPipeline.precompile
|
|
rescue => e
|
|
puts "An error occurred compiling assets: #{e}"
|
|
@failed = true
|
|
end
|
|
end
|
|
|
|
# Runs the asset pipeline compiler.
|
|
#
|
|
# @return [ Boolean ] Whether the compilation was successful or not
|
|
def compile_assets
|
|
boot_rails
|
|
run_compiler
|
|
|
|
!failed?
|
|
end
|
|
|
|
def failed?
|
|
@failed
|
|
end
|
|
end
|
|
end
|