Sha256: 4da3d1dd7876ec524c72256339bfeea10f35686f84d35649386b39c299a3c302
Contents?: true
Size: 1.52 KB
Versions: 1
Compression:
Stored size: 1.52 KB
Contents
module ActiveTable class Base < ActiveRecord::Base @@tables = {} def self.active_table(&block) block.call ActiveRecord::Base.connection_pool.connections.each do |connection| create_tables(connection) end self.reset_column_information self.define_attribute_methods end def self.create_table(name, options = {}, &block) class_name = self.name self.set_table_name name @@tables[class_name] = {:name => name, :options => options, :block => block, :rows => []} end def self.insert(params) class_name = self.name @@tables[class_name][:rows] << params end def self.create_tables(connection) @@tables.each_value do |table| next if connection.active_table_loaded_for?(table[:name]) connection.create_table table[:name], table[:options].merge(:temporary => true) do |t| table[:block].call(t) end table[:rows].each do |row| connection.execute generate_insert_sql_for_hash(connection, table[:name], row) end connection.mark_active_table_as_loaded(table[:name]) end end def self.generate_insert_sql_for_hash(connection, table_name, params) keys = params.keys.map {|k| connection.quote_column_name(k.to_s)}.join(", ") values = params.values.map {|v| connection.quote(v.to_s)}.join(", ") "INSERT INTO #{connection.quote_table_name(table_name.to_s)} (#{keys}) VALUES (#{values})" end def self.reset_table_information @@tables = {} end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
active_table-0.0.3 | lib/active_table/base.rb |