Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bogdan/datagrid
Gem to create tables grids with sortable columns and filters
https://github.com/bogdan/datagrid
activerecord gem grid mongoid rails ruby table tableview
Last synced: 2 days ago
JSON representation
Gem to create tables grids with sortable columns and filters
- Host: GitHub
- URL: https://github.com/bogdan/datagrid
- Owner: bogdan
- License: mit
- Created: 2011-06-13T15:15:29.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2024-09-22T18:50:06.000Z (11 days ago)
- Last Synced: 2024-09-26T01:18:31.144Z (7 days ago)
- Topics: activerecord, gem, grid, mongoid, rails, ruby, table, tableview
- Language: Ruby
- Homepage:
- Size: 1.08 MB
- Stars: 1,018
- Watchers: 29
- Forks: 116
- Open Issues: 6
-
Metadata Files:
- Readme: Readme.markdown
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-ruby-toolbox - datagrid - This allows you to easily build datagrid aka data tables with sortable columns and filters (HTML & Markup / Table Builders)
README
# Datagrid
[![Build Status](https://github.com/bogdan/datagrid/workflows/CI/badge.svg?branch=master)](https://github.com/bogdan/datagrid/actions)
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fbogdan%2Fdatagrid.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fbogdan%2Fdatagrid?ref=badge_shield)
A really mighty and flexible ruby library that generates reports including admin panels, analytics and data representation:
* Filtering
* Columns
* Sort order
* Localization
* Export to CSV### ORM Support
* ActiveRecord
* Mongoid
* MongoMapper
* Sequel
* Array (slow but possible)[Create an issue](https://github.com/bogdan/datagrid/issues/new) if you want more.
### Documentation
* [Readme](/Readme.markdown) - this read-me for basic information
* [Wiki](https://github.com/bogdan/datagrid/wiki) - general reference on how to use the gem
* [Rdoc](https://rubydoc.info/gems/datagrid) - API reference### Live Demo
[Datagrid DEMO application](http://datagrid.herokuapp.com) is available live!
[Demo source code](https://github.com/bogdan/datagrid-demo).### Example
In order to create a grid:
``` ruby
class UsersGridinclude Datagrid
scope do
User.includes(:group)
endfilter(:category, :enum, select: ["first", "second"])
filter(:disabled, :xboolean)
filter(:group_id, :integer, multiple: true)
filter(:logins_count, :integer, range: true)
filter(:group_name, :string, header: "Group") do |value|
self.joins(:group).where(groups: {name: value})
endcolumn(:name)
column(:group, order: -> { joins(:group).order(groups: :name) }) do |user|
user.name
end
column(:active, header: "Activated") do |user|
!user.disabled
endend
```Basic grid api:
``` ruby
report = UsersGrid.new(
group_id: [1,2],
logins_count: [1, nil],
category: "first",
order: :group,
descending: true
)report.assets # => Array of User instances:
# SELECT * FROM users WHERE users.group_id in (1,2) AND users.logins_count >= 1 AND users.category = 'first' ORDER BY groups.name DESCreport.header # => ["Name", "Group", "Activated"]
report.rows # => [
# ["Steve", "Spammers", false],
# [ "John", "Spoilers", false],
# ["Berry", "Good people", true]
# ]
report.data # => [ header, *rows]report.to_csv # => Yes, it is
```### Grid DSL
In order to create a report, you need to define:
* scope of objects to look through
* filters that will be used to filter data
* columns that should be displayed and sortable (if possible)### Scope
Default scope of objects to filter and display.
In common case it is `ActiveRecord::Base` (or any other supported ORM) subclass with some generic scopes like:``` ruby
scope do
User.includes(:group)
end
```[More about scope](https://github.com/bogdan/datagrid/wiki/Scope)
### Filters
Each filter definition consists of:
* name of the filter
* type that will be used for value typecast
* conditions block that applies to defined scope
* additional optionsDatagrid supports different type of filters including:
* text
* integer
* float
* date
* datetime
* boolean
* xboolean - the select of "yes", "no" and any
* enum - selection of the given values
* string
* dynamic - build dynamic SQL condition[More about filters](https://github.com/bogdan/datagrid/wiki/Filters)
### Columns
Each column is represented by name and code block to calculate the value.
``` ruby
column(:activated, header: "Active", order: "activated", after: :name) do
self.activated?
end
```Some formatting options are also available.
Each column is sortable.[More about columns](https://github.com/bogdan/datagrid/wiki/Columns)
### Front end
### Using Generator
Datagrid has a builtin generator:
```
rails g datagrid:scaffold skills
```That gives you some code to play with out of the box:
```
create app/grids/skills_grid.rb
create app/controllers/skills_controller.rb
create app/views/skills/index.html.erb
route resources :skills
insert app/assets/stylesheet/application.css
```### Customize Built-in partials
In order to get a control on datagrid built-in partials run:
``` sh
rake datagrid:copy_partials
```### Advanced frontend
All advanced frontend things are described in:
[Frontend section on wiki](https://github.com/bogdan/datagrid/wiki/Frontend)
## Questions & Issues
If you have a question of any kind, just make an issue and describe your problem in details.
## Contribution
If you are interested in contributing to this project, please follow the [instructions here](CONTRIBUTING.md).
## Self-Promotion
Like datagrid?
Follow the repository on [GitHub](https://github.com/bogdan/datagrid).
Read [author blog](http://gusiev.com).
## License
[![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)