Sha256: 2fe976e941824c4d4e1d8121070ff6edf64e7f3d08732eda41ddbb6a724e8f02

Contents?: true

Size: 1.38 KB

Versions: 9

Compression:

Stored size: 1.38 KB

Contents

class Syncano
  # Class representing queues used in batch requests
  class BatchQueue
    # Limit for amount of batch operations send in one request
    REQUEST_LIMIT = 10
    attr_reader :responses

    # Constructor for Syncano::BatchQueue
    # @param [Syncano::Clients::Base] client
    def initialize(client)
      super()
      self.client = client
      self.queue = []
      self.responses = []
    end

    # Adds element to the queue and prune it if is full
    # @param [Syncano::BatchQueueElement] element
    def add(element)
      self.queue << element
      prune! while full?
    end

    # Alias for "add" method
    # @param [Syncano::BatchQueueElement] element
    def <<(element)
      add(element)
    end

    # Counts elements in the queue
    # @return [Integer]
    def count
      queue.count
    end

    # Checks if queue is full
    # @return [TrueClass, FalseClass]
    def full?
      count >= REQUEST_LIMIT
    end

    # Prunes queue and makes batch request to the api
    # @return [Array] collection of Syncano::Response objects
    def prune!
      part = self.queue.slice!(0, 10)
      ::Jimson::Client.batch(client) do |batch_client|
        part.each do |element|
          element.perform!(batch_client)
        end
      end.collect { |response| self.responses << response }
    end

    protected

    attr_accessor :client, :queue
    attr_writer :responses
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
syncano-3.1.4 lib/syncano/batch_queue.rb
syncano-3.1.3 lib/syncano/batch_queue.rb
syncano-3.1.2 lib/syncano/batch_queue.rb
syncano-3.1.1 lib/syncano/batch_queue.rb
syncano-3.1.1.beta5 lib/syncano/batch_queue.rb
syncano-3.1.1.beta4 lib/syncano/batch_queue.rb
syncano-3.1.1.beta3 lib/syncano/batch_queue.rb
syncano-3.1.1.beta2 lib/syncano/batch_queue.rb
syncano-3.1.1.beta lib/syncano/batch_queue.rb