{"id":13463241,"url":"https://github.com/bogdan/datagrid","last_synced_at":"2025-04-27T03:55:56.831Z","repository":{"id":49762631,"uuid":"1889313","full_name":"bogdan/datagrid","owner":"bogdan","description":"Gem to create tables grids with sortable columns and filters","archived":false,"fork":false,"pushed_at":"2025-03-17T12:33:10.000Z","size":1651,"stargazers_count":1078,"open_issues_count":5,"forks_count":115,"subscribers_count":28,"default_branch":"main","last_synced_at":"2025-04-26T10:51:36.578Z","etag":null,"topics":["activerecord","gem","grid","mongoid","rails","ruby","table","tableview"],"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/bogdan.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","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":"2011-06-13T15:15:29.000Z","updated_at":"2025-04-26T06:23:11.000Z","dependencies_parsed_at":"2024-08-14T09:25:08.657Z","dependency_job_id":"c8e5ac73-8dab-4a7c-bc95-3604741cf549","html_url":"https://github.com/bogdan/datagrid","commit_stats":{"total_commits":888,"total_committers":41,"mean_commits":"21.658536585365855","dds":"0.11036036036036034","last_synced_commit":"3cb4f5dee71fa5b0af7ebbc6f74c69de4d119517"},"previous_names":[],"tags_count":82,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bogdan%2Fdatagrid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bogdan%2Fdatagrid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bogdan%2Fdatagrid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bogdan%2Fdatagrid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bogdan","download_url":"https://codeload.github.com/bogdan/datagrid/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251063787,"owners_count":21530845,"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":["activerecord","gem","grid","mongoid","rails","ruby","table","tableview"],"created_at":"2024-07-31T13:00:48.834Z","updated_at":"2025-04-27T03:55:56.786Z","avatar_url":"https://github.com/bogdan.png","language":"Ruby","readme":"# Datagrid\n\nDatagrid Version 2.0.0 is here.\n\n[Migration Guide](./version-2).\n\n[![Build Status](https://github.com/bogdan/datagrid/actions/workflows/ci.yml/badge.svg)](https://github.com/bogdan/datagrid/actions/workflows/ci.yml)\n\nA really mighty and flexible ruby library that generates reports\nincluding admin panels, analytics and data browsers:\n\n* Filtering\n* Columns\n* Sort order\n* Localization\n* Export to CSV\n\n## ORM Support\n\n* ActiveRecord\n* Mongoid\n* MongoMapper\n* Sequel\n* Array (in-memory data of smaller scale)\n\n## Datagrid Philosophy\n\n1. Expressive DSL complements OOD instead of replacing it.\n1. Extensible in every way while providing a lot of defaults.\n1. If your ORM supports that, datagrid also supports that!\n\n## Documentation\n\n* [Rdoc](https://rubydoc.info/gems/datagrid) - full API reference\n* [Scope](https://rubydoc.info/gems/datagrid/Datagrid/Core) - working with datagrid scope\n* [Columns](https://rubydoc.info/gems/datagrid/Datagrid/Columns) - definging datagrid columns\n* [Filters](https://rubydoc.info/gems/datagrid/Datagrid/Filters) - defining datagrid filters\n* [Frontend](https://rubydoc.info/gems/datagrid/Datagrid/Helper) - building a frontend \n* [Configuration](https://rubydoc.info/gems/datagrid/Datagrid/Configuration) - configuring the gem\n\n### Live Demo\n\n[Datagrid DEMO application](http://datagrid.herokuapp.com) is available live!\n[Demo source code](https://github.com/bogdan/datagrid-demo).\n\n\u003c!-- \u003cimg src=\"http://datagrid.herokuapp.com/datagrid_demo_screenshot.png\" style=\"margin: 7px; border: 1px solid black\"\u003e --\u003e\n\n### Example\n\nIn order to create a grid:\n\n``` ruby\nclass UsersGrid \u003c Datagrid::Base\n\n  scope do\n    User.includes(:group)\n  end\n\n  filter(:category, :enum, select: [\"first\", \"second\"])\n  filter(:disabled, :xboolean)\n  filter(:group_id, :integer, multiple: true)\n  filter(:logins_count, :integer, range: true)\n  filter(:group_name, :string, header: \"Group\") do |value|\n    self.joins(:group).where(groups: {name: value})\n  end\n\n  column(:name)\n  column(:group, order: -\u003e { joins(:group).order(groups: :name) }) do |user|\n    user.name\n  end\n  column(:active, header: \"Activated\") do |user|\n    !user.disabled\n  end\n\nend\n```\n\nBasic grid api:\n\n``` ruby\nreport = UsersGrid.new(\n  group_id: [1,2],\n  logins_count: [1, nil],\n  category: \"first\",\n  order: :group,\n  descending: true\n)\n\nreport.assets # =\u003e Array of User instances:\n              # SELECT * FROM users WHERE users.group_id in (1,2) AND\n              #   users.logins_count \u003e= 1 AND\n              #   users.category = 'first'\n              # ORDER BY groups.name DESC\n\nreport.header # =\u003e [\"Name\", \"Group\", \"Activated\"]\nreport.rows   # =\u003e [\n              #      [\"Steve\", \"Spammers\", false],\n              #      [ \"John\", \"Spoilers\", false],\n              #      [\"Berry\", \"Good people\", true]\n              #    ]\nreport.data   # =\u003e [ header, *rows]\n\nreport.to_csv # =\u003e Yes, it is\n```\n\n### Grid DSL\n\nIn order to create a report, you need to define:\n\n* scope of objects to look through\n* filters that will be used to filter data\n* columns that should be displayed and sortable (if possible)\n\n### Scope\n\nDefault scope of objects to filter and display.\nIn common case it is `ActiveRecord::Base` (or any other supported ORM)\nsubclass with some generic scopes like:\n\n``` ruby\nscope do\n  User.includes(:group)\nend\n```\n\n[More about scope](https://rubydoc.info/gems/datagrid/Datagrid/Core)\n\n### Filters\n\nEach filter definition consists of:\n\n* name of the filter\n* type that will be used for value typecast\n* conditions block that applies to defined scope\n* additional options\n\nDatagrid supports different type of filters including:\n\n* text\n* integer\n* float\n* date\n* datetime\n* boolean\n* xboolean - the select of \"yes\", \"no\" and any\n* enum - selection of the given values\n* string\n* dynamic - build dynamic SQL condition\n\n[More about filters](https://rubydoc.info/gems/datagrid/Datagrid/Filters)\n\n### Columns\n\nEach column is represented by name and code block to calculate the value.\n\n``` ruby\ncolumn(:activated, header: \"Active\", order: \"activated\", after: :name) do\n  self.activated?\nend\n```\n\nSome formatting options are also available.\nEach column is sortable.\n\n[More about columns](https://rubydoc.info/gems/datagrid/Datagrid/Columns)\n\n### Front end\n\n#### Using Generator\n\nDatagrid has a builtin generator:\n\n```\nrails g datagrid:scaffold skills\n```\n\nThat gives you some code to play with out of the box:\n\n```\ncreate  app/grids/skills_grid.rb\ncreate  app/controllers/skills_controller.rb\ncreate  app/views/skills/index.html.erb\nroute  resources :skills\ninsert  app/assets/stylesheet/application.css\n```\n\n#### Customize Built-in views\n\nIn order to get a control on datagrid built-in views run:\n\n``` sh\nrails g datagrid:views\n```\n\n#### Advanced frontend\n\nAll advanced frontend things are described in:\n\n[Frontend documentation](https://rubydoc.info/gems/datagrid/Datagrid/Helper)\n\n## Questions \u0026 Issues\n\nIf you have a question of any kind, just make an issue and\ndescribe your problem in details.\n\n## Contribution\n\nIf you are interested in contributing to this project,\nplease follow the [instructions here](CONTRIBUTING.md).\n\n## Self-Promotion\n\nLike datagrid?\n\nFollow the repository on [GitHub](https://github.com/bogdan/datagrid).\n\nRead [author blog](http://gusiev.com).\n\n## License\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fbogdan%2Fdatagrid.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fbogdan%2Fdatagrid?ref=badge_large)\n","funding_links":[],"categories":["HTML \u0026 Markup","Ruby"],"sub_categories":["Table Builders"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbogdan%2Fdatagrid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbogdan%2Fdatagrid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbogdan%2Fdatagrid/lists"}