rails installer for compass
This commit is contained in:
parent
341979d937
commit
ca82bca962
@ -17,7 +17,8 @@ module Compass
|
||||
File.join(project_directory, separate(path))
|
||||
end
|
||||
# create a directory and all the directories necessary to reach it.
|
||||
def directory(subdir, options)
|
||||
def directory(subdir, options = nil)
|
||||
options ||= self.options
|
||||
dir = subdir ? projectize(subdir) : project_directory
|
||||
if File.exists?(dir) && File.directory?(dir) && options[:force]
|
||||
print_action :exists, basename(dir) + File::SEPARATOR
|
||||
@ -49,6 +50,21 @@ module Compass
|
||||
FileUtils.cp from, to unless options[:dry_run]
|
||||
end
|
||||
|
||||
def write_file(file_name, contents)
|
||||
if File.exists?(file_name) && !options[:force]
|
||||
msg = "File #{basename(file_name)} already exists. Run with --force to force creation."
|
||||
raise ::Compass::Exec::ExecError.new(msg)
|
||||
end
|
||||
if File.exists?(file_name)
|
||||
print_action :overwrite, basename(file_name)
|
||||
else
|
||||
print_action :create, basename(file_name)
|
||||
end
|
||||
output = open(file_name,'w')
|
||||
output.write(contents)
|
||||
output.close
|
||||
end
|
||||
|
||||
# returns the path to the templates directory and caches it
|
||||
def templates_directory
|
||||
@templates_directory ||= File.expand_path(File.join(File.dirname(__FILE__), separate("../../../frameworks/#{options[:framework]}/templates")))
|
||||
@ -67,7 +83,7 @@ module Compass
|
||||
end
|
||||
end
|
||||
|
||||
ACTIONS = [:directory, :exists, :remove, :create]
|
||||
ACTIONS = [:directory, :exists, :remove, :create, :overwrite]
|
||||
MAX_ACTION_LENGTH = ACTIONS.inject(0){|memo, a| [memo, a.to_s.length].max}
|
||||
def print_action(action, extra)
|
||||
puts "#{' ' * (MAX_ACTION_LENGTH - action.to_s.length)}#{action} #{extra}" if !options[:quiet] || options[:dry_run]
|
||||
|
115
lib/compass/commands/install_rails.rb
Normal file
115
lib/compass/commands/install_rails.rb
Normal file
@ -0,0 +1,115 @@
|
||||
require File.join(File.dirname(__FILE__), 'base')
|
||||
|
||||
module Compass
|
||||
module Commands
|
||||
class InstallRails < Base
|
||||
def initialize(working_directory, options)
|
||||
super(working_directory, options)
|
||||
end
|
||||
def perform
|
||||
set_install_location
|
||||
set_output_location
|
||||
directory options[:stylesheets_location]
|
||||
template 'project/screen.sass', "#{options[:stylesheets_location]}/screen.sass", options
|
||||
template 'project/print.sass', "#{options[:stylesheets_location]}/print.sass", options
|
||||
template 'project/ie.sass', "#{options[:stylesheets_location]}/ie.sass", options
|
||||
write_file projectize('config/initializers/compass.rb'), initializer_contents
|
||||
if has_application_layout?
|
||||
next_steps
|
||||
else
|
||||
write_file projectize('app/views/layouts/application.html.haml'), application_layout_contents
|
||||
end
|
||||
end
|
||||
|
||||
def initializer
|
||||
init_file =
|
||||
if File.exists?(init_file) && !options[:force]
|
||||
msg = "File #{basename(init_file)} already exists. Run with --force to force project creation."
|
||||
raise ::Compass::Exec::ExecError.new(msg)
|
||||
end
|
||||
if File.exists?(init_file)
|
||||
print_action :overwrite, basename(init_file)
|
||||
else
|
||||
print_action :create, basename(init_file)
|
||||
end
|
||||
output = open(init_file,'w')
|
||||
output.write(initializer_contents)
|
||||
output.close
|
||||
end
|
||||
|
||||
def initializer_contents
|
||||
%Q{require 'compass'
|
||||
# If you have any compass plugins, require them here.
|
||||
Sass::Plugin.options[:template_location] = {
|
||||
"\#{RAILS_ROOT}#{File::SEPARATOR}#{options[:stylesheets_location]}" => "\#{RAILS_ROOT}#{File::SEPARATOR}#{options[:css_location]}"
|
||||
}
|
||||
Compass::Frameworks::ALL.each do |framework|
|
||||
Sass::Plugin.options[:template_location][framework.stylesheets_directory] = "\#{RAILS_ROOT}/public/stylesheets/#{File::SEPARATOR}#{options[:css_location]}/\#{framework.name}"
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
def application_layout_contents
|
||||
%Q{!!! XML
|
||||
!!!
|
||||
%html{:xmlns => "http://www.w3.org/1999/xhtml", "xml:lang" => "en", :lang => "en"}
|
||||
%head
|
||||
%meta{'http-equiv' => "content-type", :content => "text/html;charset=UTF-8"}
|
||||
%title= @browser_title || 'Default Browser Title'
|
||||
= stylesheet_link_tag '#{stylesheet_prefix}screen.css', :media => 'print'
|
||||
= stylesheet_link_tag '#{stylesheet_prefix}print.css', :media => 'print'
|
||||
/[if IE]
|
||||
= stylesheet_link_tag '#{stylesheet_prefix}ie.css', :media => 'screen, projection'
|
||||
%body
|
||||
%h1 Welcome to Compass
|
||||
= yield
|
||||
}
|
||||
end
|
||||
|
||||
def next_steps
|
||||
puts <<NEXTSTEPS
|
||||
|
||||
Congratulations! Your project has been configured to use Compass.
|
||||
Next add these lines to the head of your application.html.haml:
|
||||
|
||||
%head
|
||||
= stylesheet_link_tag '#{stylesheet_prefix}screen.css', :media => 'print'
|
||||
= stylesheet_link_tag '#{stylesheet_prefix}print.css', :media => 'print'
|
||||
/[if IE]
|
||||
= stylesheet_link_tag '#{stylesheet_prefix}ie.css', :media => 'screen, projection'
|
||||
|
||||
(you are using haml, aren't you?)
|
||||
NEXTSTEPS
|
||||
end
|
||||
|
||||
def has_application_layout?
|
||||
File.exists?(projectize('app/views/layouts/application.rhtml')) ||
|
||||
File.exists?(projectize('app/views/layouts/application.html.erb')) ||
|
||||
File.exists?(projectize('app/views/layouts/application.html.haml'))
|
||||
end
|
||||
|
||||
def stylesheet_prefix
|
||||
if options[:css_location].length >= 19
|
||||
"#{options[:css_location][19..-1]}/"
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
def project_directory
|
||||
working_directory
|
||||
end
|
||||
|
||||
def set_install_location
|
||||
print "Compass recommends that you keep your stylesheets in app/stylesheets/ instead of the Sass default location of public/stylesheets/sass/.\nIs this OK? (Y/n) "
|
||||
answer = gets
|
||||
self.options[:stylesheets_location] = separate(answer.downcase[0] == ?n ? 'public/stylesheets/sass' : 'app/stylesheets')
|
||||
end
|
||||
def set_output_location
|
||||
print "\nCompass recommends that you keep your compiled css in public/stylesheets/compiled/ instead the Sass default of public/stylesheets/.\nHowever, if you're exclusively using Sass, then public/stylesheets/ is recommended.\nEmit compiled stylesheets to public/stylesheets/compiled? (Y/n) "
|
||||
answer = gets
|
||||
self.options[:css_location] = separate(answer.downcase[0] == ?n ? 'public/stylesheets' : 'public/stylesheets/compiled')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -85,6 +85,10 @@ END
|
||||
self.options[:style] = style
|
||||
end
|
||||
|
||||
opts.on('--rails', "Install compass into your Ruby on Rails project found in the current directory.") do
|
||||
self.options[:command] = :install_rails
|
||||
end
|
||||
|
||||
opts.on('-q', '--quiet', :NONE, 'Quiet mode.') do
|
||||
self.options[:quiet] = true
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user