{"id":13879738,"url":"https://github.com/evilmartians/terraforming-rails","last_synced_at":"2025-04-12T14:58:11.767Z","repository":{"id":35665953,"uuid":"183109221","full_name":"evilmartians/terraforming-rails","owner":"evilmartians","description":"Terraforming legacy Rails applications guides and tools","archived":false,"fork":false,"pushed_at":"2024-07-16T08:31:06.000Z","size":792,"stargazers_count":735,"open_issues_count":1,"forks_count":80,"subscribers_count":51,"default_branch":"master","last_synced_at":"2025-04-12T14:58:05.299Z","etag":null,"topics":["legacy","rails","ruby","tools"],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/evilmartians.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-23T23:14:50.000Z","updated_at":"2025-03-28T10:58:34.000Z","dependencies_parsed_at":"2024-11-22T00:02:45.021Z","dependency_job_id":null,"html_url":"https://github.com/evilmartians/terraforming-rails","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilmartians%2Fterraforming-rails","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilmartians%2Fterraforming-rails/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilmartians%2Fterraforming-rails/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evilmartians%2Fterraforming-rails/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evilmartians","download_url":"https://codeload.github.com/evilmartians/terraforming-rails/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248586249,"owners_count":21128997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["legacy","rails","ruby","tools"],"created_at":"2024-08-06T08:02:30.922Z","updated_at":"2025-04-12T14:58:11.745Z","avatar_url":"https://github.com/evilmartians.png","language":"Ruby","funding_links":[],"categories":["Ruby"],"sub_categories":[],"readme":"# Terraforming Rails\n\nA collection of tools and guides to help you turn legacy code into [legendary code](https://twitter.com/cackhanded/status/1019216124729352192?s=21).\n\nBased on the RailsConf 2019 talk [\"Terraforming legacy Rails applications\"](https://railsconf.com/program/sessions#session-832) ([slides](https://speakerdeck.com/palkan/railsconf-2019-terraforming-legacy-rails-applications), [video](https://www.youtube.com/watch?v=-NKpMn6XSjU)).\n\n\u003ca href=\"https://evilmartians.com/\"\u003e\n\u003cimg src=\"https://evilmartians.com/badges/sponsored-by-evil-martians.svg\" alt=\"Sponsored by Evil Martians\" width=\"236\" height=\"54\"\u003e\u003c/a\u003e\n\n## Tools\n\n### Unreleased scripts\n\nThese scripts have been created during the development of different Rails projects at [Evil Martians](http://evilmartians.com).\n\nThey're not universal enough to be extracted into libraries (some depend on particular Rails version or rely on project-specific assumptions), but they could be used a starting point for building tools for your project.\n\n- [Lint/Env](./tools/lint_env) – RuboCop cop (restrict the usage of `ENV` and `Rails.env` in the app)\n- [FactoryLinter](./tools/factory_linter) – lint factory definitions\n- [TimecopLinter](./tools/timecop_linter) – make sure you always travel back in time when using Timecop\n- [TemplatesTracker](./tools/templates_tracker) – track unused templates\n- [GemTracker](./tools/gem_tracker) - track potentially unused gems.\n\n### Gems\n\n#### Tests\n\n- [TestProf](http://test-prof.evilmartians.io) – analyze and improve test suite performance\n\n#### Security\n\n- [bundler-audit](https://github.com/rubysec/bundler-audit) – check dependencies for known CVEs\n- [brakeman](https://brakemanscanner.org) – detect the app code's security issues\n\n#### Database\n\n- [database_validations](https://github.com/toptal/database_validations) – validations consistent with the DB constraints\n- [database_consistency](https://github.com/djezzzl/database_consistency) - check the consistency of the DB constraints and models validations\n- [isolator](https://github.com/palkan/isolator) – detect transactions with side-effects (_non-atomic_)\n\n#### Dead code elimination\n\n- [traceroute](https://github.com/amatsuda/traceroute) – detect unused routes/controller actions\n- [factory_trace](https://github.com/djezzzl/factory_trace) – detect unused FactoryBot factories/traits\n\n#### Configuration\n\n- [anyway_config](https://github.com/palkan/anyway_config) – transparently use multiple sources of configuration at once\n\n#### Analysis\n\n- [attractor](https://github.com/julianrubisch/attractor) — churn/complexity analysis\n\n### Automation Tools\n\n- [lefthook](https://github.com/Arkweid/lefthook) – language-agnostic git hook manager\n- [danger](./examples/danger) – code review automation helper\n- [pronto](https://github.com/prontolabs/pronto) – linters runner to run checks only for the relevant changes\n\n## Examples\n\n- [CircleCI](./examples/circleci) — example CircleCI configuration files\n- [Docker for Dev](https://github.com/evilmartians/ruby-on-whales) — example Docker for development configuration\n- [Lefthook + Crystalball](./examples/lefthook+crystalball) — git hooks for convenient development environment\n\n## Resources/Guides\n\n- [Fight the flaky tests](./guides/flaky.md)\n\n## License\n\nThe code is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevilmartians%2Fterraforming-rails","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevilmartians%2Fterraforming-rails","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevilmartians%2Fterraforming-rails/lists"}