Sha256: 6d62e58f75ba1eb0628e8ff6d16db09ecbb025d10e0f310382f1efd002197518

Contents?: true

Size: 1.6 KB

Versions: 2

Compression:

Stored size: 1.6 KB

Contents

require 'base64'
require 'zlib'

require 'whirled_peas/device/rendered_frame'

module WhirledPeas
  module Utils
    module FileHandler
      module FileWriter
        VERSION = '1'

        def self.write(fp, rendered_frames)
          fp.puts rendered_frames.count
          rendered_frames.each do |rendered_frame|
            fp.puts rendered_frame.duration
            encoded = Base64.encode64(rendered_frame.strokes)
            fp.puts encoded.count("\n")
            fp.puts encoded
          end
        end
      end
      private_constant :FileWriter

      class FileReaderV1
        def self.read(fp)
          num_frames = Integer(fp.readline.chomp, 10)
          num_frames.times.map do
            duration = Float(fp.readline.chomp)
            num_strokes = Integer(fp.readline.chomp, 10)
            strokes = Base64.decode64(num_strokes.times.map { fp.readline }.join)
            Device::RenderedFrame.new(strokes, duration)
          end
        end

        private

        attr_reader :file
      end
      private_constant :FileReaderV1

      READERS = {
        '1' => FileReaderV1
      }
      private_constant :READERS

      def self.write(file, rendered_frames)
        Zlib::GzipWriter.open(file, Zlib::BEST_COMPRESSION) do |gz|
          gz.puts FileWriter::VERSION
          FileWriter.write(gz, rendered_frames)
        end
      end

      def self.read(file)
        Zlib::GzipReader.open(file) do |gz|
          version = gz.gets.chomp
          raise ArgumentError, "Invalid file: #{file}" unless READERS.key?(version)
          READERS[version].read(gz)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
whirled_peas-0.13.0 lib/whirled_peas/utils/file_handler.rb
whirled_peas-0.12.0 lib/whirled_peas/utils/file_handler.rb