class Jekyll::StructurizrBlock
Public Class Methods
new(tag_name, markup, tokens)
click to toggle source
Calls superclass method
# File lib/jekyll-structurizr.rb, line 6 def initialize(tag_name, markup, tokens) super @html = (markup or '').strip end
Public Instance Methods
render(context)
click to toggle source
Calls superclass method
# File lib/jekyll-structurizr.rb, line 11 def render(context) site = context.registers[:site] name = Digest::MD5.hexdigest(super) if !File.exists?(File.join(site.dest, "c4/#{name}.svg")) outputdir = File.join(site.source, "c4") dsl = File.join(site.source, "c4/#{name}.dsl") defaultuml = File.join(site.source, "c4/structurizr-SystemContext.puml") uml = File.join(site.source, "c4/#{name}.uml") svg = File.join(site.source, "c4/#{name}.svg") if File.exists?(svg) puts "File #{svg} already exists (#{File.size(svg)} bytes)" else FileUtils.mkdir_p(File.dirname(dsl)) File.open(dsl, 'w') { |f| @text = super # appendC4Beacon=true # if @text.include? "@starstructurizr" # appendC4Beacon = false # puts "stream already contains starstructurizr beacons" # end # if appendC4Beacon # f.write("@starstructurizr\n") # end f.write(super) # if appendC4Beacon # f.write("\n@endstructurizr") # end } puts "Exec : structurizr export -f plantuml/c4plantuml -o #{outputdir} -w #{dsl}" system("structurizr export -f plantuml/structurizr -o #{outputdir} -w #{dsl}") File.rename(defaultuml, uml) puts "File #{uml} created (#{File.size(uml)} bytes)" puts "plantuml -tsvg #{uml}" system("plantuml -tsvg #{uml}") site.static_files << Jekyll::StaticFile.new( site, site.source, 'c4', "#{name}.svg" ) puts "File #{svg} created (#{File.size(svg)} bytes)" end end "<div class='plantuml' style='width:fit-content'><object class='plantuml' data='#{site.baseurl}/c4/#{name}.svg' type='image/svg+xml' #{@html}></object></div>" end