class AsciidoctorExtensions::KrokiDiagram
Kroki
diagram
Attributes
format[R]
text[R]
type[R]
Public Class Methods
new(type, format, text)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 265 def initialize(type, format, text) @text = text @type = type @format = format end
Public Instance Methods
encode()
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 275 def encode Base64.urlsafe_encode64(Zlib::Deflate.deflate(@text, 9)) end
get_diagram_uri(server_url)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 271 def get_diagram_uri(server_url) _join_uri_segments(server_url, @type, @format, encode) end
save(output_dir_path, kroki_client)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 279 def save(output_dir_path, kroki_client) diagram_url = get_diagram_uri(kroki_client.server_url) diagram_name = "diag-#{Digest::SHA256.hexdigest diagram_url}.#{@format}" file_path = File.join(output_dir_path, diagram_name) encoding = if @format == 'txt' || @format == 'atxt' || @format == 'utxt' 'utf8' elsif @format == 'svg' 'binary' else 'binary' end # file is either (already) on the file system or we should read it from Kroki contents = File.exist?(file_path) ? File.open(file_path, &:read) : kroki_client.get_image(self, encoding) FileUtils.mkdir_p(output_dir_path) if encoding == 'binary' File.binwrite(file_path, contents) else File.write(file_path, contents) end diagram_name end
Private Instance Methods
_join_uri_segments(base, *uris)
click to toggle source
# File lib/asciidoctor/extensions/asciidoctor_kroki/extension.rb, line 303 def _join_uri_segments(base, *uris) segments = [] # remove trailing slashes segments.push(base.gsub(%r{[/]+$}, '')) segments.concat(uris.map do |uri| # remove leading and trailing slashes uri.to_s .gsub(%r{^[/]+}, '') .gsub(%r{[/]+$}, '') end) segments.join('/') end