Sha256: 0fabd314fe0a349f98ce6733f1ac2addf23064593ee2f496da4a6622bfb16dc2

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

module Logux
  module Process
    class Batch
      attr_reader :stream, :batch

      def initialize(stream:, batch:)
        @stream = stream
        @batch = batch
      end

      def call
        last_chunk = batch.size - 1
        preprocessed_batch.map.with_index do |chunk, index|
          case chunk[:type]
          when :action
            process_action(chunk: chunk.slice(:action, :meta))
          when :auth
            process_auth(chunk: chunk[:auth])
          end
          stream.write(',') if index != last_chunk
        end
      end

      def process_action(chunk:)
        Logux::Process::Action.new(stream: stream, chunk: chunk).call
      end

      def process_auth(chunk:)
        Logux::Process::Auth.new(stream: stream, chunk: chunk).call
      end

      def preprocessed_batch
        @preprocessed_batch ||= batch.map do |chunk|
          case chunk[0]
          when 'action'
            preprocess_action(chunk)
          when 'auth'
            preprocess_auth(chunk)
          end
        end
      end

      def preprocess_action(chunk)
        { type: :action,
          action: Logux::Action.new(chunk[1]),
          meta: Logux::Meta.new(chunk[2]) }
      end

      def preprocess_auth(chunk)
        { type: :auth,
          auth: Logux::Auth.new(user_id: chunk[1],
                                credentials: chunk[2],
                                auth_id: chunk[3]) }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
logux-rack-0.1.0 lib/logux/process/batch.rb