ActiveRecord::DataIntegrity
Checks your ActiveRecord models to match data integrity principles and rules. Out of the box it detects many issues such as the lack of foreign keys.
Intallation
group :development do
...
gem 'activerecord-data_integrity', require: false
end
Quickstart
Run data_integrity
CLI-tool in your Rails project's folder:
cd ~/amplifr
bundle exec data_integrity
It will load the Rails application, check the data integrity issues and give the similar output:
BelongsTo/ForeignKey: Label belongs_to project but has no foreign key to projects.id
Accordance/TablePresence: Stat::Hourly has no underlying table hourly_stats
...
Options
Check only specified database rules with --only
options:
bundle exec data_integrity --only HasMany/ForeignKey,BelongsTo/ForeignKey
Check only specified model with the list of the model full with:
bundle exec data_integrity --only HasMany/ForeignKye Billing::Account User
Supported Issues
For now tool checks the following issues:
- The lack of database foreign keys for belongs_to/has_many associations (
HasMany/ForeignKey
andBelongsTo/ForeignKey
rule) - The lack of not-null constraint for the columns with presence validation (
Validation/Presence
rule) - Inclusion validated colums should have
enum
data type (Validation/Inclusion
rule)
Roadmap (TODO & Help Wanted)
- Support extra database issues, such as:
- presence of
dependend
option set for association and not confliction with underlyingON DELETE
option of foreign key contraint - check for foreign keys to have bigint data type
- presence of index for the foreign keys search
- checks for paranoia models and indexes exclusion "removed" rows
-
Config for exluding some rules for the specific models (rubocop like)
-
Autofix for the fixing the issue, mostly by generating safe migrations
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/activerecord-data_integrity.
Run tests
The easiest way to tests up and running is to use handy dip gem with Docker and Docker Compose:
gem install dip
git checkout git@github.com:dsalahutdinov/activerecord-data_integrity.git
cd activerecord-data_integrity
dip provision
dip rspec
Otherwise (without Docker) set up environment manually:
git checkout git@github.com:dsalahutdinov/activerecord-data_integrity.git
cd activerecord-data_integrity
bundle install
bundle appraisal
DB_HOST=localhost DB_NAME=testdb DB_USERNAME=postgres bundle appraisal rspec
License
The gem is available as open source under the terms of the MIT License.