Sha256: 7814c212234d9501c6b6f9c143ed1fb0b7b02899f4e3f916b63130a2f3a15479

Contents?: true

Size: 918 Bytes

Versions: 2

Compression:

Stored size: 918 Bytes

Contents

# frozen_string_literal: true

# A parts holds media
module Goldendocx
  module Parts
    class Media
      BASE64_PNG_PATTERN = %r{
        ^data:image/png;base64,
        (?<data>(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?)$
      }x.freeze

      def initialize(name, data)
        @name = name
        @data = data
      end

      def target
        "media/#{@name}"
      end

      def type
        'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'
      end

      def input_stream
        return StringIO.new(BASE64_PNG_PATTERN.match(@data)['data'].unpack1('m'), 'rb') if base64_png_data?

        @data
      end

      def write_to(zos)
        zos.put_next_entry "word/#{target}"
        zos.write input_stream.read
      end

      private

      def base64_png_data?
        @data.is_a?(String) && @data.match?(BASE64_PNG_PATTERN)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
goldendocx-0.2.3 lib/goldendocx/parts/media.rb
goldendocx-0.2.2 lib/goldendocx/parts/media.rb