module DustyRailsRenderer

Constants

VERSION

Attributes

configuration[W]

Public Class Methods

configuration() click to toggle source
# File lib/dusty_rails_renderer.rb, line 95
def self.configuration
  @configuration ||= Configuration.new
end
configure() { |configuration| ... } click to toggle source
# File lib/dusty_rails_renderer.rb, line 91
def self.configure
  yield(configuration)
end
get_template(template_name) click to toggle source
# File lib/dusty_rails_renderer.rb, line 29
def get_template(template_name)
  @precompiled_templates[template_name]
end
initialize() click to toggle source

Initialize, load Dust.js library, and precompile Dust.js templates

# File lib/dusty_rails_renderer.rb, line 13
def initialize
  @dust_config = YAML.load_file(self.configuration.dust_config_path)
  @dust_library = File.read(self.configuration.dust_js_library_path)
  @precompiled_templates = GoogleHashDenseRubyToRuby.new
  @last_modification_hash = GoogleHashDenseRubyToRuby.new
  @context = V8::Context.new
  @context.eval(@dust_library, 'dustjs')

  if self.configuration.load_dust_helpers
    @dust_helpers = File.read(self.configuration.dust_js_helper_path)
    @context.eval(@dust_helpers, 'dustjs-helpers')
  end

  read_dust_files
end
render(template_name, json) click to toggle source
# File lib/dusty_rails_renderer.rb, line 38
def render(template_name, json)
  if self.configuration.production
    @context.eval("(function() { var result; dust.render('#{template_name}', #{json}, function(err, out) { result = out; }); return result; })()")
  else
    read_dust_files
    @context.eval("(function() { var result; dust.render('#{template_name}', #{json}, function(err, out) { result = out; }); return result; })()")
  end
end
templates() click to toggle source

Return precompiled templates in JSON format (Client-side)

# File lib/dusty_rails_renderer.rb, line 34
def templates
  @precompiled_templates.to_json
end

Private Class Methods

read_dust_files() click to toggle source

Read in and register Dust.js templates

# File lib/dusty_rails_renderer.rb, line 49
def read_dust_files
  @dust_config.each do |template, info|
    file_url = self.configuration.dust_template_base_path + info["file_path"]
    template_name = info["name"]

    if @last_modification_hash[template_name] == File.mtime(file_url)
      next
    else
      @last_modification_hash[template_name] = File.mtime(file_url)
    end

    if self.configuration.logging
      puts "file url = #{file_url}"
      puts "template name = #{template_name}"
    end

    if self.configuration.node_dust_compiler
      command = "#{self.configuration.dust_compiler_command} --name=#{template_name} #{file_url}"
      template = Open3.capture3("bash","-l","-c",command)
      escaped_template = escape_javascript(template[0])

      if self.configuration.logging
        puts "open3 result = #{template}"
        puts "compiled template = #{escaped_template}"
      end

      @context.eval("dust.loadSource(\"#{escaped_template}\")")
      @precompiled_templates[template_name] = template[0]
    else
      contents = File.read(file_url).gsub("\n","").gsub("\"","'").gsub("\t","")
      template = @context.eval("(function() {var template = dust.compile(\"#{contents}\",'#{template_name}'); dust.loadSource(template); return template; })()")

      if self.configuration.logging
        puts "compiled template = #{escaped_template}"
      end

      @precompiled_templates[template_name] = template
    end
  end
end