Sha256: 3178b50dcb3d6a38f20aab3ebeb8b2010bb7c2636e1739cf80ff1713e26bfdbf

Contents?: true

Size: 1.01 KB

Versions: 3

Compression:

Stored size: 1.01 KB

Contents

module Carrierwave
  module Base64
    class Base64StringIO < StringIO
      class ArgumentError < StandardError; end

      attr_accessor :file_format, :file_name

      def initialize(encoded_file, file_name_method_or_string)
        description, encoded_bytes = encoded_file.split(',')

        raise ArgumentError unless encoded_bytes
        raise ArgumentError if encoded_bytes.eql?('(null)')

        @file_name = extract_file_name(file_name_method_or_string)
        @file_format = get_file_format description
        bytes = ::Base64.decode64 encoded_bytes

        super bytes
      end

      def original_filename
        File.basename("#{@file_name}.#{@file_format}")
      end

      private

      def get_file_format(description)
        regex = /([a-z0-9]+);base64\z/
        regex.match(description).try(:[], 1)
      end

      def extract_file_name(method_or_string)
        if method_or_string.is_a?(Proc)
          method_or_string.call
        else
          method_or_string
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
carrierwave-base64-2.3.5 lib/carrierwave/base64/base64_string_io.rb
carrierwave-base64-2.3.4 lib/carrierwave/base64/base64_string_io.rb
carrierwave-base64-2.3.3 lib/carrierwave/base64/base64_string_io.rb