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}}"

Instance Method Summary collapse

Constructor Details

#initialize(asset_assembler: ReportAssetAssembler.new) ⇒ ReportWriter

Returns a new instance of ReportWriter.



13
14
15
# File 'lib/rubylens/report_writer.rb', line 13

def initialize(asset_assembler: ReportAssetAssembler.new)
  @asset_assembler = asset_assembler
end

Instance Method Details

#rubylens_report?(path) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
36
37
# File 'lib/rubylens/report_writer.rb', line 33

def rubylens_report?(path)
  File.file?(path) && File.open(path, "rb") { |file| file.read(2048).include?('<meta name="generator" content="RubyLens">') }
rescue Errno::ENOENT, Errno::EACCES
  false
end

#write(model, output:) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/rubylens/report_writer.rb', line 17

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)
  atomic_write(output, html)
  output
end