Skip to content

Commit 4a83cee

Browse files
committed
[#20] engine: include optional logging
Fixes #20
1 parent 4ee07c4 commit 4a83cee

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

lib/handlebars/engine.rb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ class Engine
2121
# environment.
2222
# @param path [String, nil] the path to the version of Handlebars to load.
2323
# If `nil`, the contents of `Handlebars::Source.bundled_path` is loaded.
24-
def initialize(lazy: false, path: nil)
24+
def initialize(lazy: false, logger: nil, path: nil)
25+
@logger = logger
2526
@path = path
2627
init! unless lazy
2728
end
@@ -175,13 +176,16 @@ def version
175176

176177
def attach(name, &block)
177178
init!
179+
@logger&.debug { "[handlebars] attaching #{name}" }
178180
@context.attach(name.to_s, block)
179181
end
180182

181183
def call(name, args, assign: false, eval: false)
182184
init!
183185
name = name.to_s
184186

187+
@logger&.debug { "[handlebars] calling #{name} with args #{args}" }
188+
185189
if assign || eval
186190
call_via_eval(name, args, assign: assign)
187191
else
@@ -207,6 +211,7 @@ def call_via_eval(name, args, assign: false)
207211
end
208212

209213
def evaluate(code)
214+
@logger&.debug { "[handlebars] evaluating #{code}" }
210215
@context.eval(code)
211216
end
212217

@@ -222,10 +227,18 @@ def helper_missing_name(type)
222227
def init!
223228
return if @init
224229

230+
@logger&.debug { "[handlebars] initializing" }
231+
225232
@context = MiniRacer::Context.new
233+
@context.attach(
234+
"console.log",
235+
->(*args) { @logger&.debug { "[handlebars] #{args.join(" ")}" } },
236+
)
226237
@context.load(@path || ::Handlebars::Source.bundled_path)
227238
@context.load(File.absolute_path("engine/init.js", __dir__))
228239

240+
@logger&.debug { "[handlebars] initialized" }
241+
229242
@init = true
230243
end
231244

lib/handlebars/engine/function.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ module Handlebars
44
class Engine
55
# A proxy for a JavaScript function defined in the context.
66
class Function
7-
def initialize(context, name)
7+
def initialize(context, name, logger: nil)
88
@context = context
9+
@logger = logger
910
@name = name
1011
end
1112

1213
def call(*args)
14+
@logger&.debug { "[handlebars] calling #{@name} with args #{args.inspect}" }
1315
@context.call(@name, *args)
1416
end
1517
end

spec/handlebars/engine_spec.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
# frozen_string_literal: true
22

3+
require "logger"
34
require "tempfile"
45

56
RSpec.describe Handlebars::Engine do
67
let(:engine) { described_class.new(**engine_options) }
78
let(:engine_context) { engine.instance_variable_get(:@context) }
89
let(:engine_options) { {} }
10+
let(:log) { Tempfile.new }
11+
let(:logger) { Logger.new(log, level: Logger::FATAL) }
912
let(:render) { renderer.call(render_context, render_options) }
1013
let(:render_context) { { name: "Zach", age: 30 } }
1114
let(:render_options) { {} }
@@ -44,6 +47,25 @@
4447
end
4548
end
4649

50+
context "when `logger` is defined" do
51+
before do
52+
engine_options[:logger] = logger
53+
logger.debug!
54+
end
55+
56+
it "logs initialization" do
57+
engine
58+
log.rewind
59+
expect(log.read).to include("[handlebars] initializing")
60+
end
61+
62+
it "logs javascript" do
63+
engine.send(:evaluate, "console.log('js', 'log')")
64+
log.rewind
65+
expect(log.read).to include("[handlebars] js log")
66+
end
67+
end
68+
4769
context "when `path` is defined" do
4870
let(:file) { Tempfile.open }
4971

0 commit comments

Comments
 (0)