Sha256: 7c69a32275ba41eb636e3b70bbc58fb27e7bd1b86acf8864c5f0603b1cf24bd3

Contents?: true

Size: 1.3 KB

Versions: 5

Compression:

Stored size: 1.3 KB

Contents

require 'builder'

module Flutterby
  module Filters
    def self.apply!(node)
      node.body = node.source

      # Apply all filters
      node.filters.each do |filter|
        meth = "process_#{filter}!"

        if Filters.respond_to?(meth)
          Filters.send(meth, node)
        end
      end
    end

    def self.add(fmts, &blk)
      Array(fmts).each do |fmt|
        define_singleton_method("process_#{fmt}!", &blk)
      end
    end

    def self.tilt(format, body)
      Tilt[format].new { body }
    end
  end
end

Flutterby::Filters.add("rb") do |node|
  node.instance_eval(node.body)
end

Flutterby::Filters.add("erb") do |node|
  node.body = tilt("erb", node.body).render(node.view)
end

Flutterby::Filters.add("slim") do |node|
  node.body = tilt("slim", node.body).render(node.view)
end

Flutterby::Filters.add(["md", "markdown"]) do |node|
  node.body = Slodown::Formatter.new(node.body).complete.to_s
end

Flutterby::Filters.add("scss") do |node|
  sass_options = {
    syntax: :scss,
    load_paths: []
  }

  if node.fs_path
    sass_options[:load_paths] << File.dirname(node.fs_path)
  end

  node.body = Sass::Engine.new(node.body, sass_options).render
end

Flutterby::Filters.add("builder") do |node|
  xml = Builder::XmlMarkup.new
  node.view.instance_eval(node.body)
  node.body = xml.target!
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
flutterby-0.0.25 lib/flutterby/filters.rb
flutterby-0.0.24 lib/flutterby/filters.rb
flutterby-0.0.23 lib/flutterby/filters.rb
flutterby-0.0.22 lib/flutterby/filters.rb
flutterby-0.0.21 lib/flutterby/filters.rb