Factored out an Actions module for doing the filesystem actions like copying, making directories, etc.
This commit is contained in:
parent
98a2f0538b
commit
dbc262fbe1
72
lib/compass/actions.rb
Normal file
72
lib/compass/actions.rb
Normal file
@ -0,0 +1,72 @@
|
||||
module Compass
|
||||
module Actions
|
||||
|
||||
attr_writer :logger
|
||||
|
||||
def logger
|
||||
@logger ||= Logger.new
|
||||
end
|
||||
|
||||
# copy/process a template in the compass template directory to the project directory.
|
||||
def copy(from, to, options = nil)
|
||||
options ||= self.options if self.respond_to?(:options)
|
||||
if File.exists?(to) && !options[:force]
|
||||
#TODO: Detect differences & provide an overwrite prompt
|
||||
msg = "#{basename(to)} already exists."
|
||||
raise InstallationError.new(msg)
|
||||
elsif File.exists?(to)
|
||||
logger.record :overwrite, basename(to)
|
||||
FileUtils.rm to unless options[:dry_run]
|
||||
FileUtils.cp from, to unless options[:dry_run]
|
||||
else
|
||||
logger.record :create, basename(to)
|
||||
FileUtils.cp from, to unless options[:dry_run]
|
||||
end
|
||||
end
|
||||
|
||||
# create a directory and all the directories necessary to reach it.
|
||||
def directory(dir, options = nil)
|
||||
options ||= self.options if self.respond_to?(:options)
|
||||
if File.exists?(dir) && File.directory?(dir)
|
||||
logger.record :exists, basename(dir)
|
||||
elsif File.exists?(dir)
|
||||
msg = "#{basename(dir)} already exists and is not a directory."
|
||||
raise InstallationError.new(msg)
|
||||
else
|
||||
logger.record :directory, basename(dir)
|
||||
FileUtils.mkdir_p(dir) unless options[:dry_run]
|
||||
end
|
||||
end
|
||||
|
||||
def write_file(file_name, contents, options = nil)
|
||||
options ||= self.options if self.respond_to?(:options)
|
||||
if File.exists?(file_name) && !options[:force]
|
||||
msg = "File #{basename(file_name)} already exists. Run with --force to force creation."
|
||||
raise InstallationError.new(msg)
|
||||
end
|
||||
if File.exists?(file_name)
|
||||
logger.record :overwrite, basename(file_name)
|
||||
else
|
||||
logger.record :create, basename(file_name)
|
||||
end
|
||||
open(file_name,'w') do |file|
|
||||
file.write(contents)
|
||||
end
|
||||
end
|
||||
|
||||
def basename(file)
|
||||
relativize(file) {|f| File.basename(file)}
|
||||
end
|
||||
|
||||
def relativize(path)
|
||||
if path.index(working_path+File::SEPARATOR) == 0
|
||||
path[(working_path+File::SEPARATOR).length..-1]
|
||||
elsif block_given?
|
||||
yield path
|
||||
else
|
||||
path
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
@ -3,6 +3,7 @@ require 'rubygems'
|
||||
require 'haml'
|
||||
require File.join(Compass.lib_directory, 'compass', 'logger')
|
||||
require File.join(Compass.lib_directory, 'compass', 'configuration')
|
||||
require File.join(Compass.lib_directory, 'compass', 'actions')
|
||||
|
||||
module Compass
|
||||
module Exec
|
||||
|
@ -2,10 +2,12 @@ module Compass
|
||||
module Installers
|
||||
|
||||
class Base
|
||||
|
||||
include Compass::Actions
|
||||
|
||||
attr_accessor :template_path, :target_path, :working_path
|
||||
attr_accessor :options
|
||||
attr_accessor :manifest
|
||||
attr_accessor :logger
|
||||
attr_accessor :css_dir, :sass_dir, :images_dir, :javascripts_dir
|
||||
|
||||
def initialize(template_path, target_path, options = {})
|
||||
@ -14,7 +16,7 @@ module Compass
|
||||
@working_path = Dir.getwd
|
||||
@options = options
|
||||
@manifest = Manifest.new(manifest_file)
|
||||
configure_option_with_default :logger
|
||||
self.logger = options[:logger]
|
||||
configure
|
||||
end
|
||||
|
||||
@ -80,23 +82,19 @@ module Compass
|
||||
end
|
||||
|
||||
def install_stylesheet(from, to, options)
|
||||
copy from, "#{sass_dir}/#{to}"
|
||||
copy templatize(from), targetize("#{sass_dir}/#{to}")
|
||||
end
|
||||
|
||||
def install_image(from, to, options)
|
||||
copy from, "#{images_dir}/#{to}"
|
||||
copy templatize(from), targetize("#{images_dir}/#{to}")
|
||||
end
|
||||
|
||||
def install_script(from, to, options)
|
||||
copy from, "#{javascripts_dir}/#{to}"
|
||||
copy templatize(from), targetize("#{javascripts_dir}/#{to}")
|
||||
end
|
||||
|
||||
def install_file(from, to, options)
|
||||
copy from, to
|
||||
end
|
||||
|
||||
def default_logger
|
||||
Compass::Logger.new
|
||||
copy templatize(from), targetize(to)
|
||||
end
|
||||
|
||||
# returns an absolute path given a path relative to the current installation target.
|
||||
@ -116,71 +114,6 @@ module Compass
|
||||
path.gsub(%r{/}, File::SEPARATOR)
|
||||
end
|
||||
|
||||
# copy/process a template in the compass template directory to the project directory.
|
||||
def copy(from, to, options = nil)
|
||||
options ||= self.options
|
||||
from = templatize(from)
|
||||
to = targetize(to)
|
||||
if File.exists?(to) && !options[:force]
|
||||
#TODO: Detect differences & provide an overwrite prompt
|
||||
msg = "#{basename(to)} already exists."
|
||||
raise InstallationError.new(msg)
|
||||
elsif File.exists?(to)
|
||||
logger.record :overwrite, basename(to)
|
||||
FileUtils.rm to unless options[:dry_run]
|
||||
FileUtils.cp from, to unless options[:dry_run]
|
||||
else
|
||||
logger.record :create, basename(to)
|
||||
FileUtils.cp from, to unless options[:dry_run]
|
||||
end
|
||||
end
|
||||
|
||||
# create a directory and all the directories necessary to reach it.
|
||||
def directory(dir, options = nil)
|
||||
options ||= self.options
|
||||
dir = targetize(dir)
|
||||
if File.exists?(dir) && File.directory?(dir)
|
||||
logger.record :exists, basename(dir)
|
||||
elsif File.exists?(dir)
|
||||
msg = "#{basename(dir)} already exists and is not a directory."
|
||||
raise InstallationError.new(msg)
|
||||
else
|
||||
logger.record :directory, basename(dir)
|
||||
FileUtils.mkdir_p(dir) unless options[:dry_run]
|
||||
end
|
||||
end
|
||||
|
||||
def write_file(file_name, contents, options = nil)
|
||||
options ||= self.options
|
||||
file_name = targetize(file_name)
|
||||
if File.exists?(file_name) && !options[:force]
|
||||
msg = "File #{basename(file_name)} already exists. Run with --force to force creation."
|
||||
raise InstallationError.new(msg)
|
||||
end
|
||||
if File.exists?(file_name)
|
||||
logger.record :overwrite, basename(file_name)
|
||||
else
|
||||
logger.record :create, basename(file_name)
|
||||
end
|
||||
open(file_name,'w') do |file|
|
||||
file.write(contents)
|
||||
end
|
||||
end
|
||||
|
||||
def basename(file)
|
||||
relativize(file) {|f| File.basename(file)}
|
||||
end
|
||||
|
||||
def relativize(path)
|
||||
if path.index(working_path+File::SEPARATOR) == 0
|
||||
path[(working_path+File::SEPARATOR).length..-1]
|
||||
elsif block_given?
|
||||
yield path
|
||||
else
|
||||
path
|
||||
end
|
||||
end
|
||||
|
||||
def stylesheet_links
|
||||
html = "<head>\n"
|
||||
manifest.each_stylesheet do |stylesheet|
|
||||
|
@ -15,9 +15,9 @@ module Compass
|
||||
def init
|
||||
set_sass_dir unless sass_dir
|
||||
set_css_dir unless css_dir
|
||||
directory css_dir
|
||||
directory sass_dir
|
||||
write_file 'config/initializers/compass.rb', initializer_contents
|
||||
directory targetize(css_dir)
|
||||
directory targetize(sass_dir)
|
||||
write_file targetize('config/initializers/compass.rb'), initializer_contents
|
||||
end
|
||||
|
||||
def prepare
|
||||
|
@ -13,14 +13,14 @@ module Compass
|
||||
end
|
||||
|
||||
def init
|
||||
directory ""
|
||||
directory css_dir
|
||||
directory sass_dir
|
||||
directory targetize("")
|
||||
directory targetize(css_dir)
|
||||
directory targetize(sass_dir)
|
||||
end
|
||||
|
||||
def prepare
|
||||
directory images_dir if manifest.has_image?
|
||||
directory javascripts_dir if manifest.has_javascript?
|
||||
directory targetize(images_dir) if manifest.has_image?
|
||||
directory targetize(javascripts_dir) if manifest.has_javascript?
|
||||
end
|
||||
|
||||
def default_css_dir
|
||||
|
Loading…
Reference in New Issue
Block a user