Sha256: e8703dd0dd820372bd5bce03d725a19530893fc29a2c723f4ee6931ab55dccea

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

module Kangaroo
  module Model
    module MassImport
      extend ActiveSupport::Concern
      
      module ClassMethods
        def mass_import objects, options = {}
          batch_size = options[:batch_size]
          objects = objects.select { |o| self === o }
          
          if batch_size
            until objects.empty?
              batch_objects = objects.slice! 0, batch_size
              
              import_data *prepare_mass_import(batch_objects)
            end
          else
            import_data *prepare_mass_import(objects)
          end
        end
        
        protected
        def prepare_mass_import objects
          changed_fields = objects.sum [], &:changed
          changed_values = []
          
          changed_fields.uniq!
          objects.each do |object|
            attrs = object.instance_variable_get '@attributes'
            
            values = [object.id] + attrs.values_at(*changed_fields)
            changed_values << values
          end
          
          changed_fields = %w(.id) + changed_fields
          
          [changed_fields, changed_values]
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kangaroo-0.1.0.alpha1 lib/kangaroo/model/mass_import.rb