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
|
class RailsAssets::RailsRunner
|
||||||
@@rails_booted = false # Only one rails app is allowed, so make it a class var
|
@@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
|
end
|
||||||
|
|
||||||
# Methods to run the asset pipeline
|
# Methods to run the asset pipeline
|
||||||
# See as a reference https://github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake
|
# 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
|
return if @@rails_booted
|
||||||
puts "------------BOOTING RAILS"
|
puts "Booting Rails for #{@@rails_env} environment."
|
||||||
|
apply_hacks
|
||||||
require 'rake'
|
require 'rake'
|
||||||
require "#{Dir.pwd}/config/environment.rb"
|
require "#{Dir.pwd}/config/environment.rb"
|
||||||
app = ::Rails.application
|
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
|
app.load_tasks
|
||||||
@@rails_booted = true
|
@@rails_booted = true
|
||||||
puts "-- BOOTED after?=#{@@rails_booted}"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -27,7 +43,7 @@ module Guard
|
|||||||
#
|
#
|
||||||
# @return [ Boolean ] Whether the compilation was successful or not
|
# @return [ Boolean ] Whether the compilation was successful or not
|
||||||
def compile_assets
|
def compile_assets
|
||||||
boot_rails
|
self.class.boot_rails
|
||||||
return false unless @@rails_booted
|
return false unless @@rails_booted
|
||||||
begin
|
begin
|
||||||
Rake::Task['assets:clean'].execute
|
Rake::Task['assets:clean'].execute
|
||||||
|
@ -2,70 +2,7 @@ require 'spec_helper'
|
|||||||
|
|
||||||
describe Guard::RailsAssets::RailsRunner do
|
describe Guard::RailsAssets::RailsRunner do
|
||||||
|
|
||||||
subject { Guard::RailsAssets::RailsRunner.new({}) }
|
it 'should be tested properly as a Rails engine'
|
||||||
|
|
||||||
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 respond_to :compile_assets }
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user