Class: RubyLens::ReportWriter

Inherits:
Object
  • Object
show all
Defined in:
lib/rubylens/report_writer.rb

Direct Known Subclasses

ShowcaseWriter

Constant Summary collapse

MODEL_PLACEHOLDER =
"{{MODEL_BASE64}}"
MARKER =
'<meta name="generator" content="RubyLens">'

Instance Method Summary collapse

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.expand_path(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