From 7bc7341cbf29608ad3971d22d6466cecb9d39d4e Mon Sep 17 00:00:00 2001 From: deeeki Date: Sun, 22 Jun 2014 00:24:24 +0900 Subject: [PATCH] Implement handy interface for configuring filtered tables --- lib/database_rewinder.rb | 7 ++++++ spec/database_rewinder_spec.rb | 40 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/lib/database_rewinder.rb b/lib/database_rewinder.rb index 585ec8e..477d41f 100644 --- a/lib/database_rewinder.rb +++ b/lib/database_rewinder.rb @@ -29,6 +29,13 @@ def all=(v) @clean_all = v end + def filter_options=(options) + return unless options.is_a?(Hash) + @only = options[:only] if options.key?(:only) + @except = options[:except] if options.key?(:except) + @cleaners.each {|c| c.only, c.except = Array(@only), Array(@except)} + end + def cleaners create_cleaner 'test' if @cleaners.empty? @cleaners diff --git a/spec/database_rewinder_spec.rb b/spec/database_rewinder_spec.rb index ad82973..2251403 100644 --- a/spec/database_rewinder_spec.rb +++ b/spec/database_rewinder_spec.rb @@ -17,6 +17,46 @@ it { should == ['foo'] } end + describe '.filter_options=' do + before do + @dbr_only = DatabaseRewinder.instance_variable_set(:@only, ['foos']) + @dbr_except = DatabaseRewinder.instance_variable_set(:@except, ['bars']) + @cleaner = DatabaseRewinder.cleaners.first + @cleaner_only, @cleaner_except = @cleaner.only, @cleaner.except + DatabaseRewinder.filter_options = filter_options + end + + context 'with only option' do + let(:filter_options) { { only: ['bazs'] } } + it 'should set only option and keep except option' do + expect(DatabaseRewinder.instance_variable_get(:@only)).to eq(['bazs']) + expect(DatabaseRewinder.instance_variable_get(:@except)).to eq(@dbr_except) + expect(@cleaner.only).to eq(['bazs']) + expect(@cleaner.except).to eq(@cleaner_except) + end + end + + context 'with except option' do + let(:filter_options) { { except: ['bazs'] } } + it 'should set except option and keep only option' do + expect(DatabaseRewinder.instance_variable_get(:@only)).to eq(@dbr_only) + expect(DatabaseRewinder.instance_variable_get(:@except)).to eq(['bazs']) + expect(@cleaner.only).to eq(@cleaner_only) + expect(@cleaner.except).to eq(['bazs']) + end + end + + context 'with only and except options' do + let(:filter_options) { { only: ['bazs'], except: [] } } + it 'should set only and except options' do + expect(DatabaseRewinder.instance_variable_get(:@only)).to eq(['bazs']) + expect(DatabaseRewinder.instance_variable_get(:@except)).to eq([]) + expect(@cleaner.only).to eq(['bazs']) + expect(@cleaner.except).to eq([]) + end + end + end + describe '.record_inserted_table' do before do DatabaseRewinder.database_configuration = {'foo' => {'adapter' => 'sqlite3', 'database' => 'db/test.sqlite3'}}