Class: RubyLens::ReportWriter
- Inherits:
-
Object
- Object
- RubyLens::ReportWriter
- Defined in:
- lib/rubylens/report_writer.rb
Direct Known Subclasses
Constant Summary collapse
- MODEL_PLACEHOLDER =
"{{MODEL_BASE64}}"- MARKER =
'<meta name="generator" content="RubyLens">'
Instance Method Summary collapse
-
#initialize(asset_assembler: ReportAssetAssembler.new) ⇒ ReportWriter
constructor
A new instance of ReportWriter.
- #write(model, output:) ⇒ Object
Constructor Details
#initialize(asset_assembler: ReportAssetAssembler.new) ⇒ ReportWriter
Returns a new instance of ReportWriter.
15 16 17 |
# File 'lib/rubylens/report_writer.rb', line 15 def initialize(asset_assembler: ReportAssetAssembler.new) @asset_assembler = asset_assembler end |
Instance Method Details
#write(model, output:) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/rubylens/report_writer.rb', line 19 def write(model, output:) output = File.(output) directory = File.dirname(output) FileUtils.mkdir_p(directory, mode: 0o700) protect_default_directory(directory) template = @asset_assembler.assemble unless template.scan(MODEL_PLACEHOLDER).length == 1 raise Error, "report template must contain exactly one #{MODEL_PLACEHOLDER} placeholder" end payload = Base64.strict_encode64(JSON.generate(model)) html = template.sub(MODEL_PLACEHOLDER, payload) AtomicOutput.replace(output) { |temporary| File.binwrite(temporary, html) } end |