Skip to content

Commit 18c05d4

Browse files
committed
engine: include optional logging
1 parent 5a99043 commit 18c05d4

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

lib/handlebars/engine.rb

Lines changed: 10 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.inspect}" }
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,14 @@ def helper_missing_name(type)
222227
def init!
223228
return if @init
224229

230+
@logger&.debug { "[handlebars] initializing" }
231+
225232
@context = MiniRacer::Context.new
226233
@context.load(@path || ::Handlebars::Source.bundled_path)
227234
@context.load(File.absolute_path("engine/init.js", __dir__))
228235

236+
@logger&.debug { "[handlebars] initialized" }
237+
229238
@init = true
230239
end
231240

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: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,18 @@
4444
end
4545
end
4646

47+
context "when `logger` is defined" do
48+
before do
49+
engine_options[:logger] = Logger.new($stdout, level: Logger::DEBUG)
50+
end
51+
52+
it "logs initialization" do
53+
expect(engine_options[:logger]).to receive(:debug).with("[handlebars] initializing")
54+
expect(engine_options[:logger]).to receive(:debug).with("[handlebars] initialized")
55+
engine
56+
end
57+
end
58+
4759
context "when `path` is defined" do
4860
let(:file) { Tempfile.open }
4961

0 commit comments

Comments
 (0)