Module | Sinatra::Templates |
In: |
lib/sinatra/base.rb
|
Template rendering methods. Each method takes the name of a template to render as a Symbol and returns a String with the rendered output, as well as an optional hash with additional options.
`template` is either the name or path of the template as symbol (Use `:’subdir/myview’` for views in subdirectories), or a string that will be rendered.
Possible options are:
:layout If set to false, no layout is rendered, otherwise the specified layout is used (Ignored for `sass`) :locals A hash with local variables that should be available in the template
# File lib/sinatra/base.rb, line 308 308: def builder(template=nil, options={}, locals={}, &block) 309: options, template = template, nil if template.is_a?(Hash) 310: template = Proc.new { block } if template.nil? 311: render :builder, template, options, locals 312: end
# File lib/sinatra/base.rb, line 291 291: def erb(template, options={}, locals={}) 292: render :erb, template, options, locals 293: end
# File lib/sinatra/base.rb, line 295 295: def erubis(template, options={}, locals={}) 296: render :erubis, template, options, locals 297: end
# File lib/sinatra/base.rb, line 299 299: def haml(template, options={}, locals={}) 300: render :haml, template, options, locals 301: end
# File lib/sinatra/base.rb, line 303 303: def sass(template, options={}, locals={}) 304: options[:layout] = false 305: render :sass, template, options, locals 306: end
# File lib/sinatra/base.rb, line 341 341: def compile_template(engine, data, options, views) 342: @template_cache.fetch engine, data, options do 343: case 344: when data.is_a?(Symbol) 345: body, path, line = self.class.templates[data] 346: if body 347: body = body.call if body.respond_to?(:call) 348: Tilt[engine].new(path, line.to_i, options) { body } 349: else 350: path = ::File.join(views, "#{data}.#{engine}") 351: Tilt[engine].new(path, 1, options) 352: end 353: when data.is_a?(Proc) || data.is_a?(String) 354: body = data.is_a?(String) ? Proc.new { data } : data 355: path, line = self.class.caller_locations.first 356: Tilt[engine].new(path, line.to_i, options, &body) 357: else 358: raise ArgumentError 359: end 360: end 361: end
# File lib/sinatra/base.rb, line 315 315: def render(engine, data, options={}, locals={}, &block) 316: # merge app-level options 317: options = settings.send(engine).merge(options) if settings.respond_to?(engine) 318: 319: # extract generic options 320: locals = options.delete(:locals) || locals || {} 321: views = options.delete(:views) || settings.views || "./views" 322: layout = options.delete(:layout) 323: layout = :layout if layout.nil? || layout == true 324: 325: # compile and render template 326: template = compile_template(engine, data, options, views) 327: output = template.render(self, locals, &block) 328: 329: # render layout 330: if layout 331: begin 332: options = options.merge(:views => views, :layout => false) 333: output = render(engine, layout, options, locals) { output } 334: rescue Errno::ENOENT 335: end 336: end 337: 338: output 339: end