class PureDocx::XmlGenerators::Image

Attributes

align[R]
height[R]
image_name[R]
image_path[R]
in_header[R]
rels_id[R]
size_constructor[R]
width[R]

Public Class Methods

new(image_path, rels_constructor, arguments = {}) click to toggle source
Calls superclass method PureDocx::XmlGenerators::Base::new
# File lib/puredocx/xml_generators/image.rb, line 13
def initialize(image_path, rels_constructor, arguments = {})
  super(nil, rels_constructor)
  @image_path       = image_path
  @image_name       = File.basename(image_path)
  ensure_file!
  @width            = arguments[:width]
  @height           = arguments[:height]
  @in_header        = arguments[:in_header]
  @align            = arguments[:align]
  @rels_id          = "rId#{appropriated_rels_size}"
  @size_constructor = PureDocx::Constructors::ImageSize.new(
    user_params: [width, height],
    real_params: FastImage.size(image_path)
  )
end

Public Instance Methods

params() click to toggle source
# File lib/puredocx/xml_generators/image.rb, line 34
def params
  align_params = { horizontal: '', vertical: '' }
  align_params.merge! prepare_align_params(align) if align
  {
    '{WIDTH}'            => size_constructor.prepare_size[:width],
    '{HEIGHT}'           => size_constructor.prepare_size[:height],
    '{RID}'              => rels_id,
    '{NAME}'             => image_name,
    '{UNIQUE_NAME}'      => uniq_name(image_name),
    '{HORIZONTAL_ALIGN}' => align_params[:horizontal],
    '{VERTICAL_ALIGN}'   => align_params[:vertical]
  }
end
template() click to toggle source
# File lib/puredocx/xml_generators/image.rb, line 48
def template
  return File.read(DocArchive.template_path('float_image.xml')) if align&.any?
  File.read(DocArchive.template_path('image.xml'))
end
xml() click to toggle source
Calls superclass method PureDocx::XmlGenerators::Base#xml
# File lib/puredocx/xml_generators/image.rb, line 29
def xml
  add_image_rels
  super
end

Private Instance Methods

add_image_rels() click to toggle source
# File lib/puredocx/xml_generators/image.rb, line 63
def add_image_rels
  return rels_constructor.prepare_header_rels!(image_path, uniq_name(image_name)) if in_header?
  rels_constructor.prepare_word_rels!(image_path, uniq_name(image_name))
end
appropriated_rels_size() click to toggle source
# File lib/puredocx/xml_generators/image.rb, line 72
def appropriated_rels_size
  rels_constructor.rels[(in_header? && :header_rels) || :word_rels].size
end
ensure_file!() click to toggle source
# File lib/puredocx/xml_generators/image.rb, line 59
def ensure_file!
  raise ImageReadingError, "The #{image_name}  not found!" unless File.exist?(image_path)
end
in_header?() click to toggle source
# File lib/puredocx/xml_generators/image.rb, line 68
def in_header?
  in_header
end
prepare_align_params(align_params) click to toggle source
# File lib/puredocx/xml_generators/image.rb, line 76
def prepare_align_params(align_params)
  align = {
    horizontal: :left,
    vertical:   :top
  }
  align_params.each do |item|
    align[:horizontal] = item if %i[right left].include? item
    align[:vertical]   = item if %i[bottom top].include? item
  end
  align
end
uniq_name(image_name) click to toggle source
# File lib/puredocx/xml_generators/image.rb, line 55
def uniq_name(image_name)
  "image_#{SecureRandom.uuid}#{File.extname(image_name)}"
end