Development tools for the SchemaPlus family of gems.
Provides support for working with multiple ruby versions, ActiveRecord, and db versions. In particular provides a command
schema_dev for running rspec (or whatever) on the matrix or a slice or element of it. It also auto-generates the
.travis.yml file for travis-ci testing.
Creating a new gem for the SchemaPlus family
schema_dev script has a generator for new gems:
$ gem install schema_dev $ schema_dev gem new_gem_name
bundle gem, this creates a skeleton structure for a new gem. The structure includes appropriate dependencies on schema_monkey and on
schema_dev itself, and creates an initial
schema_dev.yml file, etc.
The client gem needs a file
schema_dev.yml in its root, which specifies the testing matrix among other things.
ruby: A single version of ruby, or a list of ruby versions.
activerecord: A single version of ActiveRecord, or a list of ActiveRecord versions
db: A single db adapter, or a list of db adapters.
quick: (Optional) Hash listing the version of ruby, activerecord, and db to use with
--quickoption. If not specified, the default is to use the last entry in each list.
exclude: (Optional) An array of hashes listing parts of the matrix to exclude. Each hash in the array may leave off
dbto exclude the slice along the missing dimension
If you change this file, it's a good idea to run
Of course you must have installed whichever database(s) you want to test.
For PostgreSQL and MySQL the tests need a db user with permissions to create and access databases: The default username used by the specs is 'schema_plus' for both PostgreSQL and MySQL; you can change them via:
$ export POSTGRESQL_DB_USER = pgusername $ export MYSQL_DB_USER = mysqlusername
For PostgreSQL and MySQL you must explicitly create the databases used by the tests:
$ rake create_databases # creates postgresql and/or mysql as needed
Running The Tests
In the root directory, you can run, e.g.,
$ schema_dev bundle install # or schema_dev bundle update $ schema_dev rspec
Which will run those commands over the whole matrix. You can also specify slices, via any combination of
$ schema_dev rspec --ruby 2.1.3 --activerecord 4.0
For convenience you can also use
--quick to run just one as specified in
If you want to pass extra arguments to a command, make sure to use
-- to avoid them being processed by
$ schema_dev rspec --quick -- -e 'select which spec'
For interactive debugging you may want to run rspec directly from the shell rather than through
schema_dev (which doesn't give you an interactive ptty). schema_dev echoes each command being run, preceded by a
$ schema_dev rspec --quick -- -e 'select which spec' -n *** ruby 2.1.5 - activerecord 4.2 - db postgresql [1 of 1] * /usr/bin/env BUNDLE_GEMFILE=gemfiles/activerecord-4.2/Gemfile.postgresql SHELL=`which bash` chruby-exec ruby-2.1.5 -- bundle exec rspec -e select\ which\ spec
There's no hidden environment setup; so you can copy and paste the command line into a shell:
$ /usr/bin/env BUNDLE_GEMFILE=gemfiles/activerecord-4.2/Gemfile.postgresql SHELL=`which bash` chruby-exec ruby-2.1.5 -- bundle exec rspec -e select\ which\ spec
For more info, see
$ schema_dev help $ schema_dev help rspec # etc.
Whenever you run a
schema_dev matrix command, it first freshens the various generated files; you can also run
schema_dev freshen manually.
The client gem will contain a "gemfiles" subdirectory tree containing the matrix of possible gemfiles; this entire tree gets created/updated automatically, and should be checked into the git repo.
Note that freshening the gemfiles happens automatically whenever you run a schema_dev matrix command, and blows away any previous files. So you should not attempt to change any files in
If you need to include extra specifications in the Gemfile (e.g. to specify a path for a gem), you can create a file
Gemfile.local in the project root, and its contents will be included in the Gemfile.
.travis.yml file gets created automatically. Don't edit it by hand.
schema_dev generates markdown describing the text matrix, and inserts it into the README.md, in a block guarded by markdown comments
[//]: # SCHEMA_DEV: MATRIX . . . [//]: # SCHEMA_DEV: MATRIX
The client gem's
spec/spec_helper includes this
require 'schema_dev/rspec' SchemaDev::Rspec.setup
This will take care of starting up
schema_monkey, connecting to the test database appropriately, and and setting up logging to a file specific to the test matrix cell.
The client gem's
Which defines the rake task
create_databases and also a task for travis-ci
Release notes for schema_dev versions:
- 3.11.1 - Lock pg version for older AR versions
- 3.11.0 - Add support for AR 5.2
- 3.10.1 - Bug fix in rspec db connection; loosen dependency to 5.*
- 3.10.0 - Add support for 5.1 (i.e. 5.1.*) and lock down dependencies on .
- 3.9.0 - Add support for AR 5.0.2, 5.0.3, 5.1.0 and 5.1.1. Thanks to @aliuk2012
- 3.8.1 - Fixed Gemnasium badge.
- 3.8.0 - Add support for AR 5.0.1
- 3.7.1 - Properly constrain AR 5.0 gemfiles to AR ~> 5.0.0
- 3.7.0 - Add support for AR 5.0.0 (beta)
- 3.6.2 - Fix README template error introduced in 3.6.0
- 3.6.1 - Further fix mysql2 dependencies.
- 3.6.0 - Add support for AR 4.2.6; fix mysql2 dependencies; internal improvements and bug fixes. Thanks to @dmeranda and @dholdren G