Sha256: e8e2501a2ea5b8190215fab96a8478107f540e21e2fdde3b6900bd58d904ab44

Contents?: true

Size: 820 Bytes

Versions: 5

Compression:

Stored size: 820 Bytes

Contents

require 'erubis'
require 'rdiscount'

require 'sinatra/base'

module Sinatra
  module RDiscount
    
    def rdiscount(template, options={}, locals={})
      render :rdiscount, template, options, locals
    end
    
  private
    
    def render_rdiscount(template, data, options, locals, &block)    
      if block_given?
        # render layout
        instance = ::Erubis::Eruby.new(data)
      else
        # render template
        markdown = ::RDiscount.new(data)
        html = markdown.to_html
        instance = ::Erubis::Eruby.new(html, :pattern => '\{% %\}')
      end
      locals_assigns = locals.to_a.collect { |k,v| "#{k} = locals[:#{k}]" }
      src = "#{locals_assigns.join("\n")}\n#{instance.src}"
      eval src, binding, '(__ERB__)', locals_assigns.length + 1
    end

  end

  helpers RDiscount
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
sinatra-rdiscount-1.0.0.6 lib/sinatra/rdiscount.rb
sinatra-rdiscount-1.0.0.4 lib/sinatra/rdiscount.rb
sinatra-rdiscount-0.9.4.2 lib/sinatra/rdiscount.rb
sinatra-rdiscount-1.0.0.2 lib/sinatra/rdiscount.rb
sinatra-rdiscount-0.9.4.0 lib/sinatra/rdiscount.rb