module Wunderbar::Template

Tilt template implementation

Constants

PASSABLE

Public Class Methods

locals(scope, args) click to toggle source
# File lib/wunderbar/sinatra.rb, line 166
def self.locals(scope, args)
  args.push({}) if args.length == 1

  return unless Hash === args.last and not args.last[:locals]

  locals = {}

  scope.instance_variables.each do |ivar|
    next if [:@env, :@params].include? ivar
    value = scope.instance_variable_get(ivar)
    locals[ivar] = value
  end

  args.last[:locals] = locals
end
register(language, base=Base) click to toggle source
# File lib/wunderbar/sinatra.rb, line 182
def self.register(language, base=Base)
  template = Class.new(Template::Base) do 
    self.default_mime_type = language.mime
    include language
  end

  Array(language.ext).each do |ext|
    SinatraHelpers.send :define_method, ext do |*args, &block|
      # parse json
      if env['CONTENT_TYPE'] =~ /^\w+\/json/
        json = JSON.parse(env['rack.input'].read)
        @params.merge! json if Hash === json
      end

      Wunderbar::Template.locals(self, args)
      if Hash === args.last and args.last[:locals]
        @params.each do |name, value| 
          args.last[:locals]["@#{name}".to_sym] = value
        end
      end

      # text, json shortcuts
      if block == nil and args.length >= 1
        case args.first
        when Array, Hash
          block = proc { _! args.first } if ext == :_json
        when String
          block = proc { _ args.first } if ext == :_text
        end
      end

      template.evaluate(ext, self, *args, &block)
    end

    Tilt.register ext.to_s, template
  end
end