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