module ActiveDump
namespace
namespace
namespace
Constants
- CFG_DB
- CFG_DUMP
- DATE
- DUMP
- VERSION
Public Class Methods
all_models()
click to toggle source
get all existing models’ names
# File lib/active-dump.rb, line 103 def self.all_models # {{{1 return @models if @models eager_load! @models = ActiveRecord::Base.descendants.select do |m| (m.to_s != 'ActiveRecord::SchemaMigration') && \ m.table_exists? && m.exists? end .map(&:to_s) end
config(cfg = {})
click to toggle source
configuration
# File lib/active-dump.rb, line 113 def self.config(cfg = {}) # {{{1 c1 = File.exists?(CFG_DUMP) ? YAML.load(File.read(CFG_DUMP)) : {} c2 = Hash[ c1.map { |k,v| [k.to_sym, v] } ] c3 = c2.merge cfg.reject { |k,v| v.nil? } c4 = { file: DUMP } .merge c3.reject { |k,v| v.nil? } c4[:models] && !c4[:models].empty? ? c4 : c4.merge(models: all_models) end
connection()
click to toggle source
ActiveRecord connection @todo use model?!
# File lib/active-dump.rb, line 124 def self.connection # {{{1 return @connection if @connection unless (ActiveRecord::Base.connection rescue nil) c = YAML.load ERB.new(File.read(CFG_DB)).result ActiveRecord::Base.establish_connection c[env] end @connection = ActiveRecord::Base.connection end
delete(cfg)
click to toggle source
delete all records
# File lib/active-dump.rb, line 55 def self.delete(cfg) # {{{1 conn = connection ActiveRecord::Base.transaction do cfg[:models].each do |m| sql = "DELETE FROM #{m.constantize.quoted_table_name};" execute conn, cfg, sql end end end
delete_record(conn, cfg, table, id)
click to toggle source
delete record w/ id; make sure everything is quoted !!!
# File lib/active-dump.rb, line 89 def self.delete_record(conn, cfg, table, id) sql = "DELETE FROM #{table} WHERE id = #{id};" execute conn, cfg, sql end
dump(cfg)
click to toggle source
dump to yaml
# File lib/active-dump.rb, line 26 def self.dump(cfg) # {{{1 data = Hash[ cfg[:models].map do |m| records = m.constantize.all.map(&:attributes) printf "dumping model %-30s: %10d record(s)\n", m, records.length if cfg[:verbose] or cfg[:dryrun] [m, records] end ] File.write cfg[:file], YAML.dump(data) unless cfg[:dryrun] end
eager_load!()
click to toggle source
eager_load! all rails engines’ models (if Rails is defined)
# File lib/active-dump.rb, line 134 def self.eager_load! # {{{1 return false if @eager_load if defined? ::Rails ::Rails::Engine.subclasses.each do |e| e.eager_load! end ::Rails.application.eager_load! end @eager_load = true end
env()
click to toggle source
like Rails.env; (cached)
# File lib/active-dump.rb, line 146 def self.env @env ||= ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development' end
execute(conn, cfg, sql)
click to toggle source
execute sql (optionally verbose)
# File lib/active-dump.rb, line 83 def self.execute(conn, cfg, sql) puts sql if cfg[:verbose] or cfg[:dryrun] conn.execute sql unless cfg[:dryrun] end
fix_seqs(cfg)
click to toggle source
fix postgresql sequences
# File lib/active-dump.rb, line 66 def self.fix_seqs(cfg) # {{{1 conn = connection ActiveRecord::Base.transaction do cfg[:models].each do |m| mod = m.constantize seq = conn.quote_table_name mod.sequence_name max = mod.all.max_by(&:id) n = (max ? max.id : 0) + 1; sql = "ALTER SEQUENCE #{seq} RESTART WITH #{n};" execute conn, cfg, sql end end end
insert_record(conn, cfg, table, cols, vals)
click to toggle source
insert data; make sure everything is quoted !!!
# File lib/active-dump.rb, line 95 def self.insert_record(conn, cfg, table, cols, vals) sql = "INSERT INTO #{table} (#{cols*','}) VALUES (#{vals*','});" execute conn, cfg, sql end
restore(cfg)
click to toggle source
restore from yaml; optionally delete existing records first
# File lib/active-dump.rb, line 37 def self.restore(cfg) # {{{1 data = YAML.load File.read(cfg[:file]) conn = connection ActiveRecord::Base.transaction do data.each do |m,records| table = m.constantize.quoted_table_name records.each do |record| cols = record.keys.map { |k| conn.quote_column_name k } vals = record.values.map { |v| conn.quote v } delete_record conn, cfg, table, conn.quote(record['id']) \ if cfg[:delete] insert_record conn, cfg, table, cols, vals end end end end