/table_format

TableFormat shows text table like emacs org-table for easy reading.

Primary LanguageRuby

Gem Version

TableFormat

TableFormat shows text table like emacs org-table for easy reading.

tp Object.constants.grep(/RUBY_/).map { |e| [e, Object.const_get(e)] }.to_h
# >> |---------------------+------------------------------------------------------------|
# >> |        RUBY_VERSION | 2.5.0                                                      |
# >> |   RUBY_RELEASE_DATE | 2017-12-25                                                 |
# >> |       RUBY_PLATFORM | x86_64-darwin16                                            |
# >> |     RUBY_PATCHLEVEL | 0                                                          |
# >> |    RUBY_DESCRIPTION | ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin16] |
# >> |         RUBY_ENGINE | ruby                                                       |
# >> |       RUBY_REVISION | 61468                                                      |
# >> | RUBY_ENGINE_VERSION | 2.5.0                                                      |
# >> |      RUBY_COPYRIGHT | ruby - Copyright (C) 1993-2017 Yukihiro Matsumoto          |
# >> |---------------------+------------------------------------------------------------|

In the case of Rails

class ApplicationController < ActionController::Base
  if Rails.env.development?
    before_action do
      logger.debug params.to_unsafe_h.to_t(truncate: 40)
    end
  end
end
% cat log/development.log
Started POST "/api/xy_master/time_records" for ::1 at 2021-11-18 13:52:25 +0900
Processing by Api::XyMaster::TimeRecordsController#create as JSON
  Parameters: (snip)
|-------------+---------------------------------------------|
|   scope_key | scope_today                                 |
| time_record | {"rule_key"=>"rule100t", "spent_sec"=>0,... |
|      format | json                                        |
|  controller | api/xy_master/time_records                  |
|      action | create                                      |
|-------------+---------------------------------------------|

Installation

Install as a standalone gem

$ gem install table_format

Or install within application using Gemfile

$ bundle add table_format
$ bundle install

Examples

Array of hash

tp [{id: 1, name: 'alice'}, {id: 2, name: 'bob'}]
# >> |----+-------|
# >> | id | name  |
# >> |----+-------|
# >> |  1 | alice |
# >> |  2 | bob   |
# >> |----+-------|

Hash

tp({id: 1, name: 'alice'})
# >> |------+-------|
# >> |   id | 1     |
# >> | name | alice |
# >> |------+-------|

Array

tp [:alice, :bob]
# >> |-------|
# >> | alice |
# >> | bob   |
# >> |-------|

ActiveRecord or Mongoid

['alice', 'bob'].each { |e| User.create!(name: e) }
tp User
# >> |----+-------|
# >> | id | name  |
# >> |----+-------|
# >> |  1 | alice |
# >> |  2 | bob   |
# >> |----+-------|
tp User.limit(1)
# >> |----+-------|
# >> | id | name  |
# >> |----+-------|
# >> |  1 | alice |
# >> |----+-------|
tp User.first
# >> |------+-------|
# >> |   id | 1     |
# >> | name | alice |
# >> |------+-------|

ActiveRecord::Result

tp ActiveRecord::Base.connection.select_all('SELECT * FROM users')
# >> |----+-------|
# >> | id | name  |
# >> |----+-------|
# >> |  1 | alice |
# >> |  2 | bob   |
# >> |----+-------|

How to table as string

Use to_t method.

puts [{id: 1, name: 'alice'}, {id: 2, name: 'bob'}].to_t
# >> |----+-------|
# >> | id | name  |
# >> |----+-------|
# >> |  1 | alice |
# >> |  2 | bob   |
# >> |----+-------|

Options

Pass as the second argument to tp or the first argument to to_t.

tp 1
# >> |---|
# >> | 1 |
# >> |---|

tp 1, intersection_both: '+'
# >> +---+
# >> | 1 |
# >> +---+

Markdown format example

markdown: true has the same meaning as intersection: '|', cover: false

tp [{id: 1, name: 'alice'}, {id: 2, name: 'bob'}], markdown: true
# >> | id | name  |
# >> |----|-------|
# >> |  1 | alice |
# >> |  2 | bob   |
tp [{id: 1, name: 'alice'}, {id: 2, name: 'bob'}], intersection: '|', cover: false
# >> | id | name  |
# >> |----|-------|
# >> |  1 | alice |
# >> |  2 | bob   |

Global Options

tp TableFormat.default_options
# >> |-------------------+-------|
# >> |          markdown | false |
# >> |            header |       |
# >> |             cover | true  |
# >> |          vertical | |     |
# >> |      intersection | +     |
# >> | intersection_both | |     |
# >> |           horizon | -     |
# >> |           padding |       |
# >> |           in_code | UTF-8 |
# >> |-------------------+-------|

tp 1
# >> |---|
# >> | 1 |
# >> |---|

TableFormat.default_options[:intersection_both] = '+'

tp 1
# >> +---+
# >> | 1 |
# >> +---+