class JadePug::ShippedCompiler

Abstraction layer for shipped engine compiler.

Public Class Methods

new(engine, version) click to toggle source

@param engine [Jade, Pug] The Jade or Pug module. @param version [String]

Calls superclass method JadePug::Compiler::new
# File lib/jade-pug/shipped-compiler.rb, line 14
def initialize(engine, version)
  super
  @execjs = compile_compiler_source(read_compiler_source(path_to_compiler_source))
end

Public Instance Methods

compile(source, options = {}) click to toggle source

Compiles template.

@param source [String, read] @param options [Hash] @return [String]

# File lib/jade-pug/shipped-compiler.rb, line 25
def compile(source, options = {})
  source  = prepare_source(source)
  options = prepare_options(options)
  snippet = compilation_snippet \
    method:    "compile#{ "Client" if options[:client] }",
    arguments: [source, options],
    locals:    options.fetch(:locals, {}),
    options:   options
  result  = @execjs.eval(snippet)
  process_result(source, result, options)
rescue ExecJS::ProgramError => e
  raise engine::CompilationError, e.message
end

Protected Instance Methods

compile_compiler_source(source) click to toggle source

Compiles the compiler from source and returns it as {ExecJS::Runtime}.

@param source [String] @return [ExecJS::Runtime]

# File lib/jade-pug/shipped-compiler.rb, line 64
def compile_compiler_source(source)
  ExecJS.compile(source).tap do |compiler|
    raise engine::CompilerError, "Failed to compile #{ engine.name } compiler" unless compiler
  end
end
npm_package_require_snippet() click to toggle source

Returns the JavaScript code used to access engine NPM package.

@return [String]

# File lib/jade-pug/shipped-compiler.rb, line 74
def npm_package_require_snippet
  engine.name.downcase
end
path_to_compiler_source() click to toggle source

Returns absolute path to the file with compiler source.

@return [String]

# File lib/jade-pug/shipped-compiler.rb, line 45
def path_to_compiler_source
  File.expand_path("../../../vendor/#{ engine.name.downcase }-#{ version }.min.js", __FILE__)
end
read_compiler_source(path) click to toggle source

Reads the compiler source from a file and returns it.

@param path [String] @return [String]

# File lib/jade-pug/shipped-compiler.rb, line 54
def read_compiler_source(path)
  raise engine::CompilerError, "Couldn't read compiler source: #{ path }" unless File.readable?(path)
  File.read(path)
end