Permalink
Browse files

update for Rails 3.1.1

  • Loading branch information...
1 parent b02458e commit e758a18f709ba11147f054fc6f2b2d3b91f8bc40 @dnagir committed Oct 3, 2011
Showing with 47 additions and 13 deletions.
  1. +1 −0 .gitignore
  2. +1 −1 guard-rails-assets.gemspec
  3. +44 −11 lib/guard/rails-assets/rails_runner.rb
  4. +1 −1 lib/guard/version.rb
View
@@ -1,3 +1,4 @@
+.DS_Store
pkg/*
*.gem
*.rbc
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
s.add_dependency 'guard'
s.add_dependency 'rake'
- s.add_dependency 'rails', '>= 3.1.0'
+ s.add_dependency 'rails', '>= 3.1.1.rc2'
s.add_development_dependency 'rspec'
s.files = `git ls-files`.split("\n")
@@ -2,6 +2,8 @@
module Guard
class RailsAssets::RailsRunner
+ include Rake::DSL
+
@@rails_booted = false # Only one rails app is allowed, so make it a class var
@@rails_env = nil
@@ -13,21 +15,15 @@ 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 Rake task can't be run multiple times
- 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 self.boot_rails
return if @@rails_booted
puts "Booting Rails for #{@@rails_env} environment."
+ require "fileutils"
+
apply_hacks
require 'rake'
require "#{Dir.pwd}/config/environment.rb"
@@ -39,20 +35,57 @@ def self.boot_rails
end
+ def clean
+ Rake::Task["tmp:cache:clear"].execute
+ # copy from the "assets:clean" Rake task
+ config = ::Rails.application.config
+ public_asset_path = File.join(Rails.public_path, config.assets.prefix)
+ rm_rf public_asset_path, :secure => true
+ end
+
+ def precompile
+ # copy from the "assets:precompile" Rake task
+
+ # Ensure that action view is loaded and the appropriate sprockets hooks get executed
+ ActionView::Base
+
+ config = ::Rails.application.config
+ config.assets.compile = true
+
+ env = ::Rails.application.assets
+
+ # Always compile files and avoid use of existing precompiled assets
+ config.assets.compile = true
+ config.assets.digests = {}
+
+ target = File.join(::Rails.public_path, config.assets.prefix)
+ static_compiler = Sprockets::StaticCompiler.new(env, target, :digest => config.assets.digest)
+
+ manifest = static_compiler.precompile(config.assets.precompile)
+ manifest_path = config.assets.manifest || target
+ FileUtils.mkdir_p(manifest_path)
+
+ File.open("#{manifest_path}/manifest.yml", 'wb') do |f|
+ YAML.dump(manifest, f)
+ end
+ end
+
+
# Runs the asset pipeline compiler.
#
# @return [ Boolean ] Whether the compilation was successful or not
def compile_assets
self.class.boot_rails
return false unless @@rails_booted
begin
- Rake::Task['assets:clean'].execute
- ::Rails.application.assets.instance_eval { expire_index! }
- Rake::Task['assets:precompile'].execute
+ clean
+ precompile
true
rescue => e
puts "An error occurred compiling assets: #{e}"
false
+ ensure
+ ::Rails.application.assets.instance_eval { expire_index! }
end
end
end
View
@@ -1,5 +1,5 @@
module Guard
module RailsAssetsVersion
- VERSION = "0.0.8"
+ VERSION = "0.0.9"
end
end

0 comments on commit e758a18

Please sign in to comment.