compass/test/helpers/rails.rb

56 lines
2.0 KiB
Ruby

module Compass
module RailsHelper
def generate_rails_app_directories(name)
Dir.mkdir name
Dir.mkdir File.join(name, "config")
Dir.mkdir File.join(name, "config", "initializers")
Dir.mkdir File.join(name, "tmp")
end
# Generate a rails application without polluting our current set of requires
# with the rails libraries. This will allow testing against multiple versions of rails
# by manipulating the load path.
def generate_rails_app(name, dir = nil)
if pid = fork
Process.wait(pid)
if $?.exitstatus == 2
raise LoadError, "Couldn't load rails"
elsif $?.exitstatus != 0
raise "Failed to generate rails application."
end
else
begin
require 'action_pack/version'
if ActionPack::VERSION::MAJOR >= 3
require 'rails/generators'
require 'rails/generators/rails/app/app_generator'
require 'mocha'
dir ||= File.join(File.expand_path('../../', __FILE__))
args = [File.join(dir, name), '-q', '-f', '--skip-bundle', '--skip-gemfile']
#stub this so you can generate more apps
Rails::Generators::AppGenerator.any_instance.stubs(:valid_const?).returns(true)
Rails::Generators::AppGenerator.start(args, {:destination_root => dir})
else
require 'rails/version'
require 'rails_generator'
require 'rails_generator/scripts/generate'
Rails::Generator::Base.use_application_sources!
capture_output do
Rails::Generator::Base.logger = Rails::Generator::SimpleLogger.new $stdout
Rails::Generator::Scripts::Generate.new.run([name], :generator => 'app')
end
end
rescue LoadError
Kernel.exit!(2)
rescue => e
$stderr.puts e
Kernel.exit!(1)
end
Kernel.exit!(0)
end
end
end
end