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 +