forked from jekyll/jekyll
-
Notifications
You must be signed in to change notification settings - Fork 3
/
file.rb
77 lines (64 loc) · 1.65 KB
/
file.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# frozen_string_literal: true
module Jekyll
class LiquidRenderer
class File
def initialize(renderer, filename)
@renderer = renderer
@filename = filename
end
def parse(content)
measure_time do
@renderer.cache[@filename] ||= Liquid::Template.parse(content, :line_numbers => true)
end
@template = @renderer.cache[@filename]
self
end
def render(*args)
reset_template_assigns
measure_time do
measure_bytes do
measure_counts do
@template.render(*args)
end
end
end
end
# This method simply 'rethrows any error' before attempting to render the template.
def render!(*args)
reset_template_assigns
measure_time do
measure_bytes do
measure_counts do
@template.render!(*args)
end
end
end
end
def warnings
@template.warnings
end
private
# clear assigns to `Liquid::Template` instance prior to rendering since
# `Liquid::Template` instances are cached in Jekyll 4.
def reset_template_assigns
@template.instance_assigns.clear
end
def measure_counts
@renderer.increment_count(@filename)
yield
end
def measure_bytes
yield.tap do |str|
@renderer.increment_bytes(@filename, str.bytesize)
end
end
def measure_time
before = Time.now
yield
ensure
after = Time.now
@renderer.increment_time(@filename, after - before)
end
end
end
end