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.
This commit is contained in:
parent
f07cbec865
commit
959f8576f2
@ -546,7 +546,6 @@ 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
|
||||
@ -555,6 +554,7 @@ def load_seed
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
protected
|
||||
def routes?
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user