class ActiveRecord::Base

Public Class Methods

bulk_insert!(record_list) click to toggle source
# File lib/notifiable/active_record.rb, line 5
def self.bulk_insert!(record_list)
  return if record_list.empty?
  
  adapter_type = connection.adapter_name.downcase.to_sym
  case adapter_type
  when :postgresql
    self.connection.execute(postgresql_bulk_insert_sql(record_list))      
  else
    self.default_bulk_insert(record_list)
  end
end

Protected Class Methods

convert_record_list(record_list) click to toggle source
# File lib/notifiable/active_record.rb, line 18
def self.convert_record_list(record_list)
  key_list = record_list.map(&:keys).flatten.uniq.sort

  value_list = record_list.map do |rec|
    list = []
    key_list.each {|key| list <<  ActiveRecord::Base.connection.quote(rec[key]) }
    list
  end

  return [key_list, value_list]
end
default_bulk_insert(record_list) click to toggle source
# File lib/notifiable/active_record.rb, line 35
def self.default_bulk_insert(record_list)
  ActiveRecord::Base.transaction do
    record_list.each{|record| Notifiable::NotificationStatus.create(record) }
  end
end
postgresql_bulk_insert_sql(record_list) click to toggle source
# File lib/notifiable/active_record.rb, line 30
def self.postgresql_bulk_insert_sql(record_list)
  key_list, value_list = convert_record_list(record_list)        
  "INSERT INTO #{self.table_name} (#{key_list.join(", ")}) VALUES #{value_list.map {|rec| "(#{rec.join(", ")})" }.join(" ,")}"
end