class JadePug::SystemCompiler
Abstraction layer for system engine compiler.
Public Class Methods
new(engine)
click to toggle source
@param engine [Jade, Pug]
Calls superclass method
JadePug::Compiler::new
# File lib/jade-pug/system-compiler.rb, line 14 def initialize(engine) super(engine, nil) check_node_runtime! check_npm_package! engine.echo "Resolved system #{ engine.name } to #{ version }." end
Public Instance Methods
compile(source, options = {})
click to toggle source
Compiles the template.
@param source [String, read] @param options [hash] @return [String]
# File lib/jade-pug/system-compiler.rb, line 29 def compile(source, options = {}) source = prepare_source(source) options = prepare_options(options) command = ["node", "--eval"] command.push compilation_snippet \ method: "compile#{ "Client" if options[:client] }", arguments: [source, options], locals: options.fetch(:locals, {}), options: options stdout, stderr, exit_status = Open3.capture3(*command) raise engine::CompilationError, stderr unless exit_status.success? process_result(source, stdout, options) end
version()
click to toggle source
Returns version of engine installed system-wide.
@return [String]
# File lib/jade-pug/system-compiler.rb, line 47 def version stdout, exit_status = Open3.capture2 "node", "--eval", \ "console.log(require(#{ JSON.dump(File.join(npm_package_path, "package.json")) }).version)" if exit_status.success? stdout.strip else raise engine::CompilerError, \ %{Failed to get #{ engine.name } version. Perhaps, the problem with Node.js runtime.} end end
Protected Instance Methods
check_node_runtime!()
click to toggle source
Checks if Node.js runtime exists in $PATH and is accessible.
@raise {JadePug::CompilerError}
If Node.js runtime doesn't exist in system.
@return [nil]
# File lib/jade-pug/system-compiler.rb, line 108 def check_node_runtime! stdout, exit_status = Open3.capture2("node", "--version") if exit_status.success? @node_version = stdout.strip.gsub(/\Av/, "") engine.echo "Using Node.js runtime #{ @node_version }." else raise engine::CompilerError, %{No Node.js runtime has been found in your system.} end nil end
check_npm_package!()
click to toggle source
Checks if engine NPM package is installed.
@raise {JadePug::CompilerError}
If engine NPM package is not installed.
@return [nil]
# File lib/jade-pug/system-compiler.rb, line 127 def check_npm_package! exit_status = Open3.capture2("node", "--eval", npm_package_require_snippet)[1] unless exit_status.success? raise engine::CompilerError, \ %{No #{ engine.name } NPM package has been found in your system. } + %{Have you forgotten to "npm install --global #{ npm_package_name }"?} end nil end
npm_package_name()
click to toggle source
Return the name of engine NPM package.
@return [String]
# File lib/jade-pug/system-compiler.rb, line 66 def npm_package_name engine.name.downcase end
npm_package_path()
click to toggle source
Returns the path of globally installed engine NPM package.
@return [String]
# File lib/jade-pug/system-compiler.rb, line 74 def npm_package_path File.join(npm_packages_root, engine.name.downcase) end
npm_package_require_snippet()
click to toggle source
Returns the JavaScript code used to require engine NPM package.
@return [String]
# File lib/jade-pug/system-compiler.rb, line 82 def npm_package_require_snippet "require(#{ JSON.dump(npm_package_path) })" end
npm_packages_root()
click to toggle source
Returns the root directory of globally installed NPM packages.
@return [String]
# File lib/jade-pug/system-compiler.rb, line 90 def npm_packages_root stdout, exit_status = Open3.capture2("npm", "root", "--global") if exit_status.success? stdout.strip else raise engine::CompilerError, \ %{Unable to get NPM packages root. Perhaps, the problem with Node.js runtime.} end end