Sha256: 8414319c0dd63361504db5ade0877ab236614ebd43f76c09c8742b41a526f0b9

Contents?: true

Size: 963 Bytes

Versions: 12

Compression:

Stored size: 963 Bytes

Contents

module Killbill
  module Plugin
    module ActiveMerchant
      module ActiveRecord
        require 'active_record'

        # Closest from a streaming API as we can get with ActiveRecord
        class StreamyResultSet
          include Enumerable

          def initialize(limit, batch_size = 100, &delegate)
            @limit = limit
            @batch = [batch_size, limit].min
            @delegate = delegate
          end

          def each(&block)
            (0..(@limit - @batch)).step(@batch) do |i|
              result = @delegate.call(i, @batch)
              block.call(result)
              # Optimization: bail out if no more results
              break if result.nil? || result.empty?
            end if @batch > 0
            # Make sure to return DB connections to the Pool
            ::ActiveRecord::Base.connection.close
          end

          def to_a
            super.to_a.flatten
          end
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
killbill-3.1.11 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb
killbill-3.1.10 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb
killbill-3.1.9 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb
killbill-3.1.8 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb
killbill-3.1.7 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb
killbill-3.1.6 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb
killbill-3.1.5 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb
killbill-3.1.4 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb
killbill-3.1.3 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb
killbill-3.1.2 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb
killbill-3.1.1 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb
killbill-3.1.0 lib/killbill/helpers/active_merchant/active_record/models/streamy_result_set.rb