envygeeks/ruby-active_record_mocks

View on GitHub
lib/active_record_mocks/mock.rb

Summary

Maintainability
A
0 mins
Test Coverage
require_relative "mock/table"
require "active_record"

module ActiveRecordMocks
  class Mock
    class ExtensionsUnsupported < StandardError
      def initialize
        super "Your database server does not support extensions."
      end
    end

    attr_accessor :tables

    def enable_extension(ext)
      raise_if_extensions_unsupported!
      ActiveRecord::Migration.tap do |o|
        o.suppress_messages do
          o.enable_extension(ext)
        end
      end
    end

    def create_table(*args, &block)
      Table.new(*args).tap do |o|
        if block_given?
          block.call(o)
        end

        o.setup_mocking!
        tables.push(o)
        return o.model
      end
    end

    def initialize
      @tables = [
      ]
    end

    def delete_tables
      tables.each do |t|
        Object.send(:remove_const, t.model_name)
        ActiveRecord::Base.connection.drop_table(t.table_name)
      end
    nil
    end

    private
    def raise_if_extensions_unsupported!
      if ! ActiveRecord::Base.connection.respond_to?(:enable_extension)
        raise ExtensionsUnsupported
      end
    end
  end
end