From 1f1c3452c5e4599b1ff0353b069b5b6454479bde Mon Sep 17 00:00:00 2001 From: Ben Mabey Date: Fri, 8 May 2009 18:17:46 -0600 Subject: [PATCH] Extracted TruncationBase into own file and only require it for the strategies that need it. --- .../active_record/truncation.rb | 1 + lib/database_cleaner/configuration.rb | 2 - .../data_mapper/truncation.rb | 2 + lib/database_cleaner/truncation_base.rb | 40 +++++++++++++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 lib/database_cleaner/truncation_base.rb diff --git a/lib/database_cleaner/active_record/truncation.rb b/lib/database_cleaner/active_record/truncation.rb index ae1f7d2..9c3dcb6 100644 --- a/lib/database_cleaner/active_record/truncation.rb +++ b/lib/database_cleaner/active_record/truncation.rb @@ -1,3 +1,4 @@ +require "database_cleaner/truncation_base" module ActiveRecord module ConnectionAdapters diff --git a/lib/database_cleaner/configuration.rb b/lib/database_cleaner/configuration.rb index e503ceb..5945bdd 100644 --- a/lib/database_cleaner/configuration.rb +++ b/lib/database_cleaner/configuration.rb @@ -92,8 +92,6 @@ module DatabaseCleaner end - # common base class for truncation strategies - class TruncationBase def initialize(options = {}) diff --git a/lib/database_cleaner/data_mapper/truncation.rb b/lib/database_cleaner/data_mapper/truncation.rb index 4b025d0..125631f 100644 --- a/lib/database_cleaner/data_mapper/truncation.rb +++ b/lib/database_cleaner/data_mapper/truncation.rb @@ -1,3 +1,5 @@ +require "database_cleaner/truncation_base" + module DataMapper module Adapters diff --git a/lib/database_cleaner/truncation_base.rb b/lib/database_cleaner/truncation_base.rb new file mode 100644 index 0000000..3bde061 --- /dev/null +++ b/lib/database_cleaner/truncation_base.rb @@ -0,0 +1,40 @@ +class TruncationBase + + def initialize(options = {}) + if !options.empty? && !(options.keys - [:only, :except]).empty? + raise ArgumentError, "The only valid options are :only and :except. You specified #{options.keys.join(',')}." + end + if options.has_key?(:only) && options.has_key?(:except) + raise ArgumentError, "You may only specify either :only or :either. Doing both doesn't really make sense does it?" + end + + @only = options[:only] + @tables_to_exclude = (options[:except] || []) + if migration_storage = migration_storage_name + @tables_to_exclude << migration_storage + end + end + + def start + # no-op + end + + def clean + raise NotImplementedError + end + + + private + + def tables_to_truncate + raise NotImplementedError + end + + # overwrite in subclasses + # default implementation given because migration storage need not be present + def migration_storage_name + nil + end + +end +