Sha256: 1aaa2ff9a66050be10be9955242fd7df64cb064b62bf6a139cf31d8bc198ad74

Contents?: true

Size: 1.49 KB

Versions: 2

Compression:

Stored size: 1.49 KB

Contents

require 'memory_test_fix/schema_file_loader'
require 'active_support/core_ext/kernel/reporting'

module MemoryTestFix
  # Set up database schema into in-memory database.
  class SchemaLoader
    def self.init_schema
      new.init_schema
    end

    def initialize(options = {})
      @configuration = options[:configuration] || ActiveRecord::Base.connection_config
      @migrator = options[:migrator] || ActiveRecord::Migrator
      @loader = options[:loader] || SchemaFileLoader
    end

    def init_schema
      return unless in_memory_database?

      inform_using_in_memory unless silent?

      if silent? || quiet?
        load_schema_silently
      else
        load_schema
      end
    end

    private

    def in_memory_database?
      in_memory? && sqlite3?
    end

    def in_memory?
      @configuration[:database] == ':memory:' || @configuration[:dbfile] == ':memory:'
    end

    def sqlite3?
      @configuration[:adapter] == 'sqlite3'
    end

    def verbosity
      @configuration[:verbosity]
    end

    def silent?
      verbosity == "silent"
    end

    def quiet?
      verbosity == "quiet"
    end

    def migrate
      @configuration[:migrate] == true
    end

    def inform_using_in_memory
      puts "Creating sqlite :memory: database"
    end

    def load_schema
      if migrate
        @migrator.up('db/migrate')
      else
        @loader.load_schema
      end
    end

    def load_schema_silently
      silence_stream STDOUT do
        load_schema
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
memory_test_fix-1.2.1 lib/memory_test_fix/schema_loader.rb
memory_test_fix-1.2.0 lib/memory_test_fix/schema_loader.rb