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}}"
Instance Method Summary collapse
-
#initialize(asset_assembler: ReportAssetAssembler.new) ⇒ ReportWriter
constructor
A new instance of ReportWriter.
- #rubylens_report?(path) ⇒ Boolean
- #write(model, output:) ⇒ Object
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
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.(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 |