Class: JadePug::ShippedCompiler
- Defined in:
- lib/jade-pug/shipped-compiler.rb
Overview
Abstraction layer for shipped engine compiler.
Direct Known Subclasses
Instance Attribute Summary
Attributes inherited from Compiler
Instance Method Summary collapse
-
#compile(source, options = {}) ⇒ String
Compiles template.
-
#compile_compiler_source(source) ⇒ ExecJS::Runtime
protected
Compiles the compiler from source and returns it as ExecJS::Runtime.
-
#initialize(engine, version) ⇒ ShippedCompiler
constructor
A new instance of ShippedCompiler.
-
#npm_package_require_snippet ⇒ String
protected
Returns the JavaScript code used to access engine NPM package.
-
#path_to_compiler_source ⇒ String
protected
Returns absolute path to the file with compiler source.
-
#read_compiler_source(path) ⇒ String
protected
Reads the compiler source from a file and returns it.
Methods inherited from Compiler
#compilation_snippet, #prepare_options, #prepare_source, #process_result, #shipped?, #system?
Constructor Details
#initialize(engine, version) ⇒ ShippedCompiler
Returns a new instance of ShippedCompiler.
14 15 16 17 |
# 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 |
Instance Method Details
#compile(source, options = {}) ⇒ String
Compiles template.
25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/jade-pug/shipped-compiler.rb', line 25 def compile(source, = {}) source = prepare_source(source) = () snippet = compilation_snippet \ method: "compile#{ "Client" if [:client] }", arguments: [source, ], locals: .fetch(:locals, {}), options: result = @execjs.eval(snippet) process_result(source, result, ) rescue ExecJS::ProgramError => e raise engine::CompilationError, e. end |
#compile_compiler_source(source) ⇒ ExecJS::Runtime (protected)
Compiles the compiler from source and returns it as ExecJS::Runtime.
64 65 66 67 68 |
# 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 ⇒ String (protected)
Returns the JavaScript code used to access engine NPM package.
74 75 76 |
# File 'lib/jade-pug/shipped-compiler.rb', line 74 def npm_package_require_snippet engine.name.downcase end |
#path_to_compiler_source ⇒ String (protected)
Returns absolute path to the file with compiler source.
45 46 47 |
# File 'lib/jade-pug/shipped-compiler.rb', line 45 def path_to_compiler_source File.("../../../vendor/#{ engine.name.downcase }-#{ version }.min.js", __FILE__) end |
#read_compiler_source(path) ⇒ String (protected)
Reads the compiler source from a file and returns it.
54 55 56 57 |
# 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 |