class Asciidoctor::Diagram::BasicSource

Base class for diagram source implementations that uses an md5 checksum of the source code of a diagram to determine if it has been updated or not.

Attributes

attributes[R]

Public Class Methods

new(block_processor, parent_block, attributes) click to toggle source
# File lib/asciidoctor-diagram/diagram_source.rb, line 110
def initialize(block_processor, parent_block, attributes)
  @block_processor = block_processor
  @parent_block = parent_block
  @attributes = attributes
end

Public Instance Methods

attr(name, default_value = nil, inherit = nil) click to toggle source
# File lib/asciidoctor-diagram/diagram_source.rb, line 128
def attr(name, default_value = nil, inherit = nil)
  name = name.to_s if ::Symbol === name

  value = @attributes[name]

  if value.nil? && inherit
    case inherit
    when String, Symbol
      value = @parent_block.attr("#{inherit.to_s}-#{name}", default_value, true)
    else
      value = @parent_block.attr(name, default_value, inherit)
    end
  end

  value || default_value
end
checksum() click to toggle source
# File lib/asciidoctor-diagram/diagram_source.rb, line 153
def checksum
  @checksum ||= compute_checksum(code)
end
config() click to toggle source
# File lib/asciidoctor-diagram/diagram_source.rb, line 120
def config
  @block_processor.config
end
create_image_metadata() click to toggle source
# File lib/asciidoctor-diagram/diagram_source.rb, line 149
def create_image_metadata
  {:checksum => checksum}
end
image_name() click to toggle source
# File lib/asciidoctor-diagram/diagram_source.rb, line 124
def image_name
  attr('target', 'diag-' + checksum)
end
resolve_path(target, start = base_dir) click to toggle source
# File lib/asciidoctor-diagram/diagram_source.rb, line 116
def resolve_path target, start = base_dir
  @parent_block.normalize_system_path(target, start)
end
should_process?(image_file, image_metadata) click to toggle source
# File lib/asciidoctor-diagram/diagram_source.rb, line 145
def should_process?(image_file, image_metadata)
  image_metadata[:checksum] != checksum
end

Protected Instance Methods

resolve_diagram_subs() click to toggle source
# File lib/asciidoctor-diagram/diagram_source.rb, line 159
def resolve_diagram_subs
  if @attributes.key? 'subs'
    @parent_block.resolve_block_subs @attributes['subs'], nil, 'diagram'
  else
    []
  end
end

Private Instance Methods

compute_checksum(code) click to toggle source
# File lib/asciidoctor-diagram/diagram_source.rb, line 169
def compute_checksum(code)
  md5 = Digest::MD5.new
  md5 << code
  @attributes.each do |k, v|
    md5 << k.to_s if k
    md5 << v.to_s if v
  end
  md5.hexdigest
end