{"id":13879565,"url":"https://github.com/hopsoft/tag_columns","last_synced_at":"2025-04-13T06:15:15.081Z","repository":{"id":54530756,"uuid":"88173433","full_name":"hopsoft/tag_columns","owner":"hopsoft","description":"Fast \u0026 simple Rails ActiveRecord model tagging using PostgreSQL's Array datatype","archived":false,"fork":false,"pushed_at":"2021-02-12T18:03:34.000Z","size":21,"stargazers_count":52,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-13T06:15:10.617Z","etag":null,"topics":["rails","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/hopsoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-04-13T14:24:55.000Z","updated_at":"2024-10-23T09:14:45.000Z","dependencies_parsed_at":"2022-08-13T18:50:38.877Z","dependency_job_id":null,"html_url":"https://github.com/hopsoft/tag_columns","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hopsoft%2Ftag_columns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hopsoft%2Ftag_columns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hopsoft%2Ftag_columns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hopsoft%2Ftag_columns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hopsoft","download_url":"https://codeload.github.com/hopsoft/tag_columns/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248670434,"owners_count":21142904,"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":["rails","ruby","ruby-gem","ruby-on-rails"],"created_at":"2024-08-06T08:02:25.397Z","updated_at":"2025-04-13T06:15:15.058Z","avatar_url":"https://github.com/hopsoft.png","language":"Ruby","funding_links":[],"categories":["Ruby"],"sub_categories":[],"readme":"[![Lines of Code](http://img.shields.io/badge/lines_of_code-89-brightgreen.svg?style=flat)](http://blog.codinghorror.com/the-best-code-is-no-code-at-all/)\n[![Maintainability](https://api.codeclimate.com/v1/badges/7503486b1bb494b5d976/maintainability)](https://codeclimate.com/github/hopsoft/tag_columns/maintainability)\n[![Build Status](http://img.shields.io/travis/hopsoft/tag_columns.svg?style=flat)](https://travis-ci.org/hopsoft/tag_columns)\n[![Coverage Status](https://img.shields.io/coveralls/hopsoft/tag_columns.svg?style=flat)](https://coveralls.io/r/hopsoft/tag_columns?branch=master)\n[![Downloads](http://img.shields.io/gem/dt/tag_columns.svg?style=flat)](http://rubygems.org/gems/tag_columns)\n\n# TagColumns\n\nFast \u0026 simple Rails ActiveRecord model tagging using [PostgreSQL's](https://www.postgresql.org/) [Array datatype](https://www.postgresql.org/docs/current/static/arrays.html).\n*Similar to [acts_as_taggable_on](https://github.com/mbleigh/acts-as-taggable-on) but lighter weight with fewer features.*\n*Also, be sure to check out [acts_as_taggable_array_on](https://github.com/tmiyamon/acts-as-taggable-array-on).*\n\n## Use Cases\n\nAssign categories to your database records.\n\n* Assign multiple groups to user records\n* Assign categories to blog posts et al.\n* etc...\n\n## Quick Start\n\n```ruby\n# Gemfile\ngem \"tag_columns\"\n```\n\n```ruby\n# db/migrate/TIMESTAMP_add_groups_to_user.rb\nclass AddGroupsToUser \u003c ActiveRecord::Migration[5.0]\n  def change\n    add_column :users, :groups, :string, array: true, default: [], null: false\n    add_index :users, :groups, using: \"gin\"\n  end\nend\n```\n\n```ruby\n# app/models/user.rb\nclass User \u003c ApplicationRecord\n  include TagColumns\n  tag_columns :groups\nend\n```\n\n```ruby\nuser = User.find(1)\n\n# assigning tags\nuser.groups \u003c\u003c :reader\nuser.groups \u003c\u003c :writer\nuser.save\n\n# checking tags\nis_writer            = user.has_group?(:writer)\nis_reader_or_writer  = user.has_any_groups?(:reader, :writer)\nis_reader_and_writer = user.has_all_groups?(:reader, :writer)\n\n# finding tagged records\nassigned                = User.with_groups\nunassigned              = User.without_groups\nwriters                 = User.with_any_groups(:writer)\nnon_writers             = User.without_any_groups(:writer)\nreaders_or_writers      = User.with_any_groups(:reader, :writer)\nreaders_and_writers     = User.with_all_groups(:reader, :writer)\nnon_readers_and_writers = User.without_all_groups(:reader, :writer)\n\n# find unique tags across all users\nUser.unique_groups\n\n# find unique tags for users with the last name 'Smith'\nUser.unique_groups(last_name: \"Smith\")\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhopsoft%2Ftag_columns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhopsoft%2Ftag_columns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhopsoft%2Ftag_columns/lists"}