Sha256: e81f39f92dc9df82a1965dcf9d2a53bb75f2eed2bf9bb60c7c543d0a9d040e06

Contents?: true

Size: 1.71 KB

Versions: 1

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

module Vedeu

  module Output

    # During the conversion of a Vedeu::Cells::Char object into a
    # string of escape sequences, this class removes multiple
    # occurences of the same escape sequence, resulting in a smaller
    # payload being sent to the renderer.
    #
    # @api private
    #
    class Compressor

      include Vedeu::Common
      include Vedeu::Renderers::Options

      # @param (see #initialize)
      # @return (see #render)
      def self.render(output, options = {})
        new(output, options).render
      end

      # Returns a new instance of Vedeu::Output::Compressor.
      #
      # @param output [Vedeu::Models::Page]
      # @param options [Hash]
      # @option options compression [Boolean]
      # @return [Vedeu::Output::Compressor]
      def initialize(output, options = {})
        @output  = output
        @options = options
      end

      # @note
      #   - Takes approximately ~6ms for 2100 chars. (2015-11-25)
      #   - Takes approximately ~25ms for 2100 chars. (2015-07-25)
      # @return [String]
      # @return [Array<void>|String]
      def render
        return [] unless output?

        Vedeu::Output::CompressorCache.cache(content, compression?)
      end

      protected

      # @!attribute [r] output
      # @return [Array<Array<Vedeu::Cells::Char>>]
      attr_reader :output

      private

      # Returns the output with all of the empty cells removed to make
      # compression faster.
      #
      # @return [Array]
      def content
        Vedeu::Output::Compressors::Empty.with(output.content)
      end

      # @return [Boolean]
      def output?
        present?(output)
      end

    end # Compressor

  end # Output

end # Vedeu

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vedeu-0.8.32 lib/vedeu/output/compressor.rb