Checks your ActiveRecord models to match data integrity principles and rules. Out of the box it enforces many issues such as the lack of foreign keys.
group :development do
...
gem 'activerecord-data_integrity', require: false
end
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
...
For now tool checks the following issues:
- The lack of database foreign keys for belongs_to/has_many associations
- The lack of not-null constraint for the columns with presence validation
- Inclusion validated colums should have
enum
data type
- 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 excludion "removed" rows
-
Config for exluding some rules for the specific models (rubocop like)
-
Autofix for the fixing the issue, mostly by generating safe migrations
-
Possibility to run with checking only specific rule
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/activerecord-data_integrity.
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
The gem is available as open source under the terms of the MIT License.