Skip to content
/ nazar Public

Nazar improves default output for console applications (supports IRB and Pry).

License

Notifications You must be signed in to change notification settings

krzyzak/nazar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nazar Build Status Gem Version Code Climate Test Coverage

Turn this:

>> User.all
  User Load (0.4ms)  SELECT "users".* FROM "users" /* loading for inspect */ LIMIT ?  [["LIMIT", 11]]
=> #<ActiveRecord::Relation [#<User id: 1, email: "[email protected]", name: "Mrs. Charis Brown", description: "Quasi atque ea. Beatae corporis quia. Eveniet veli...", created_at: "2021-09-01 05:42:24.341344000 +0000", updated_at: "2021-09-20 09:36:29.289078000 +0000", active: false, last_login_at: nil>, #<User id: 2, email: "[email protected]", name: "Ms. Sherice Champlin", description: "Omnis ut illum. Non velit mollitia. Expedita facil...", created_at: "2021-09-10 07:27:00.182298000 +0000", updated_at: "2021-09-20 09:36:29.292065000 +0000", active: true, last_login_at: "2021-09-19 16:25:32.094418000 +0000">, #<User id: 3, email: "[email protected]", name: "Florentino Gleason", description: "Non recusandae eos. Et voluptates iusto. Commodi e...", created_at: "2021-09-07 18:24:45.608164000 +0000", updated_at: "2021-09-20 09:36:29.293572000 +0000", active: false, last_login_at: nil>, #<User id: 4, email: "[email protected]", name: "Judie Boehm", description: "Ut ea eum. Tempore voluptates praesentium. Animi s...", created_at: "2021-09-05 02:11:36.564693000 +0000", updated_at: "2021-09-20 09:36:29.295763000 +0000", active: true, last_login_at: "2021-09-19 20:17:24.074515000 +0000">, #<User id: 5, email: "[email protected]", name: "Mari Ullrich", description: "Aperiam quas voluptas. Autem alias quia. Aut persp...", created_at: "2021-09-09 05:23:03.229860000 +0000", updated_at: "2021-09-20 09:36:29.296928000 +0000", active: nil, last_login_at: nil>, #<User id: 6, email: "[email protected]", name: "Sam Larson DDS", description: "Sed velit consectetur. Quas cupiditate enim. Neque...", created_at: "2021-09-03 02:52:14.055696000 +0000", updated_at: "2021-09-20 09:36:29.299157000 +0000", active: true, last_login_at: "2021-09-20 05:01:39.019563000 +0000">, #<User id: 7, email: "[email protected]", name: "Ying Kub I", description: "Cupiditate ut consequatur. Eos ab laboriosam. Ipsa...", created_at: "2021-09-10 05:52:32.005877000 +0000", updated_at: "2021-09-20 09:36:29.301469000 +0000", active: true, last_login_at: "2021-09-19 21:30:48.854010000 +0000">, #<User id: 8, email: "[email protected]", name: "Johnie Corwin II", description: "Suscipit itaque adipisci. Assumenda ad error. Quas...", created_at: "2021-09-12 13:05:49.845361000 +0000", updated_at: "2021-09-20 09:36:29.302657000 +0000", active: nil, last_login_at: nil>, #<User id: 9, email: "[email protected]", name: "Sharie Weber", description: "Sapiente voluptatum mollitia. Dolores voluptatum a...", created_at: "2021-09-19 03:03:39.360526000 +0000", updated_at: "2021-09-20 09:36:29.304929000 +0000", active: true, last_login_at: "2021-09-20 06:46:05.846685000 +0000">, #<User id: 10, email: "[email protected]", name: "Yoshiko Mohr", description: "Similique laborum totam. Non cum atque. Placeat qu...", created_at: "2021-09-08 05:41:36.588541000 +0000", updated_at: "2021-09-20 09:36:29.306120000 +0000", active: nil, last_login_at: nil>, ...]>

Into this:

>> User.all
   (0.6ms)  SELECT sqlite_version(*)
  User Load (0.8ms)  SELECT "users".* FROM "users"
┏━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┓
 id     email                                 name                   description                                                                              created_at               updated_at               active  last_login_at           
┣═══════╪══════════════════════════════════════╪═══════════════════════╪═════════════════════════════════════════════════════════════════════════════════════════╪═════════════════════════╪═════════════════════════╪════════╪═════════════════════════┫
 1      delma@goldner.co                      Mrs. Charis Brown      Quasi atque ea. Beatae corporis quia. Eveniet velit ad.                                  2021-09-01 05:42:24 UTC  2021-09-20 09:36:29 UTC                                
 2      markpfeffer@wunschbraun.info          Ms. Sherice Champlin   Omnis ut illum. Non velit mollitia. Expedita facilis dignissimos.                        2021-09-10 07:27:00 UTC  2021-09-20 09:36:29 UTC         2021-09-19 16:25:32 UTC 
 3      nathansimonis@kunde.org               Florentino Gleason     Non recusandae eos. Et voluptates iusto. Commodi est in.                                 2021-09-07 18:24:45 UTC  2021-09-20 09:36:29 UTC                                
 4      edwardowilkinson@walkerschiller.info  Judie Boehm            Ut ea eum. Tempore voluptates praesentium. Animi sapiente distinctio.                    2021-09-05 02:11:36 UTC  2021-09-20 09:36:29 UTC         2021-09-19 20:17:24 UTC 
 5      isaiahebert@brauncarroll.net          Mari Ullrich           Aperiam quas voluptas. Autem alias quia. Aut perspiciatis eos.                           2021-09-09 05:23:03 UTC  2021-09-20 09:36:29 UTC                                
 6      alexander@anderson.io                 Sam Larson DDS         Sed velit consectetur. Quas cupiditate enim. Neque facere harum.                         2021-09-03 02:52:14 UTC  2021-09-20 09:36:29 UTC         2021-09-20 05:01:39 UTC 
 7      chirunolfon@keler.io                  Ying Kub I             Cupiditate ut consequatur. Eos ab laboriosam. Ipsam ut veritatis.                        2021-09-10 05:52:32 UTC  2021-09-20 09:36:29 UTC         2021-09-19 21:30:48 UTC 
 8      johnny@anderson.net                   Johnie Corwin II       Suscipit itaque adipisci. Assumenda ad error. Quas enim beatae.                          2021-09-12 13:05:49 UTC  2021-09-20 09:36:29 UTC                                
 9      yahairakuhn@schneider.com             Sharie Weber           Sapiente voluptatum mollitia. Dolores voluptatum accusamus. Veniam voluptatem deserunt.  2021-09-19 03:03:39 UTC  2021-09-20 09:36:29 UTC         2021-09-20 06:46:05 UTC 
 10     tommye@schuppe.biz                    Yoshiko Mohr           Similique laborum totam. Non cum atque. Placeat quia velit.                              2021-09-08 05:41:36 UTC  2021-09-20 09:36:29 UTC                                
 11     derekbeier@hermankuhlman.co           Lavern Feil            Itaque molestias et. Iure tempora minus. Dolore autem omnis.                             2021-09-05 04:04:51 UTC  2021-09-20 09:36:29 UTC                                
 12     lavernwillms@runolfsdottirbogan.org   Marcy Gottlieb Sr.     Mollitia quia dolor. Libero laborum aperiam. Velit est eum.                              2021-09-08 19:22:49 UTC  2021-09-20 09:36:29 UTC                                
 13     earlhills@mclaughlingreenholt.info    Adina Luettgen         In qui rem. Illum itaque dignissimos. Enim vitae tenetur.                                2021-09-08 10:16:12 UTC  2021-09-20 09:36:29 UTC                                
 14     larry@rice.com                        Carolina Kuhlman II    Ipsum ut fuga. Sunt id a. Rerum nulla sint.                                              2021-09-03 23:11:42 UTC  2021-09-20 09:36:29 UTC                                
 15     randy@kuhicfritsch.name               Harvey Runolfsdottir   Dolorum officiis sed. Ut recusandae culpa. Odit aut nostrum.                             2021-09-08 04:28:38 UTC  2021-09-20 09:36:29 UTC                                
 16     lashaun@mooreleannon.co               Lucio Raynor           Et expedita rerum. Autem nesciunt labore. Suscipit aut eum.                              2021-09-06 20:47:51 UTC  2021-09-20 09:36:29 UTC                                
 17     omeryost@becker.com                   Rocky Hettinger        Ut deleniti voluptas. Explicabo voluptas rerum. Illum sapiente quo.                      2021-09-14 23:05:33 UTC  2021-09-20 09:36:29 UTC         2021-09-20 09:35:14 UTC 
 18     nilsa@corwinkub.name                  Serena Brakus          Qui non provident. Omnis excepturi quasi. Ratione suscipit dolor.                        2021-09-14 01:06:02 UTC  2021-09-20 09:36:29 UTC                                
 19     berniebednar@spinkamiller.co          Merlin Predovic        Omnis et minus. Tempore in laboriosam. Molestiae aut eveniet.                            2021-09-16 18:34:20 UTC  2021-09-20 09:36:29 UTC         2021-09-19 12:01:59 UTC 
 20     claude@smithamhaley.io                Claudette Thompson MD  Aut consectetur soluta. Laborum quia qui. Vel incidunt minima.                           2021-09-10 03:53:24 UTC  2021-09-20 09:36:29 UTC                                
 21     matilde@cormierstroman.name           Dalton Witting         Voluptatum provident earum. Ad esse odit. Quasi non ut.                                  2021-09-10 04:51:53 UTC  2021-09-20 09:36:29 UTC                                
 22     randistrosin@littel.io                Miss Lucio Kub         Ea quia sapiente. Reprehenderit esse ut. Veritatis magnam quia.                          2021-08-31 18:33:02 UTC  2021-09-20 09:36:29 UTC                                
 23     noah@kuphal.co                        Alonzo Stroman         Officia fugit eos. Qui quo et. Ducimus harum dignissimos.                                2021-09-13 14:36:31 UTC  2021-09-20 09:36:29 UTC                                
 24     cristinaschneider@cole.biz            Dr. Newton Ritchie     Corporis suscipit recusandae. Voluptas voluptas quo. Non perferendis fugiat.             2021-09-02 20:54:38 UTC  2021-09-20 09:36:29 UTC         2021-09-20 02:35:39 UTC 
 25     mirtha@spinkabayer.co                 Kory Cummings          Aut ut aut. Quis voluptas sit. Consequatur quia voluptatibus.                            2021-09-17 08:45:02 UTC  2021-09-20 09:36:29 UTC                                
┠───────┼──────────────────────────────────────┴───────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────┴─────────────────────────┴─────────────────────────┴────────┴─────────────────────────┨
 Total  25                                                                                                                                                                                                                                            
┗━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Installation

Per-project installation

While nothing stops you from adding Nazar to each project separately, I find it cumbersome to add it to every project I'm working on - it also alters REPL behaviour for other teammates, which is another reason why personally I don't recommend that approach. Anyway, here's quick how-to:

Add nazar to Gemfile:

group :development, :test do
  gem 'nazar', require: false
end

Then, you have to call Nazar.enable!. If you're using Rails, you might want to add this snippet to config/application.rb:

console do
  require 'nazar'

  Nazar.enable! # See configuration section for more options and
                # Opt-in setup section if you don't want to enable it for every item
end

Otherwise, call it in bin/console or any other script that launches your REPL.

Global installation

This is my recommended way to install this gem - that way it works automatically in all your projects, even in standalone irb or pry sessions.

  • Create global gems path

    mkdir -p ~/.gem/ruby/global - You're welcome to use any other path for your global gemset

  • Install nazar in your global gemset

    gem install nazar -i ~/.gem/ruby/global

  • Load Nazar in your REPL rc file Add following snippet to your .irbrc or .pryrc:

global_gemset_path = File.expand_path('~/.gem/ruby/global/gems')

if Dir.exist?(global_gemset_path)
  global_gems_path = Dir.glob("#{global_gemset_path}/*/lib")

  $LOAD_PATH.unshift(*global_gems_path)
end

%w[nazar].each do |gem| # add more gems you want to load globally
  begin
    require gem
  rescue LoadError
  end
end

Nazar.enable! if defined?(Nazar)

Layouts

Nazar.config.formatter.layout can be set to either :horizontal, :vertical or :auto.

:auto uses horizontal layout if it fits in your console size, otherwise it falls back to :vertical layout.

Here's a preview of both layouts:

Horizontal

┏━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┯━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━┓
 id     email                                 name                  description                                                            created_at               updated_at               active  last_login_at           
┣═══════╪══════════════════════════════════════╪══════════════════════╪═══════════════════════════════════════════════════════════════════════╪═════════════════════════╪═════════════════════════╪════════╪═════════════════════════┫
 1      delma@goldner.co                      Mrs. Charis Brown     Quasi atque ea. Beatae corporis quia. Eveniet velit ad.                2021-09-01 05:42:24 UTC  2021-09-20 09:36:29 UTC                                
 2      markpfeffer@wunschbraun.info          Ms. Sherice Champlin  Omnis ut illum. Non velit mollitia. Expedita facilis dignissimos.      2021-09-10 07:27:00 UTC  2021-09-20 09:36:29 UTC         2021-09-19 16:25:32 UTC 
 3      nathansimonis@kunde.org               Florentino Gleason    Non recusandae eos. Et voluptates iusto. Commodi est in.               2021-09-07 18:24:45 UTC  2021-09-20 09:36:29 UTC                                
 4      edwardowilkinson@walkerschiller.info  Judie Boehm           Ut ea eum. Tempore voluptates praesentium. Animi sapiente distinctio.  2021-09-05 02:11:36 UTC  2021-09-20 09:36:29 UTC         2021-09-19 20:17:24 UTC 
 5      isaiahebert@brauncarroll.net          Mari Ullrich          Aperiam quas voluptas. Autem alias quia. Aut perspiciatis eos.         2021-09-09 05:23:03 UTC  2021-09-20 09:36:29 UTC                                
┠───────┼──────────────────────────────────────┴──────────────────────┴───────────────────────────────────────────────────────────────────────┴─────────────────────────┴─────────────────────────┴────────┴─────────────────────────┨
 Total  5                                                                                                                                                                                                                          
┗━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Vertical

User.first(5)

┏━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 id             1                                                                     
 email          delma@goldner.co                                                      
 name           Mrs. Charis Brown                                                     
 description    Quasi atque ea. Beatae corporis quia. Eveniet velit ad.               
 created_at     2021-09-01 05:42:24 UTC                                               
 updated_at     2021-09-20 09:36:29 UTC                                               
 active                                                                              
 last_login_at                                                                       
┠───────────────┼───────────────────────────────────────────────────────────────────────┨
 id             2                                                                     
 email          markpfeffer@wunschbraun.info                                          
 name           Ms. Sherice Champlin                                                  
 description    Omnis ut illum. Non velit mollitia. Expedita facilis dignissimos.     
 created_at     2021-09-10 07:27:00 UTC                                               
 updated_at     2021-09-20 09:36:29 UTC                                               
 active                                                                              
 last_login_at  2021-09-19 16:25:32 UTC                                               
┠───────────────┼───────────────────────────────────────────────────────────────────────┨
 id             3                                                                     
 email          nathansimonis@kunde.org                                               
 name           Florentino Gleason                                                    
 description    Non recusandae eos. Et voluptates iusto. Commodi est in.              
 created_at     2021-09-07 18:24:45 UTC