{"id":15431730,"url":"https://github.com/ryosk7/snapcher","last_synced_at":"2026-03-09T05:31:50.843Z","repository":{"id":201174522,"uuid":"703471049","full_name":"ryosk7/snapcher","owner":"ryosk7","description":"Snapcher is an ORM extension that logs changes to specific columns to your model.","archived":false,"fork":false,"pushed_at":"2024-06-25T11:27:09.000Z","size":1109,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-12-05T01:53:27.162Z","etag":null,"topics":["ruby","ruby-gem","ruby-on-rails"],"latest_commit_sha":null,"homepage":"","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/ryosk7.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,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-11T09:59:12.000Z","updated_at":"2024-06-25T11:26:27.000Z","dependencies_parsed_at":"2024-06-22T04:34:48.720Z","dependency_job_id":"16bc4a43-e785-4df8-9d56-2b90cad485b3","html_url":"https://github.com/ryosk7/snapcher","commit_stats":{"total_commits":53,"total_committers":2,"mean_commits":26.5,"dds":"0.018867924528301883","last_synced_commit":"05b6a930c056571cddc96fe7925997a117eb6c84"},"previous_names":["ryosk7/snapcher"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/ryosk7/snapcher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryosk7%2Fsnapcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryosk7%2Fsnapcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryosk7%2Fsnapcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryosk7%2Fsnapcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryosk7","download_url":"https://codeload.github.com/ryosk7/snapcher/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryosk7%2Fsnapcher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30283900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["ruby","ruby-gem","ruby-on-rails"],"created_at":"2024-10-01T18:23:55.098Z","updated_at":"2026-03-09T05:31:50.782Z","avatar_url":"https://github.com/ryosk7.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"![snapcher_logo](https://github.com/ryosk7/snapcher/blob/0-1-2/logo/snapcher_logo.png?raw=true)\n\n----------\n\n# Snapcher\n[![Gem Version](https://img.shields.io/gem/v/snapcher.svg)](http://rubygems.org/gems/snapcher)\n![GitHub](https://img.shields.io/github/license/ryosk7/snapcher)\n=======\n\n**Snapcher** is an ORM extension that logs changes to specific columns to your model.\n\nWhen a change is made to a specific column, the difference between before and after the change is obtained and saved.\n\nTo make it easier for analysts, save the table name, column name, and data before and after changes as separate columns.\n\nThe name of this gem comes from one of Hideo Kojima's game works, [\"Snatcher\"](https://en.wikipedia.org/wiki/Snatcher_(video_game)).\n\nIt was the first of his game works to introduce cinematic direction, and \"Snapcher\" is also the first of my gem works.\n\n## Supported\n\n### Snapcher supports Ruby versions:\n\n* 3.1\n* 3.2\n\n### Snapcher supports Rails versions:\n\n* 7.0\n* 7.1\n\n## Supported ORMs\n\nSnapcher is currently ActiveRecord-only.\n\n## Installation\n\nAdd the gem to your Gemfile:\n\n```ruby\ngem \"snapcher\"\n```\n\nThen, from your Rails app directory, create the `scannings` table:\n\n```bash\n$ rails generate snapcher:install\n$ rails db:migrate\n```\n\n## Usage\n\nSimply call `scanning` on your models.\n\nUse `column_name:` to select the column you want to log.\n\n```ruby\nclass User \u003c ActiveRecord::Base\n  scanning column_name: \"name\"\nend\n```\n\nBy default, whenever a user is created, updated or destroyed, a new scanning is created.\n\n```ruby\nuser = User.create!(name: \"Gillian Seed\")\nuser.scannings.count # =\u003e 1\nuser.update!(name: \"Mika Slayton\")\nuser.scannings.count # =\u003e 2\nuser.destroy\nuser.scannings.count # =\u003e 3\n```\n\nScanning contain information regarding what action was taken on the model and what changes were made.\n\n```ruby\nuser.update!(name: \"Mika Slayton\")\nsnapcher = user.scannings.last\nsnapcher.action # =\u003e \"update\"\nsnapcher.before_params # =\u003e \"Gillian Seed\"\nsnapcher.after_params # =\u003e \"Mika Slayton\"\n```\nIf the \"Snatcher\" column you want to capture is not user_id, you can specify this.\n\n```ruby\nclass User \u003c ActiveRecord::Base\n  scanning column_name: \"name\", snatch_user: \"id\"\nend\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryosk7%2Fsnapcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryosk7%2Fsnapcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryosk7%2Fsnapcher/lists"}