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.
Как видите, штука достаточно удобная и совсем простая в использовании.
Линкусики:
июля 23, 2011 at 13:06 (#)
Обычно всегда входят в мой Gemfile.
Hirb — даёт прекрасное расположение хэша модели, в стиле mysql.
Wirble — даёт подсветку.
июля 23, 2011 at 14:42 (#)
mikhail, спасибо за комментарий, сейчас посмотрю на hirb и wirble.
августа 2, 2011 at 11:30 (#)
Добавлю, что для вывода в pry с помощью awesome_print нужно создать файл ~/.pryrc с следующим содержимым (или добавить к содержимому, если файл уже есть):