Sha256: b37504cb7c04964ada2ea2ff1050d06aadb5aa86d6e7cf5adda4b0a9c8c08a67
Contents?: true
Size: 1.5 KB
Versions: 3
Compression:
Stored size: 1.5 KB
Contents
require 'erubis' require 'erubis/auto' require 'sass' require 'tilt' require 'slim' require 'builder' require 'flutterby/markdown_formatter' module Flutterby module Filters extend self def apply!(input, filters, view:, &blk) # Apply all filters filters.inject(input) do |body, filter| meth = "process_#{filter}!" if Filters.respond_to?(meth) Filters.send(meth, body, view: view, &blk) elsif template = tilt(filter, body) template.render(view, view.locals, &blk).html_safe else Flutterby.logger.warn "Unsupported filter '#{filter}'" body end end end def add(fmts, &blk) Array(fmts).each do |fmt| define_singleton_method("process_#{fmt}!", &blk) end end def tilt(format, body, options = {}) default_options = { "erb" => { engine_class: Erubis::Auto::EscapedEruby } } options = default_options.fetch(format, {}).merge(options) t = Tilt[format] and t.new(options) { body } end end end Flutterby::Filters.add("rb") do |input, view:| view.instance_eval(input) end Flutterby::Filters.add(["md", "markdown"]) do |input, view:| Flutterby::MarkdownFormatter.new(input).complete.to_s.html_safe end Flutterby::Filters.add("scss") do |input, view:| sass_options = { syntax: :scss, load_paths: [] } if view.node.fs_path sass_options[:load_paths] << File.dirname(view.node.fs_path) end Sass::Engine.new(input, sass_options).render end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
flutterby-0.6.2 | lib/flutterby/filters.rb |
flutterby-0.6.1 | lib/flutterby/filters.rb |
flutterby-0.6.0 | lib/flutterby/filters.rb |