Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

table_display

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

table_display

  • 2.2.0
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

Table Display

Adds support for displaying your ActiveRecord tables, named scopes, collections, or plain arrays in a table view when working in rails console, shell, or email template.

Enumerable#to_table_display returns the printable strings; Object#pt calls #to_table_display on its first argument and puts out the result.

Columns you haven't loaded (eg. from using :select) are omitted, and derived/calculated columns (eg. again, from using :select) are added.

Both #to_table_display and Object#pt methods take :only, :except, and :methods which change what attributes/methods are output, like they do on the #to_xml method.

The normal output uses #inspect on the data values to make them printable, so you can see what type the values had. When that's inconvenient or you'd prefer direct display, you can pass the option :inspect => false to disable inspection.

Example

You can call the to_table_display method:

>> puts Project.find(31).tasks.to_table_display
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
| id | project_id | description            | due_on           | completed_at                   | created_at                     | updated_at                     |
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|  1 |         31 | "Write a handy plugin" | Wed, 25 Mar 2009 | Tue Mar 24 23:17:05 +1300 2009 | Mon Mar 23 09:11:02 +1300 2009 | Tue Mar 24 23:17:05 +1300 2009 |
|  2 |         31 | "Blog the plugin"      | Sun, 05 Apr 2009 | nil                            | Mon Mar 23 09:11:46 +1300 2009 | Mon Mar 23 09:11:46 +1300 2009 |
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+

Or equivalently, use pt (like pp, but in a table):

>> pt Customer.find(31).purchases
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
| id | project_id | description            | due_on           | completed_at                   | created_at                     | updated_at                     |
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|  1 |         31 | "Write a handy plugin" | Wed, 25 Mar 2009 | Tue Mar 24 23:17:05 +1300 2009 | Mon Mar 23 09:11:02 +1300 2009 | Tue Mar 24 23:17:05 +1300 2009 |
|  2 |         31 | "Blog the plugin"      | Sun, 05 Apr 2009 | nil                            | Mon Mar 23 09:11:46 +1300 2009 | Mon Mar 23 09:11:46 +1300 2009 |
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+

Like to_xml, you can pass a :methods option to add the output methods on your models, and you can pass :only or :except to (respectively) show only certain columns or show all except certain columns:

>> puts Customer.find(31).purchases.to_table_display(:only => [:id, :description], :methods => [:met_due_date?])
+----+------------------------+---------------+
| id | description            | met_due_date? |
+----+------------------------+---------------+
|  1 | "Write a handy plugin" | true          |
|  2 | "Blog the plugin"      | nil           |
+----+------------------------+---------------+

pt accepts and passes on all options as well:

>> pt Customer.find(31).purchases, :only => [:id, :description], :methods => [:met_due_date?]
+----+------------------------+---------------+
| id | description            | met_due_date? |
+----+------------------------+---------------+
|  1 | "Write a handy plugin" | true          |
|  2 | "Blog the plugin"      | nil           |
+----+------------------------+---------------+

There's a convenient equivalent syntax for displaying an ordered list of columns, like :only and :methods:

>> puts Customer.find(31).purchases.to_table_display :id, :description, :met_due_date?

which provides:

>> pt Customer.find(31).purchases, :id, :description, :met_due_date?

resulting in the same output as above.

If :inspect => false is used, the values will be shown in #to_s form rather than #inspect form:

>> pt Customer.find(31).purchases, :only => [:id, :description, :due_on, :completed_at]
+----+----------------------+------------+--------------------------------+
| id | description          | due_on     | completed_at                   |
+----+----------------------+------------+--------------------------------+
|  1 | Write a handy plugin | 2009-03-25 | Tue Mar 24 23:17:05 +1300 2009 |
|  2 | Blog the plugin      | 2009-04-05 |                                |
+----+----------------------+------------+--------------------------------+

It is possible to use objects that respond to #call -- such as methods or procs -- to set up columns. They will be passed the record as their sole argument. If these have names (as with methods), those will be used as the headers. Otherwise, the default to_s behaviour will be used.

Note that in all cases, values whose class descends from Numeric are right-aligned, while all other values are left-aligned.

Thanks

  • Michael Fowler (@mkrfowler)

Copyright (c) 2009-2018 Will Bryant, Sekuda Ltd, released under the MIT license

FAQs

Package last updated on 18 Feb 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc