Sha256: a5945462a1b1262ea9fe053cb06af33e7d1d9b62074a064a7ae1fa6821cdec30

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

require "digest/sha1"

module DocXify
  module Element
    class File < Base
      PNG_SIGNATURE = "\x89PNG\r\n\u001A\n".b.freeze
      JPEG_START = "\xFF\xD8".b.freeze
      JPEG_END = "\xFF\xD9".b.freeze

      attr_accessor :data, :filename

      def initialize(file_path_or_data)
        super()
        load_file_data(file_path_or_data)
      end

      def load_file_data(file_path_or_data)
        if contains_png_image?(file_path_or_data)
          @data = file_path_or_data
          @filename = "#{Digest::SHA1.hexdigest(@data)}.png"
        elsif contains_jpeg_image?(file_path_or_data)
          @data = file_path_or_data
          @filename = "#{Digest::SHA1.hexdigest(@data)}.jpg"
        elsif ::File.exist?(file_path_or_data)
          @filename = ::File.basename(file_path_or_data)
          @data = ::File.read(file_path_or_data, mode: "rb")
          raise ArgumentError.new("Unsupported file type - images must be PNG or JPEG") unless contains_png_image?(@data) || contains_jpeg_image?(@data)
        else
          raise ArgumentError.new("Unsupported file type - images must be PNG or JPEG")
        end
      end

      def reference
        "image-#{Digest::SHA1.hexdigest(@data)[0, 8]}"
      end

      def contains_png_image?(data)
        data[0, 8] == PNG_SIGNATURE
      end

      def contains_jpeg_image?(data)
        data[0..1] == JPEG_START && data[-2..] == JPEG_END
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
docxify-0.0.5 lib/docxify/element/file.rb