make it work with Rails 3.1 final
This commit is contained in:
parent
c69f31008f
commit
4c527de684
@ -3,23 +3,39 @@ module Guard
|
||||
|
||||
class RailsAssets::RailsRunner
|
||||
@@rails_booted = false # Only one rails app is allowed, so make it a class var
|
||||
@@rails_env = nil
|
||||
|
||||
def initialize(options)
|
||||
def initialize(options={})
|
||||
@@rails_env = (options[:rails_env] || 'test').to_s unless @@rails_booted
|
||||
end
|
||||
|
||||
def self.apply_hacks
|
||||
# TODO: Hack due to Rails 3.1 issue: https://github.com/rails/rails/issues/2663#issuecomment-1990121
|
||||
ENV["RAILS_GROUPS"] ||= "assets"
|
||||
ENV["RAILS_ENV"] ||= @@rails_env
|
||||
|
||||
# TODO: Now another hack: Rails replaces Rails.application.assets with Rails.applciation.assets.index
|
||||
# (this happens when config.action_controller.perform_caching is true)
|
||||
# It caches all the assets, so that the Rakse task can't be reused
|
||||
require 'sprockets/environment'
|
||||
Sprockets::Environment.class_eval do
|
||||
def index; self; end # instead of Index.new(self)
|
||||
end
|
||||
end
|
||||
|
||||
# Methods to run the asset pipeline
|
||||
# See as a reference https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake
|
||||
def boot_rails
|
||||
def self.boot_rails
|
||||
return if @@rails_booted
|
||||
puts "------------BOOTING RAILS"
|
||||
puts "Booting Rails for #{@@rails_env} environment."
|
||||
apply_hacks
|
||||
require 'rake'
|
||||
require "#{Dir.pwd}/config/environment.rb"
|
||||
app = ::Rails.application
|
||||
puts "--- CACHE=#{app.assets.cache}"
|
||||
app.assets.cache = nil
|
||||
|
||||
app.assets.cache = nil # don't touch my FS pls. (can we use `app.config.assets.cache_store = false` instead)?
|
||||
app.load_tasks
|
||||
@@rails_booted = true
|
||||
puts "-- BOOTED after?=#{@@rails_booted}"
|
||||
end
|
||||
|
||||
|
||||
@ -27,7 +43,7 @@ module Guard
|
||||
#
|
||||
# @return [ Boolean ] Whether the compilation was successful or not
|
||||
def compile_assets
|
||||
boot_rails
|
||||
self.class.boot_rails
|
||||
return false unless @@rails_booted
|
||||
begin
|
||||
Rake::Task['assets:clean'].execute
|
||||
|
@ -2,70 +2,7 @@ require 'spec_helper'
|
||||
|
||||
describe Guard::RailsAssets::RailsRunner do
|
||||
|
||||
subject { Guard::RailsAssets::RailsRunner.new({}) }
|
||||
|
||||
describe ".compile_assets" do
|
||||
|
||||
let(:asset_pipeline) { Guard::RailsAssets::RailsRunner::AssetPipeline }
|
||||
|
||||
before do
|
||||
described_class.class_eval do
|
||||
def boot_rails
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "successful compile" do
|
||||
before do
|
||||
asset_pipeline.stub(:clean)
|
||||
asset_pipeline.stub(:precompile)
|
||||
end
|
||||
|
||||
it "cleans the assets" do
|
||||
asset_pipeline.should_receive(:clean)
|
||||
subject.compile_assets
|
||||
end
|
||||
|
||||
it "runs the compiler" do
|
||||
asset_pipeline.should_receive(:precompile)
|
||||
subject.compile_assets
|
||||
end
|
||||
|
||||
it "returns true" do
|
||||
subject.compile_assets.should be_true
|
||||
end
|
||||
end
|
||||
|
||||
context "with a compilation error" do
|
||||
|
||||
before do
|
||||
asset_pipeline.stub(:clean)
|
||||
asset_pipeline.should_receive(:precompile).and_raise(StandardError)
|
||||
@output = capture(:stdout) do
|
||||
@result = subject.compile_assets
|
||||
end
|
||||
end
|
||||
|
||||
it "outputs the error" do
|
||||
@output.should include("An error occurred")
|
||||
end
|
||||
|
||||
it "returns false" do
|
||||
@result.should be_false
|
||||
end
|
||||
|
||||
context "on next successful compile" do
|
||||
|
||||
it "works" do
|
||||
asset_pipeline.should_receive(:clean)
|
||||
asset_pipeline.should_receive(:precompile)
|
||||
subject.compile_assets.should be_true
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
it 'should be tested properly as a Rails engine'
|
||||
|
||||
it { should respond_to :compile_assets }
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user