2006-12-04 02:47:37 +00:00
|
|
|
require File.dirname(__FILE__) + '/../sass'
|
|
|
|
require 'sass/engine'
|
|
|
|
|
|
|
|
require 'rubygems'
|
|
|
|
require 'action_controller'
|
|
|
|
|
|
|
|
module Sass
|
|
|
|
#Rails plugin stuff. For use with ActionView.
|
|
|
|
module Plugin
|
|
|
|
class << self
|
|
|
|
@@options = {
|
2006-12-04 10:39:06 +00:00
|
|
|
:template_location => RAILS_ROOT + '/public/stylesheets/sass',
|
|
|
|
:css_locations => RAILS_ROOT + '/public/stylesheets',
|
2006-12-04 02:47:37 +00:00
|
|
|
:always_update => false,
|
|
|
|
:always_check => RAILS_ENV != "production"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Gets various options for Sass.
|
|
|
|
#--
|
|
|
|
# TODO: *DOCUMENT OPTIONS*
|
|
|
|
#++
|
|
|
|
def options
|
|
|
|
@@options
|
|
|
|
end
|
|
|
|
|
|
|
|
# Sets various options for Sass.
|
|
|
|
def options=(value)
|
|
|
|
@@options.merge!(value)
|
|
|
|
end
|
|
|
|
|
|
|
|
def update_stylesheets
|
|
|
|
Dir[options[:template_location] + '/*.sass'].each do |file|
|
|
|
|
name = File.basename(file)[0...-5]
|
|
|
|
|
|
|
|
if options[:always_update] || stylesheet_needs_update?(name)
|
|
|
|
css = css_filename(name)
|
|
|
|
File.delete(css) if File.exists?(css)
|
|
|
|
|
|
|
|
engine = Engine.new(File.read(template_filename(name)), @@options.dup)
|
|
|
|
result = engine.render
|
|
|
|
|
|
|
|
File.open(css, 'w') do |file|
|
|
|
|
file.print(result)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def template_filename(name)
|
|
|
|
"#{@@options[:template_location]}/#{name}.sass"
|
|
|
|
end
|
|
|
|
|
|
|
|
def css_filename(name)
|
|
|
|
"#{@@options[:css_location]}/#{name}.css"
|
|
|
|
end
|
|
|
|
|
|
|
|
def stylesheet_needs_update?(name)
|
|
|
|
!File.exists?(css_filename(name)) || (File.mtime(template_filename(name)) - 2) > File.mtime(css_filename(name))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
module ActionController
|
|
|
|
class Base
|
|
|
|
alias_method :sass_old_process, :process
|
|
|
|
def process(*args)
|
|
|
|
Sass::Plugin.update_stylesheets if Sass::Plugin.options[:always_update] || Sass::Plugin.options[:always_check]
|
|
|
|
sass_old_process(*args)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|