Sha256: f20252e318aab6a8d2610b81ed34d518d8af51346be64385d98d7084581a4072

Contents?: true

Size: 911 Bytes

Versions: 1

Compression:

Stored size: 911 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

      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

1 entries across 1 versions & 1 rubygems

Version Path
goldendocx-0.3.0 lib/goldendocx/parts/media.rb