Permalink
Browse files

Added foo:install:assets task that copies assets from plugins public …

…directory to application's public directory

This is the most simple and naive approach: just copy every files from engine to app.
The only exception is when file has changed, in that case developer will be
asked if he wants to rename the field.

There is no need to make this task more sophisticated as 3.1 will be shipped
with better assets handling and it will be the default way to handle things.
  • Loading branch information...
1 parent f07cbec commit 959f8576f2b70c35a2fd5c2c9563e695977f37b6 @drogus drogus committed with josevalim Oct 13, 2010
Showing with 47 additions and 5 deletions.
  1. +5 −5 railties/lib/rails/engine.rb
  2. +28 −0 railties/lib/rails/tasks/railties.rake
  3. +14 −0 railties/test/railties/shared_tests.rb
@@ -546,12 +546,12 @@ def load_seed
ENV["FROM"] = railtie_name
Rake::Task["railties:install:migrations"].invoke
end
- end
- desc "Copy assets from #{railtie_name} to application"
- task :assets do
- ENV["FROM"] = railtie_name
- Rake::Task["railties:install:assets"].invoke
+ desc "Copy assets from #{railtie_name} to application"
+ task :assets do
+ ENV["FROM"] = railtie_name
+ Rake::Task["railties:install:assets"].invoke
+ end
end
end
end
@@ -17,4 +17,32 @@ namespace :railties do
puts "Created symlink #{symlink_path} -> #{path}"
end
end
+
+ namespace :install do
+ desc "Copies missing assets from Railties (e.g. plugins, engines). You can specify Railties to use with FROM=railtie1,railtie2"
+ task :assets => :rails_env do
+ require 'rails/generators/base'
+ Rails.application.initialize!
+
+ to_load = ENV["FROM"].blank? ? :all : ENV["FROM"].split(",").map {|n| n.strip }
+ app_public_path = Rails.application.paths["public"].first
+
+ Rails.application.railties.all do |railtie|
+ next unless to_load == :all || to_load.include?(railtie.railtie_name)
+
+ if railtie.respond_to?(:paths) && (path = railtie.paths["public"].first) &&
+ (assets_dir = railtie.config.compiled_asset_path) && File.exist?(path)
+
+ Rails::Generators::Base.source_root(path)
+ copier = Rails::Generators::Base.new
+ Dir[File.join(path, "**/*")].each do |file|
+ relative = file.gsub(/^#{path}\//, '')
+ if File.file?(file)
+ copier.copy_file relative, File.join(app_public_path, assets_dir, relative)
+ end
+ end
+ end
+ end
+ end
+ end
end
@@ -10,6 +10,20 @@ def app
@app ||= Rails.application
end
+ def test_copying_assets
+ @plugin.write "public/javascripts/foo.js", "doSomething()"
+ @plugin.write "public/stylesheets/foo.css", "h1 { font-size: 10000px }"
+ @plugin.write "public/images/img.png", ""
+
+ Dir.chdir(app_path) do
+ `rake bukkits:install:assets --trace`
+
+ assert File.exists?(app_path("public/bukkits/javascripts/foo.js"))
+ assert File.exists?(app_path("public/bukkits/stylesheets/foo.css"))
+ assert File.exists?(app_path("public/bukkits/images/img.png"))
+ end
+ end
+
def test_copying_migrations
@plugin.write "db/migrate/1_create_users.rb", <<-RUBY
class CreateUsers < ActiveRecord::Migration

0 comments on commit 959f857

Please sign in to comment.