Sha256: 1c5607a52ae46ae330a466ce9d341533c5282ca9d664e7e594ba7a0c86eca869

Contents?: true

Size: 1.68 KB

Versions: 2

Compression:

Stored size: 1.68 KB

Contents

module AktionTestRails
  module ModelBuilder
    def self.included(example_group)
      example_group.class_eval do
        before do
          @created_tables ||= []
        end

        after do
          drop_created_tables
        end
      end
    end

    def create_table(table_name, options = {}, &block)
      connection = ActiveRecord::Base.connection

      begin
        connection.execute("DROP TABLE IF EXISTS #{table_name}")
        connection.create_table(table_name, options, &block)
        @created_tables << table_name
        connection
      rescue Exception => e
        connection.execute("DROP TABLE IF EXISTS #{table_name}")
        raise e
      end
    end

    def define_model_class(class_name, &block)
      define_class(class_name, ActiveRecord::Base, &block)
    end

    def define_active_model_class(class_name, options = {}, &block)
      define_class(class_name) do
        include ActiveModel::Validations

        options[:accessors].each do |column|
          attr_accessor column.to_sym
        end

        class_eval(&block) if block_given?
      end
    end

    def define_model(name, columns = {}, &block)
      class_name = name.to_s.pluralize.classify
      table_name = class_name.tableize

      create_table(table_name) do |table|
        columns.each do |name,type|
          table.column name, type
        end
      end

      define_model_class(class_name, &block)
    end

    def drop_created_tables
      connection = ActiveRecord::Base.connection

      @created_tables.each do |table_name|
        connection.execute("DROP TABLE IF EXISTS #{table_name}")
      end
    end
  end
end

RSpec.configure do |config|
  config.include AktionTestRails::ModelBuilder
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
aktion_test_rails-0.1.1 lib/aktion_test_rails/model_builder.rb
aktion_test_rails-0.1.0 lib/aktion_test_rails/model_builder.rb