Skip to content

Latest commit

 

History

History
131 lines (92 loc) · 2.63 KB

README.md

File metadata and controls

131 lines (92 loc) · 2.63 KB

temporary_tables

CI Gem Version

Use temporary_tables to create temporary tables and models in RSpec specs, rather than create and maintain a dummy Rails application or messy block-level constants.

This gem was extracted from Keygen.

Sponsored by:

Keygen

A fair source software licensing and distribution API.

Installation

Add this line to your application's Gemfile:

gem 'temporary_tables'

And then execute:

$ bundle

Or install it yourself as:

$ gem install temporary_tables

Usage

temporary_table

To define a temporary table:

describe Example do
  temporary_table :users do |t|
    t.string :email
    t.string :first_name
    t.string :last_name
    t.index :email, unique: true
  end

  it 'should define a table' do
    expect(ActiveRecord::Base.connection.table_exists?(:users)).to be true
  end
end

The full Active Record schema API is available.

temporary_model

To define an Active Record:

describe Example do
  temporary_model :user do
    has_many :posts
  end

  it 'should define a record' do
    expect(const_defined?(:User)).to be true
  end
end

To define an Active Model:

describe Example do
  temporary_model :guest_user, table_name: nil, base_class: nil do
    include ActiveModel::Model
  end

  it 'should define a model' do
    expect(const_defined?(:GuestUser)).to be true
  end
end

To define a PORO:

describe Example do
  temporary_model :null_user, table_name: nil, base_class: nil do
    # ...
  end

  it 'should define a PORO' do
    expect(const_defined?(:NullUser)).to be true
  end
end

Future

Right now, the gem only supports RSpec, but we're open to pull requests that extend the functionality to other testing frameworks.

Supported Rubies

temporary_tables supports Ruby 3.1 and above. We encourage you to upgrade if you're on an older version. Ruby 3 provides a lot of great features, like better pattern matching and a new shorthand hash syntax.

Is it any good?

Yes.

Contributing

If you have an idea, or have discovered a bug, please open an issue or create a pull request.

License

The gem is available as open source under the terms of the MIT License.