diff --git a/.gitignore b/.gitignore index 6317f22c..37974e15 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ *.a *.cache mkmf.log +.sass-cache/ diff --git a/hamlit.gemspec b/hamlit.gemspec index 3c235d28..7ed04d4b 100644 --- a/hamlit.gemspec +++ b/hamlit.gemspec @@ -20,7 +20,7 @@ Gem::Specification.new do |spec| spec.add_dependency "temple" spec.add_dependency "thor" - + spec.add_dependency "tilt" spec.add_development_dependency "benchmark-ips" spec.add_development_dependency "bundler" spec.add_development_dependency "erubis" @@ -29,6 +29,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "pry" spec.add_development_dependency "rake" spec.add_development_dependency "rspec", ">= 3" + spec.add_development_dependency "sass" spec.add_development_dependency "slim" spec.add_development_dependency "tenjin" spec.add_development_dependency "unindent" diff --git a/lib/hamlit/compilers/filter.rb b/lib/hamlit/compilers/filter.rb index bda56078..233dff57 100644 --- a/lib/hamlit/compilers/filter.rb +++ b/lib/hamlit/compilers/filter.rb @@ -6,6 +6,7 @@ require 'hamlit/filters/javascript' require 'hamlit/filters/plain' require 'hamlit/filters/preserve' require 'hamlit/filters/ruby' +require 'hamlit/filters/sass' module Hamlit module Compilers @@ -23,6 +24,7 @@ module Hamlit register :plain, Filters::Plain register :preserve, Filters::Preserve register :ruby, Filters::Ruby + register :sass, Filters::Sass end def on_haml_filter(name, lines) diff --git a/lib/hamlit/filters/sass.rb b/lib/hamlit/filters/sass.rb new file mode 100644 index 00000000..f856ce0b --- /dev/null +++ b/lib/hamlit/filters/sass.rb @@ -0,0 +1,22 @@ +require 'tilt' +require 'hamlit/filters/base' + +module Hamlit + module Filters + class Sass < Base + def compile(lines) + result = compile_with_tilt(lines) + content = [:multi, [:static, "\n"], result] + [:html, :tag, 'style', [:html, :attrs], content] + end + + private + + def compile_with_tilt(lines) + source = lines.join("\n") + result = ::Tilt['t.sass'].new { source }.render + [:static, compile_lines(result.split("\n"), indent_width: 2)] + end + end + end +end diff --git a/spec/hamlit/filters/sass_spec.rb b/spec/hamlit/filters/sass_spec.rb new file mode 100644 index 00000000..ff169878 --- /dev/null +++ b/spec/hamlit/filters/sass_spec.rb @@ -0,0 +1,19 @@ +describe Hamlit::Filters::Sass do + describe '#compile' do + it 'renders sass filter' do + assert_render(<<-HAML, <<-HTML) + :sass + .users_controller + .show_action + margin: 10px + padding: 20px + HAML + + HTML + end + end +end