Skip to content

Instantly share code, notes, and snippets.

@joakimk
Created November 17, 2010 20:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joakimk/704035 to your computer and use it in GitHub Desktop.
Save joakimk/704035 to your computer and use it in GitHub Desktop.
A simple rakefile to run livereload and generate css from the sass (scss) files specified in asset_packages.yml.
desc "Continuously watch for changes and rebuild files"
task :livereload do
pids = `ps ax|grep ruby|grep livereload|awk '{ print $1 }'`.split
other_pids = pids.reject { |pid| Process.pid == pid.to_i }
system "kill #{other_pids.join(' ')} &> /dev/null"
system "nohup livereload &> /dev/null &"
require 'rubygems'
require 'fssm'
def render_sass(file)
sh 'vendor/gems/haml-3.0.4/bin/sass', file,
"public/stylesheets/generated/#{file.to_s.split("sass/").last.gsub(/scss/, 'css')}"
end
def find_main_file(updated_file)
if @main_sass_files.find { |file| file == updated_file }
[ updated_file ]
else
# TODO: find deps for partials
@main_sass_files
end
end
def render_sass_files(updated_file = nil)
@assets ||= YAML.load_file("#{Rails.root}/config/asset_packages.yml")
@main_sass_files ||= @assets["stylesheets"].map { |group| group.values }.flatten.
find_all { |file| file.include?('generated') }.
map { |file|
"public/stylesheets/#{file}.scss".
gsub(/generated/, 'sass') }
files = updated_file ? find_main_file(updated_file) : @main_sass_files
files.each { |file| render_sass(file) }
end
begin
FSSM.monitor(nil, ['**/*.scss']) do
update { |base, rel| render_sass_files(rel) }
delete { render_sass_files }
create { render_sass_files }
end
rescue FSSM::CallbackError => e
puts e.inspect
Process.exit
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment