require 'logger'

$:.unshift(File.dirname(__FILE__) + '/../../../activerecord/lib')
require 'active_record'
require 'active_record/fixtures'

module ActiveModel
  module TestsDatabase
    def self.included(base)
      ActiveRecord::Base.logger = Logger.new("debug.log")
      ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')

      base.send :include, ActiveRecord::TestFixtures
      base.setup :setup_database
    end

    def setup_database
      unless $schema_file_loaded
        begin
          # TODO : May the better way be with you
          original, $stdout = $stdout, StringIO.new
          load(SCHEMA_FILE)
        ensure
          $stdout = original
        end

        $schema_file_loaded = true
      end
    end
  end
end

require 'logger'

$:.unshift(File.dirname(__FILE__) + '/../../../activerecord/lib')
require 'active_record'
require 'active_record/fixtures'

module ActiveModel
  module TestsDatabase
    mattr_accessor :connected

    def self.included(base)
      unless self.connected
        setup_connection
        setup_schema
      end

      base.send :include, ActiveRecord::TestFixtures
    end

    def self.setup_schema
      original, $stdout = $stdout, StringIO.new
      load(SCHEMA_FILE)
    ensure
      $stdout = original
      self.connected = true
    end

    def self.setup_connection
      defaults = { :database => ':memory:' }
      begin
        adapter = defined?(JRUBY_VERSION) ? 'jdbcsqlite3' : 'sqlite3'
        options = defaults.merge :adapter => adapter, :timeout => 500
        ActiveRecord::Base.establish_connection(options)
      rescue Exception
        $stderr.puts 'SQLite 3 unavailable; trying SQLite 2.'
        options = defaults.merge :adapter => 'sqlite'
        ActiveRecord::Base.establish_connection(options)
      end
    end
  end
end

Use mattr_accessor in TestsDatabase instead of setup method
Use mattr_accessor in TestsDatabase instead of setup method
