{"id":13521421,"url":"https://github.com/djezzzl/factory_trace","last_synced_at":"2025-05-16T01:05:05.691Z","repository":{"id":39706815,"uuid":"183934255","full_name":"djezzzl/factory_trace","owner":"djezzzl","description":"Simple tool to maintain factories and traits from FactoryBot","archived":false,"fork":false,"pushed_at":"2023-12-22T17:02:53.000Z","size":167,"stargazers_count":388,"open_issues_count":1,"forks_count":7,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-05-14T06:32:01.815Z","etag":null,"topics":["factory-bot","factory-girl","minitest","rspec","ruby","test-unit","testing"],"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/djezzzl.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-04-28T16:45:26.000Z","updated_at":"2025-02-14T10:02:16.000Z","dependencies_parsed_at":"2024-01-01T04:16:20.608Z","dependency_job_id":"468cfca9-9234-470c-bc6b-fd407d39bf36","html_url":"https://github.com/djezzzl/factory_trace","commit_stats":{"total_commits":78,"total_committers":5,"mean_commits":15.6,"dds":"0.10256410256410253","last_synced_commit":"253c4052cd2c033af2425cd3575a1f0ab49296b9"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djezzzl%2Ffactory_trace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djezzzl%2Ffactory_trace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djezzzl%2Ffactory_trace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djezzzl%2Ffactory_trace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/djezzzl","download_url":"https://codeload.github.com/djezzzl/factory_trace/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254448579,"owners_count":22072764,"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":["factory-bot","factory-girl","minitest","rspec","ruby","test-unit","testing"],"created_at":"2024-08-01T06:00:34.174Z","updated_at":"2025-05-16T01:05:05.639Z","avatar_url":"https://github.com/djezzzl.png","language":"Ruby","funding_links":["https://opencollective.com/factory_trace","https://opencollective.com/factory_trace/backer/0/website","https://opencollective.com/factory_trace/backer/1/website","https://opencollective.com/factory_trace/backer/2/website","https://opencollective.com/factory_trace/backer/3/website","https://opencollective.com/factory_trace/backer/4/website","https://opencollective.com/factory_trace/backer/5/website","https://opencollective.com/factory_trace/backer/6/website","https://opencollective.com/factory_trace/backer/7/website","https://opencollective.com/factory_trace/backer/8/website","https://opencollective.com/factory_trace/backer/9/website","https://opencollective.com/factory_trace/backer/10/website","https://opencollective.com/factory_trace/backer/11/website","https://opencollective.com/factory_trace/backer/12/website","https://opencollective.com/factory_trace/backer/13/website","https://opencollective.com/factory_trace/backer/14/website","https://opencollective.com/factory_trace/backer/15/website","https://opencollective.com/factory_trace/backer/16/website","https://opencollective.com/factory_trace/backer/17/website","https://opencollective.com/factory_trace/backer/18/website","https://opencollective.com/factory_trace/backer/19/website","https://opencollective.com/factory_trace/backer/20/website","https://opencollective.com/factory_trace/backer/21/website","https://opencollective.com/factory_trace/backer/22/website","https://opencollective.com/factory_trace/backer/23/website","https://opencollective.com/factory_trace/backer/24/website","https://opencollective.com/factory_trace/backer/25/website","https://opencollective.com/factory_trace/backer/26/website","https://opencollective.com/factory_trace/backer/27/website","https://opencollective.com/factory_trace/backer/28/website","https://opencollective.com/factory_trace/backer/29/website"],"categories":["Ruby","Tools"],"sub_categories":[],"readme":"# FactoryTrace\n\n[![Gem Version][3]][4]\n[![][1]][10]\n[![][2]][11]\n[![][5]][6]\n\nThe main goal of the project is to provide an easy way to maintain [FactoryBot](https://github.com/thoughtbot/factory_bot)\ninside your project in a good shape.\n\n\u003e If the project helps you or your organization, I would be very grateful if you [contribute][13] or [donate][14].  \n\u003e Your support is an incredible motivation and the biggest reward for my hard work.\n\nFollow me and stay tuned for the updates:\n- [LinkedIn](https://www.linkedin.com/in/evgeniydemin/)\n- [Medium](https://evgeniydemin.medium.com/)\n- [Twitter](https://twitter.com/EvgeniyDemin/)\n- [GitHub](https://github.com/djezzzl)\n\n## What it does?\n\nCurrently, it helps to find unused `factories` and `traits`.\n\nExample output (from [Rails RSpec Example](rails-rspec-example)):\n\n```bash\n$ FB_TRACE=1 rspec\ntotal number of unique used factories \u0026 traits: 3\ntotal number of unique unused factories \u0026 traits: 3\nunused factory admin =\u003e spec/factories.rb:10\nunused trait with_address of factory admin =\u003e spec/factories.rb:11\nunused global trait with_email =\u003e spec/factories.rb:16\n```\n\n## Installation\n\nAdd this line to your application's Gemfile in the group you have `factory_bot` or `factory_bot_rails`:\n\n```ruby\ngem 'factory_trace'\n```\n\nAnd then execute:\n```\n$ bundle install\n```\n\nOr install it yourself as:\n\n```\n$ gem install factory_trace\n```\n\n## Usage\n\nFor now, the gem supports [RSpec](https://github.com/rspec/rspec) out of the box.\nYou don't need to add any hooks. Just run the specs, e.g.\n\n```bash\n# output to STDOUT\nFB_TRACE=1 rspec\n# OR output to any file\nFB_TRACE_FILE=log/factory_trace.txt rspec\n```\n\nFor any other case, add the following line where you want to start\ntracking usage of `FactoryBot` factories and traits:\n\n```ruby\nFactoryTrace.start\n```\n\nAdd this line where you want to stop tracking and get collected information:\n\n```ruby\nFactoryTrace.stop\n```\n\n### Partial execution\n\nImagine, you run your specs in parts (as many as you need) and then want to track total usage of\nfactories and traits. For that, we have a `trace_only` mode. You can try following commands [here](rails-rspec-example).\n\n```bash\n# one part\nFB_TRACE=trace_only FB_TRACE_FILE=fb_trace_result1.json bundle exec rspec spec/first_spec.rb\n# another part\nFB_TRACE=trace_only FB_TRACE_FILE=fb_trace_result2.json bundle exec rspec spec/second_spec.rb\n# output the usage to the console\nbundle exec factory_trace fb_trace_result1.json fb_trace_result2.json\n# or to the file\nFB_TRACE_FILE=fb_report.txt bundle exec factory_trace fb_trace_result1.json fb_trace_result2.json\n```\n\n**Note**: `bundle exec factory_trace` won't load your project. Thus it runs fast and it's easier to configure it on CI.\n\n## Configuration\n\nYou can configure `FactoryTrace`:\n\n```ruby\nFactoryTrace.configure do |config|\n  # default ENV.key?('FB_TRACE') || ENV.key?('FB_TRACE_FILE')\n  config.enabled = true\n\n  # default is ENV['FB_TRACE_FILE']\n  # when nil outputs to STDOUT\n  config.path = 'log/factory_trace.txt'\n\n  # default is true when +path+ is nil\n  config.color = true\n\n  # default is ENV['FB_TRACE'] || :full\n  # can be :full or :trace_only\n  config.mode = :full\n\n  # used to trace definitions places\n  # default is true\n  # can be true or false  \n  config.trace_definition = true\nend\n```\n\n**Tip**: if you have some errors try to disable `trace_definition`. That functionality does\nmany monkey patches to `FactoryBot`. I will appreciate sharing an error stack trace so I can\nfix it.\n\n## Development\n\nAfter checking out the repo, run `bundle install` to install dependencies.\nThen, run `rake spec` to run the tests.\nTo install this gem onto your local machine, run `bundle exec rake install`.\nTo release a new version, update the version number in `version.rb`,\nand then run `bundle exec rake release`, which will create a git tag for the version,\npush git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).\n\n## Funding\n\n### Open Collective Backers\n\nYou're an individual who wants to support the project with a monthly donation. Your logo will be available on the Github page. [[Become a backer](https://opencollective.com/factory_trace#backer)]\n\n\u003ca href=\"https://opencollective.com/factory_trace/backer/0/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/1/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/2/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/3/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/4/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/5/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/6/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/7/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/8/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/9/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/9/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/10/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/10/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/11/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/11/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/12/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/12/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/13/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/13/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/14/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/14/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/15/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/15/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/16/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/16/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/17/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/17/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/18/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/18/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/19/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/19/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/20/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/20/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/21/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/21/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/22/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/22/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/23/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/23/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/24/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/24/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/25/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/25/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/26/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/26/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/27/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/27/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/28/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/28/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/backer/29/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/backer/29/avatar.svg\"\u003e\u003c/a\u003e\n\n### Open Collective Sponsors\n\nYou're an organization that wants to support the project with a monthly donation. Your logo will be available on the Github page. [[Become a sponsor](https://opencollective.com/factory_trace#sponsor)]\n\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/0/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/1/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/2/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/3/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/4/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/5/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/6/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/7/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/8/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/9/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/9/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/10/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/10/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/11/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/11/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/12/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/12/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/13/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/13/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/14/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/14/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/15/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/15/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/16/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/16/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/17/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/17/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/18/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/18/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/19/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/19/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/20/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/20/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/21/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/21/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/22/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/22/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/23/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/23/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/24/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/24/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/25/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/25/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/26/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/26/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/27/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/27/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/28/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/28/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/factory_trace/sponsor/29/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/factory_trace/sponsor/29/avatar.svg\"\u003e\u003c/a\u003e\n\n## Contributing\n\n[Bug reports](https://github.com/djezzzl/factory_trace/issues) and [pull requests](https://github.com/djezzzl/factory_trace/pulls) are welcome on GitHub.\nThis project is intended to be a safe, welcoming space for collaboration, and contributors are expected\nto adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.\n\n## License\n\nThe gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n\n## Code of Conduct\n\nEveryone interacting in the *FactoryTrace* project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](CODE_OF_CONDUCT.md).\n\n## Changelog\n\n*FactoryTrace*'s changelog is available [here](CHANGELOG.md).\n\n## Copyright\n\nCopyright (c) Evgeniy Demin. See [LICENSE.txt](LICENSE.txt) for further details.\n\n[1]: https://github.com/djezzzl/factory_trace/actions/workflows/tests.yml/badge.svg?branch=master\n[2]: https://github.com/djezzzl/factory_trace/actions/workflows/rubocop.yml/badge.svg?branch=master\n[3]: https://badge.fury.io/rb/factory_trace.svg\n[4]: https://badge.fury.io/rb/factory_trace\n[5]: https://opencollective.com/factory_trace/tiers/badge.svg\n[6]: https://opencollective.com/factory_trace#support\n[10]: https://github.com/djezzzl/factory_trace/actions/workflows/tests.yml?query=event%3Aschedule\n[11]: https://github.com/djezzzl/factory_trace/actions/workflows/rubocop.yml?query=event%3Aschedule\n[13]: https://github.com/djezzzl/factory_trace#contributing\n[14]: https://opencollective.com/factory_trace#support\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjezzzl%2Ffactory_trace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdjezzzl%2Ffactory_trace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjezzzl%2Ffactory_trace/lists"}