Awesome Print — удобное представление объектов в IRB и не только

июля 23, 2011  |  Published in Ruby, Ruby Gems  |  3 Comments

— полезный gem авторства Махаэля (Михаила) Дворкина, который занимается тем, что предоставляет удобное представление объектов в консоли.

Для установки Awesome Print следует просто выполнить в консоли следущую команду:

$ gem install awesome_print

Awesome Print также доступен в виде Rails-плагина, в таком случае его установку следует выполнять как установку любого другого Rail-плагина:

$ ruby script/plugin install http://github.com/michaeldv/awesome_print.git

Работает Awesome Print совсем просто — он добавляет метод ap, который следует использовать вместо puts, print, p и т.д., пример:

require 'awesome_print'
t = Time.now
#=> 2011-07-23 03:30:37 +0300
ap t
#2011-07-23 03:30:37 +0300

hash = {:a=>"aaa", :b=>"bbb", :rubydev=>{:rails=>"3.0.9",:ruby=>"1.9.2"}}
=> {:a=>"aaa", :b=>"bbb", :rubydev=>{:rails=>"3.0.9", :ruby=>"1.9.2"}}
ap hash
#{
#          :a => "aaa",
#          :b => "bbb",
#    :rubydev => {
#        :rails => "3.0.9",
#         :ruby => "1.9.2"
#    }
#}

Хочу заметить, что к форматированию также добавляется подсветка.

Помимо печатаемого объекта ap также принимает хеш опций представления:

:multiline => true,           # многострочное представление
:plain     => false,          # использование подсветки
:indent    => 4,              # отступ размером в 4 пробела
:index     => true,           # включает отображение индексом массивов
:html      => false,          # использование ANSI коды цветов, вместо HTML кодов
:sorted_hash_keys => false,   # не сортировать ключи хэшей
:color => {
#цвета для подсветки определенных типов объектов
:array      => :white,
:bignum     => :blue,
:class      => :yellow,
:date       => :greenish,
:falseclass => :red,
:fixnum     => :blue,
:float      => :blue,
:hash       => :gray,
:nilclass   => :red,
:string     => :yellowish,
:symbol     => :cyanish,
:time       => :greenish,
:trueclass  => :green
}

Для указания цвета подсветки доступные следующие символы соответствующие цветам:

:gray, :red, :green, :yellow, :blue, :purple, :cyan, :white
:black, :redish, :greenish, :yellowish, :blueish, :purpleish, :cyanish, :pale

Давайте рассмотрим еще несколько примеров:

ap Math.constants
#[
#    [0] :DomainError,
#    [1] :PI,
#    [2] :E
#]
# => [:DomainError, :PI, :E]
ap Math.constants, :indent => 2
#[
#  [0] :DomainError,
#  [1] :PI,
#  [2] :E
#]
# => [:DomainError, :PI, :E]

fruit = Struct.new("Fruit", :name, :color, :calorie)
# => Struct::Fruit
orange = fruit.new("orange", :red, 220)
# => #<struct Struct::Fruit name="orange", color=:red, calorie=220>

ap orange
#{
#       :name => "orange",
#      :color => :red,
#    :calorie => 220
#}
# => #<struct Struct::Fruit name="orange", color=:red, calorie=220>

Чтобы использовать Awesome Print по умолчанию для представления объектов, то есть без использования метода ap и подключения gem’а awesome_print в каждом сеансе работы с IRB, вам следует добавить следущий код в файл .irbrc (если такового нет — просто создайте его):

require "rubygems"
require "awesome_print"

unless IRB.version.include?('DietRB')
  IRB::Irb.class_eval do
    def output_value
      ap @context.last_value
    end
  end
else # MacRuby
  IRB.formatter = Class.new(IRB::Formatter) do
    def inspect_object(object)
      object.ai
    end
  end.new
end

Теперь объекты в вашей консоли будут автоматически печататься с удобным для восприятия форматированием.

Для того, чтобы создать свою цветовую схему и задать настройки форматирования — создайте специальный файл конфигурации .aprc и поместите в него все настройки, которые должны стать дефолтными:

#.aprc
AwesomePrint.defaults = {
  :indent => 2,
}

Что делает Awesome Print будучи установлен как плагин? — Он добавляет метод ap к классам Logger и ActiveSupport::BufferedLogger, после чего вы можете очень удобно форматировать логи:

logger.ap object, :info

Метод ap также добавляется и в класс ActionView::Base, благодаря чему Awesome Print удобно использовать например для форматированого представления данных об ошибках, параметров сессии, http-запросов и т.д.,которые встают перед глазами при возникновении какой-нибудь ошибки в вашем приложении на Rails.

Как видите, штука достаточно удобная и совсем простая в использовании.

Линкусики:

Tags: , ,

Responses

  1. mikhail says:

    июля 23, 2011 at 13:06 (#)

    group :console do
      gem 'hirb'
      gem 'wirble'
      gem 'awesome_print'
    end
    

    Обычно всегда входят в мой Gemfile.
    Hirb — даёт прекрасное расположение хэша модели, в стиле mysql.
    Wirble — даёт подсветку.

  2. admin says:

    июля 23, 2011 at 14:42 (#)

    mikhail, спасибо за комментарий, сейчас посмотрю на hirb и wirble.

  3. says:

    августа 2, 2011 at 11:30 (#)

    Добавлю, что для вывода в pry с помощью awesome_print нужно создать файл ~/.pryrc с следующим содержимым (или добавить к содержимому, если файл уже есть):

    begin
      require 'awesome_print' 
      Pry.config.print = proc { |output, value| output.puts value.ai }
    rescue LoadError => err
      puts "no awesome_print :("
    end
    

Leave a Response

Для подсветки кода используйте BB - коды: [language]...[/language], где language может быть: ruby, javascript, css, html.