Sha256: b340d4906fcb7ea399ee9f3e4a22990dff96bf91753ca90e0a978d0c557f56a0

Contents?: true

Size: 1.92 KB

Versions: 7

Compression:

Stored size: 1.92 KB

Contents

module Webmate::Responders
  module Templates

    def slim(template, options = {}, locals = {}, &block)
      render(:slim, template, options, locals, &block)
    end

    private 

    def template_cache
      @cache ||= Webmate::Application.template_cache
    end

    def scope
      @scope ||= Webmate::Views::Scope.new(self)
    end

    def render(engine, data, options = {}, locals = {}, &block)
      views     = Webmate::Application.views
      layouts   = Webmate::Application.layouts

      layout = options.delete(:layout) || false

      # compile and render template
      template        = compile_template(engine, data, options, views)
      output          = template.render(scope, locals, &block)

      if layout
        layout_template = compile_template(engine, layout, options, layouts)
        output          = layout_template.render(scope, locals) { output }
      end

      output
    end

    def compile_template(engine, data, options, views)
      template_cache.fetch engine, data, options, views do
        template = Tilt[engine]

        # find template ./views  /name /action_name  engine_name
        file = find_template(views, data, engine)

        template.new(file)
      end
    end

    # search through all available paths
    # [./views/]name.[extension].[engine]/
    # this will not search for responder's custom  folder
    # responder
    def find_template(views, name, engine)
      responder_folder = self.class.name.underscore.sub(/_responder$/, '') # => namespace/responder_name

      # NOTE: we can add shared, and other paths from settings
      folders_to_search = [File.join(views, responder_folder, "*.#{engine.to_s}")]
      folders_to_search << File.join(views, "*.#{engine.to_s}") 

      search_regexp = /\/#{name}[\w|\.]*.#{engine}$/
      Dir[*folders_to_search].each do |file_path|
        return file_path if search_regexp.match(file_path)
      end
      raise TemplateNotFound.new
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
webmate-0.1.6 lib/webmate/responders/templates.rb
webmate-0.1.5 lib/webmate/responders/templates.rb
webmate-0.1.4 lib/webmate/responders/templates.rb
webmate-0.1.3 lib/webmate/responders/templates.rb
webmate-0.1.2 lib/webmate/responders/templates.rb
webmate-0.1.1 lib/webmate/responders/templates.rb
webmate-0.1.0 lib/webmate/responders/templates.rb