Skip to content

Commit ec7c5e4

Browse files
authored
Merge pull request cloudfoundry#706 from cloudfoundry/erb-renderer-update-embedded-ruby-code
ERB renderer: update embedded ruby code
2 parents 5dbd198 + 0c13574 commit ec7c5e4

File tree

7 files changed

+3135
-90
lines changed

7 files changed

+3135
-90
lines changed

templatescompiler/erbrenderer/erb_renderer.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package erbrenderer
22

33
import (
4+
_ "embed"
45
"encoding/json"
56
"path/filepath"
67

@@ -9,10 +10,18 @@ import (
910
boshsys "github.com/cloudfoundry/bosh-utils/system"
1011
)
1112

13+
//go:embed erb_renderer.rb
14+
var templateEvaluationContextRb string
15+
1216
type ERBRenderer interface {
1317
Render(srcPath, dstPath string, context TemplateEvaluationContext) error
1418
}
1519

20+
// You only need **one** of these per package!
21+
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate
22+
//counterfeiter:generate github.com/cloudfoundry/bosh-utils/system.CmdRunner
23+
//counterfeiter:generate github.com/cloudfoundry/bosh-utils/system.FileSystem
24+
1625
type erbRenderer struct {
1726
fs boshsys.FileSystem
1827
runner boshsys.CmdRunner
@@ -50,7 +59,7 @@ func (r erbRenderer) Render(srcPath, dstPath string, context TemplateEvaluationC
5059
}
5160
}()
5261

53-
rendererScriptPath := filepath.Join(tmpDir, "erb-render.rb")
62+
rendererScriptPath := filepath.Join(tmpDir, "erb_renderer.rb")
5463
err = r.writeRendererScript(rendererScriptPath)
5564
if err != nil {
5665
return err

templatescompiler/erbrenderer/template_evaluation_context_rb.go renamed to templatescompiler/erbrenderer/erb_renderer.rb

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
package erbrenderer
2-
3-
const templateEvaluationContextRb = `
41
# Based on common/properties/template_evaluation_context.rb
52
require "rubygems"
63
require "ostruct"
@@ -169,22 +166,25 @@ def dump(*args)
169166
end
170167

171168
class ERBRenderer
172-
def initialize(context)
173-
@context = context
169+
def initialize(json_context_path)
170+
@json_context_path = json_context_path
174171
end
175172

176173
def render(src_path, dst_path)
177-
erb = ERB.new(File.read(src_path), safe_level = nil, trim_mode = "-")
174+
erb = ERB.new(File.read(src_path), trim_mode: "-")
178175
erb.filename = src_path
179176

177+
context_hash = JSON.load(File.read(@json_context_path))
178+
template_evaluation_context = TemplateEvaluationContext.new(context_hash)
179+
180180
File.open(dst_path, "w") do |f|
181-
f.write(erb.result(@context.get_binding))
181+
f.write(erb.result(template_evaluation_context.get_binding))
182182
end
183183

184184
rescue Exception => e
185-
name = "#{@context.name}/#{@context.index}"
185+
name = "#{template_evaluation_context&.name}/#{template_evaluation_context&.index}"
186186

187-
line_i = e.backtrace.index { |l| l.include?(erb.filename) }
187+
line_i = e.backtrace.index { |l| l.include?("#{erb&.filename}") }
188188
line_num = line_i ? e.backtrace[line_i].split(':')[1] : "unknown"
189189
location = "(line #{line_num}: #{e.inspect})"
190190

@@ -193,12 +193,8 @@ def render(src_path, dst_path)
193193
end
194194

195195
if $0 == __FILE__
196-
context_path, src_path, dst_path = *ARGV
197-
198-
context_hash = JSON.load(File.read(context_path))
199-
context = TemplateEvaluationContext.new(context_hash)
196+
json_context_path, erb_template_path, rendered_template_path = *ARGV
200197

201-
renderer = ERBRenderer.new(context)
202-
renderer.render(src_path, dst_path)
198+
renderer = ERBRenderer.new(json_context_path)
199+
renderer.render(erb_template_path, rendered_template_path)
203200
end
204-
`

0 commit comments

Comments
 (0)