Skip to content

Instantly share code, notes, and snippets.

@boynoiz
Forked from rosskevin/Rakefile
Last active October 28, 2015 10:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save boynoiz/5179e57ff851670d10cd to your computer and use it in GitHub Desktop.
Save boynoiz/5179e57ff851670d10cd to your computer and use it in GitHub Desktop.
Rakefile - less to sass a.k.a. less2sass or less2scss
# less to scss based on http://stackoverflow.com/a/19167099/2363935
namespace :convert do
task :less_to_scss do
source_glob = "resources/assets/less/*.less"
dest_dir = "resources/assets/sass/"
rm_r dest_dir rescue nil
mkdir_p(dest_dir)
file_map = {}
# copy the files
Dir.glob(source_glob).each do |source_file|
# puts "\tWorking on #{source_file}"
basename = File.basename(source_file, '.less')
dest_filename = "_#{basename}.scss"
dest_file = File.join(dest_dir, dest_filename)
# track the file mapping for a replace later
file_map["#{basename}.less"] = dest_filename
cp source_file, dest_file
# convert_file(source_file, dest_file)
end
# do the conversion
Dir.glob("#{dest_dir}/*.scss").each do |file_name|
puts "Converting #{file_name}"
text = File.read(file_name)
# http://stackoverflow.com/a/19167099/2363935
# 1. replace @ with $
text = text.gsub(/@(?!import|media|keyframes|-)/, '$')
# 2. replace mixins
text = text.gsub(/\.([\w\-]*)\s*\((.*)\)\s*\{/, '@mixin \1(\2){')
# 3. replace includes
text = text.gsub(/\.([\w\-]*\s*;)/, '@include \1')
# 3. a) replace no param mixin includes with empty parens
text = text.gsub(/@include\ ([\w\-]*\s*;)/, '@include \1()')
# 3. b) I'm terrible with regex, 3a makes a ';()', so fix it
text = text.gsub(/;\(\)/, '();')
# 4. replace string literals
text = text.gsub(/~"(.*)"/, '#{"\1"}')
# 5. replace all the file maps
file_map.each do |less, scss|
text = text.gsub(less, scss)
end
File.open(file_name, 'w') { |file| file.puts text }
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment