module Apartment module Spec # # Define the interface methods required to # use an adapter shared example # # module AdapterRequirements extend ActiveSupport::Concern included do let(:db1){ Apartment::Test.next_db } let(:db2){ Apartment::Test.next_db } let(:connection){ ActiveRecord::Base.connection } before do ActiveRecord::Base.establish_connection config subject.create(db1) subject.create(db2) end after do # Reset before dropping (can't drop a db you're connected to) subject.reset # sometimes we manually drop these schemas in testing, don't care if we can't drop, hence rescue subject.drop(db1) rescue true subject.drop(db2) rescue true ActiveRecord::Base.clear_all_connections! Apartment::Database.reload! end end %w{subject config database_names default_database}.each do |method| define_method method do raise "You must define a `#{method}` method in your host group" end unless defined?(method) end end end end