Succotash
A simple seeding strategy for your project which helps maintain and separate static and sample data.
Installation
Add this line to your application's Gemfile:
gem 'succotash'
And then execute:
$ bundle
Or install it yourself as:
$ gem install succotash
Automatic configuration
$ rake succotash:install
Manual configuration
Create the following files
db/seeds/static.yml
# list file names that needs to be included in the order required
# eg
# :static_seed_files:
# - customer_types.rb
# - error_codes.rb
:static_seed_files:
db/seeds/sample.yml
# list file names that needs to be included in the order required
# eg
# :sample_seed_files:
# - user_seed.rb
# - test_file.rb
:sample_seed_files:
Problem
- Inconsistent approach to seeding data on development, integration and staging causing confusion and a loss of productivity (for example when manually seeded data is lost after a drop+seed)
- Different approaches may be required for different kinds of seed data (sample seed, look-up table seed)
- No defined approach to migrating data when structure changes (even more important now that we are live)
These problems cost time for developers as they build local versions of services and each time they move services into integration, staging, acceptance and production.
Definitions
Static Data
Data that is required by the system in order for the system to function correctly. We should assume that this is run against production after every release so it should be idempotent. It would typically contain lookup data, but it must not include sample users or example data.
Sample Data
Data that is required to demo the system or individual features. Typically this will be run after a db:reset (and after the seed). It should never be run against production and therefore does not have to be idempotent.
Idempotent
Doesn’t change anything if you run it more than once, or more formally: ‘denoting an element of a set which is unchanged in value when multiplied or otherwise operated on by itself.’)
Usage
Both static and sample data.
$ rake db:seed
Static data only.
$ rake db:seed:static
Sample data only.
$ rake db:seed:sample
test.rb file in the db/seeds/static directory
$ rake db:seed:static:test
test.rb file in the db/seeds/sample directory
$ rake db:seed:sample:test
Development
After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/CreatekIO/succotash.
License
The gem is available as open source under the terms of the MIT License.