Sha256: e47676315d23084cb60870a98af93f2657e2c0c0abc48aee754b1f80c1500af2

Contents?: true

Size: 1.69 KB

Versions: 1

Compression:

Stored size: 1.69 KB

Contents

require 'sinatra/base'
require 'sass'
require 'redcloth'

begin
  require 'rdiscount'
  # ^^ that sets a Markdown constant
rescue LoadError
  require 'bluecloth'
  Markdown = BlueCloth
end

module Sinatra
  module MercuryHelpers

    SASS = 'sass'
    JS = 'js'
    MDOWN = 'md'
    TEXTILE = 'textile'
    COFFEE = 'coffee'
    CSS = 'css'
    SCSS = 'scss'

    def css(cssfile)
      render_script open_file(find_file(cssfile, CSS)), 'css'    
    end

    def sass(sassfile)
      ["<style type='text/css'>",
        Sass::Engine.new(open_file(find_file(sassfile, SASS))).render, 
        "</style>\n"].join("\n")
    end

    def scss(scssfile)
      ["<style type='text/css'>",
        Sass::Engine.new(open_file(find_file(scssfile, SCSS)), :syntax => :scss).render, 
        "</style>\n"].join("\n")
    end

    def javascript(jsfile)
      render_script open_file(find_file(jsfile, JS)), 'javascript'
    end

    def markdown(mdfile)
      Markdown.new(open_file(find_file(mdfile, MDOWN))).to_html
    end

    def textile(txfile)
      RedCloth.new(open_file(find_file(txfile, TEXTILE))).to_html
    end

    def coffee(coffeefile)
      render_script open_file(find_file(coffeefile, COFFEE)), 'coffeescript'
    end

  #private
  
    def render_script(text, file_type)
      ["<script type='text/#{file_type}'>",
        text,
        "</script>\n"].join("\n")      
    end
    
  
    def find_file(filename, ext)
      Dir.glob(File.join(options.views, "**/*.#{ext}")).select { |extfile| extfile.downcase =~ /\/#{filename.to_s.downcase}.#{ext}$/ }.first
    end
  
    def open_file(full_path_and_filename)
      open(full_path_and_filename,'r') { |file| file.read }  
    end
  
  end
  
  helpers MercuryHelpers
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mercury-0.9.6 lib/mercury/helpers.rb