Sha256: d7906f53c63c5d57314b17b7ddc9c2ffee8e3b79f551dce95bee757b00634255
Contents?: true
Size: 1.5 KB
Versions: 1
Compression:
Stored size: 1.5 KB
Contents
require 'database_flusher/active_record/adapters/abstract_adapter' require 'database_flusher/active_record/adapters/mysql2_adapter' require 'database_flusher/active_record/adapters/postgresql_adapter' require 'database_flusher/active_record/adapters/sqlite_adapter' module DatabaseFlusher module ActiveRecord class DeletionStrategy attr_reader :tables, :adapter class Subscriber def initialize(strategy) @strategy = strategy end def call(_, _, _, _, payload) sql = payload[:sql] match = sql.match(/\A\s*INSERT(?:\s+IGNORE)?(?:\s+INTO)?\s+(?:\.*[`"]?([^.\s`"]+)[`"]?)*/i) return unless match table = match[1] if table @strategy.tables << table end end end def initialize @tables = Set.new end def start @subscriber ||= ActiveSupport::Notifications.subscribe( 'sql.active_record', Subscriber.new(self) ) connection = ::ActiveRecord::Base.connection @adapter = DatabaseFlusher::ActiveRecord. const_get("#{connection.adapter_name}Adapter"). new(connection) end def stop if @subscriber ActiveSupport::Notifications.unsubscribe(@subscriber) @subscriber = nil end end def clean return if tables.empty? # puts "Cleaning #{tables.inspect}" adapter.delete(*tables) tables.clear end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
database_flusher-0.2.0 | lib/database_flusher/active_record/deletion_strategy.rb |