diff --git a/lib/rake-pipeline-web-filters.rb b/lib/rake-pipeline-web-filters.rb index 8548ca6..8b41dfd 100644 --- a/lib/rake-pipeline-web-filters.rb +++ b/lib/rake-pipeline-web-filters.rb @@ -17,6 +17,7 @@ module Filters require "rake-pipeline-web-filters/neuter_filter" require "rake-pipeline-web-filters/sass_filter" require "rake-pipeline-web-filters/stylus_filter" +require "rake-pipeline-web-filters/jade_filter" require "rake-pipeline-web-filters/tilt_filter" require "rake-pipeline-web-filters/coffee_script_filter" require "rake-pipeline-web-filters/yui_javascript_filter" diff --git a/lib/rake-pipeline-web-filters/helpers.rb b/lib/rake-pipeline-web-filters/helpers.rb index 4a90880..c921c99 100644 --- a/lib/rake-pipeline-web-filters/helpers.rb +++ b/lib/rake-pipeline-web-filters/helpers.rb @@ -33,6 +33,12 @@ def sass(*args, &block) end alias_method :scss, :sass + # Add a new {JadeFilter} to the pipeline. + # @see JadeFilter#initialize + def jade(*args, &block) + filter(Rake::Pipeline::Web::Filters::JadeFilter, *args, &block) + end + # Add a new {StylusFilter} to the pipeline. # @see StylusFilter#initialize def stylus(*args, &block) diff --git a/lib/rake-pipeline-web-filters/jade_filter.rb b/lib/rake-pipeline-web-filters/jade_filter.rb new file mode 100644 index 0000000..2b52ea2 --- /dev/null +++ b/lib/rake-pipeline-web-filters/jade_filter.rb @@ -0,0 +1,59 @@ +require 'rake-pipeline-web-filters/filter_with_dependencies' + +module Rake::Pipeline::Web::Filters + # A filter that compiles input files written in Jade + # to HTML using the Jade compiler + # + # Requires node and https://npmjs.org/package/jade by + # [sudo] npm install jade -g + # + # @example + # !!!ruby + # Rake::Pipeline.build do + # input "app/assets", "**/*.jade" + # output "public" + # + # # Compile each Jade file under the app/assets + # # directory. + # filter Rake::Pipeline::Web::Filters::JadeFilter + # end + # !!!ruby + # Rake::Pipeline.build do + # input "app/assets", "**/*.jade" + # output "public" + # + # jade :pretty + # end + class JadeFilter < Rake::Pipeline::Filter + include Rake::Pipeline::Web::Filters::FilterWithDependencies + + # @return [Hash] a hash of options to pass to Less + # when compiling. + # @option option :prettify output + attr_reader :options + + def initialize(options={}, &block) + block ||= proc { |input| input.sub(/\.(jade)$/, '.html') } + super(&block) + @options = options + end + + def generate_output(inputs, output) + + inputs.each do |input| + if options[:pretty] + output.write `echo "#{input.read}" | jade -P` + else + output.write `echo "#{input.read}" | jade` + end + end + end + + private + + def external_dependencies + [ ] + end + + end +end diff --git a/rake-pipeline-web-filters.gemspec b/rake-pipeline-web-filters.gemspec index e064a7f..1febaed 100644 --- a/rake-pipeline-web-filters.gemspec +++ b/rake-pipeline-web-filters.gemspec @@ -30,4 +30,5 @@ Gem::Specification.new do |gem| gem.add_development_dependency "json" gem.add_development_dependency "therubyracer" gem.add_development_dependency "stylus" + gem.add_development_dependency "jade" end diff --git a/spec/helpers_spec.rb b/spec/helpers_spec.rb index d40667d..80ae2d5 100644 --- a/spec/helpers_spec.rb +++ b/spec/helpers_spec.rb @@ -33,6 +33,13 @@ def filter end end + describe "#jade" do + it "creates a JadeCompiler" do + dsl.jade + filter.should be_kind_of(Rake::Pipeline::Web::Filters::JadeFilter) + end + end + describe "#tilt" do it "creates a TiltFilter" do dsl.tilt diff --git a/spec/jade_filter_spec.rb b/spec/jade_filter_spec.rb new file mode 100644 index 0000000..8bdc219 --- /dev/null +++ b/spec/jade_filter_spec.rb @@ -0,0 +1,83 @@ +describe "JadeFilter" do + JadeFilter ||= Rake::Pipeline::Web::Filters::JadeFilter + MemoryFileWrapper ||= Rake::Pipeline::SpecHelpers::MemoryFileWrapper + + let(:jade_input) {""" +!!! 5 +html + head + title Hello + body + h1 Hello +""" +} + + let(:expected_html_output) {"""