Skip to content
Create temporary table-backed ActiveRecord models for use in tests
Ruby
Find file
Latest commit ff981de Apr 30, 2016 @kitop kitop Merge pull request #41 from wbotelhos/patch-1
typo fix
Failed to load latest commit information.
lib Implement Temping.cleanup Mar 25, 2016
spec Implement Temping.cleanup Mar 25, 2016
.gitignore Bump to 3.0.1 Apr 30, 2013
.travis.yml Added Ruby v 2.3.0 Mar 13, 2016
CONTRIBUTING.md
Gemfile Refactor some internals Apr 30, 2013
Gemfile.lock v3.5.0 Mar 28, 2016
LICENSE Adding LICENSE Dec 28, 2009
NEWS.md v3.5.0 Mar 28, 2016
README.md typo Apr 30, 2016
Rakefile Revert Rakefile to master. Mar 22, 2016
temping.gemspec v3.5.0 Mar 28, 2016

README.md

Temping

Code Climate Build Status Gem Version

Description

Temping allows you to create arbitrary ActiveRecord models backed by a temporary SQL table for use in tests. You may need to do something like this if you're testing a module that is meant to be mixed into ActiveRecord models without relying on a concrete class.

Temping will use your existing database connection. As we're using temporary tables all data will be dropped when the database connection is terminated.

Examples

The basic setup of a model involves calling create with a symbol that represents the class name of the model you wish to create. By default, this will create a temporary table with an id column.

Temping.create :dog

Dog.create => #<Dog id: 1>
Dog.table_name => "dogs"
Dog => Dog(id: integer)

Additional database columns can be specified via the with_columns method which uses Rails migration syntax:

Temping.create :dog do
  with_columns do |t|
    t.string :name
    t.integer :age, :weight
  end
end

Dog.create

# => #<Dog id: 1, name: nil, age: nil, weight: nil>

When a block is passed to create, it is evaluated in the context of the class. This means anything you do in an ActiveRecord model class body can be accomplished in the block including method definitions, validations, module includes, etc.

Temping.create :dog do
  validates :name, presence: true

  with_columns do |t|
    t.string :name
    t.integer :age, :weight
  end

  def quack
    "arf!"
  end
end

Dog.create!

# => ActiveRecord::RecordInvalid: Validation failed: Name can't be blank

codey = Dog.create! name: "Codey"
codey.quack

# => "arf!"

Installation

In your Gemfile:

gem "temping"

In test_helper.rb add the following block to ActiveSupport::TestCase:

class ActiveSupport::TestCase
  # ...
  teardown do
    Temping.teardown
  end
  # ...
end

Or, if you're using rspec, in spec_helper.rb add the following block to RSpec.configure:

RSpec.configure do |config|
  # ...
  config.after do
    Temping.teardown
  end
  # ...
end

Alternatively you may want to just cleanup tables, but keep defined models:

Temping.cleanup

Bugs, Features, Feedback

All contributions are welcome! Please take a look at CONTRIBUTING.md for some tips.

Something went wrong with that request. Please try again.