環境を整理していていたついでにメモを残しておく。
irb でシンタックスハイライトなどを行うには Wirble など便利な gem があるが、awesome_print はオブジェクトのデータ構造もわかりやすくインデントして表示してくれる。
Awesome Print is a Ruby library that pretty prints Ruby objects in full color exposing their internal structure with proper indentation. Rails ActiveRecord objects and usage within Rails templates are supported via included mixins.
Table of Contents
Open Table of Contents
インストールと irb でのお試し
インストール。
$ gem install awesome_print
Fetching: awesome_print-1.0.2.gem (100%)
Successfully installed awesome_print-1.0.2
1 gem installed
Installing ri documentation for awesome_print-1.0.2...
Installing RDoc documentation for awesome_print-1.0.2...
irb で試してみる。
$ irb
1.9.3-p125 :001 > require 'awesome_print'
=> true
1.9.3-p125 :002 > data = [ false, 42, %w(forty two), { :now => Time.now, :class => Time.now.class, :distance => 42e42 } ]
=> [false, 42, ["forty", "two"], {:now=>2012-03-20 14:11:20 +0900, :class=>Time, :distance=>4.2e+43}]
1.9.3-p125 :003 > ap data
[
[0] false,
[1] 42,
[2] [
[0] "forty",
[1] "two"
],
[3] {
:now => 2012-03-20 14:11:20 +0900,
:class => Time < Object,
:distance => 4.2e+43
}
]
=> [false, 42, ["forty", "two"], {:now=>2012-03-20 14:11:20 +0900, :class=>Time, :distance=>4.2e+43}]
awesome_print
を require 後に、ap メソッドに awesome_print
で表示させてたいオブジェクトを預ける。
実際のコンソールの画面も貼りつけておく。
irb での出力を常に awesome_print で
先ほどの確認では、awesome_print
を使って表示するためには ap
にオブジェクトを預ける必要があったが、ap
の入力なしに常に awesome_print
で表示が行えるようにする。
$HOME/.irbrc
に以下を追記。
($HOME はユーザアカウントの HOME 直下。)
$HOME/.irbrc
:
# load libraries
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
試してみる。
$ irb
1.9.3-p125 :001 > data = [ false, 42, %w(forty two), { :now => Time.now, :class => Time.now.class, :distance => 42e42 } ]
[
[0] false,
[1] 42,
[2] [
[0] "forty",
[1] "two"
],
[3] {
:now => 2012-03-20 14:17:37 +0900,
:class => Time < Object,
:distance => 4.2e+43
}
]
実際のコンソールの画面。
rails console でも awesome_print
Rails の console でも awesome_print
を使いたくなる。
Rails アプリケーションの Gemfile
に awesome_print
を追加してロードできるようにしておく。
開発環境とテスト環境のみで利用可能に。
$RAILS_HOME/Gemfile
:
group :development, :test do
gem 'awesome_print', '~> 1.0.2'
end
Bundler でインストールしておく。
$ bundle install
以下は Refinery CMS で使用した例。
モデルオブジェクトを見てみる。
$ rails c
Loading development environment (Rails 3.2.2)
1.9.3p125 :001 > Refinery::Page
class Refinery::Page < Refinery::Core::BaseModel {
:id => :integer,
:parent_id => :integer,
:path => :string,
:slug => :string,
:show_in_menu => :boolean,
:link_url => :string,
:menu_match => :string,
:deletable => :boolean,
:draft => :boolean,
:skip_to_first_child => :boolean,
:lft => :integer,
:rgt => :integer,
:depth => :integer,
:view_template => :string,
:layout_template => :string,
:created_at => :datetime,
:updated_at => :datetime
}
実際のコンソールの画面。
検索結果は以下のような感じ。
1.9.3p125 :002 > Refinery::Page.find(:first)
Refinery::Page Load (0.5ms) SELECT "refinery_pages".* FROM "refinery_pages" LIMIT 1
Refinery::Page::Translation Load (0.3ms) SELECT "refinery_page_translations".* FROM "refinery_page_translations" WHERE "refinery_page_translations"."refinery_page_id" = 1
#<Refinery::Page:0xa3f780c> {
:id => 1,
:parent_id => nil,
:path => "Home",
:slug => "home",
:show_in_menu => true,
:link_url => "/",
:menu_match => "^/$",
:deletable => false,
:draft => false,
:skip_to_first_child => false,
:lft => 1,
:rgt => 4,
:depth => 0,
:view_template => nil,
:layout_template => nil,
:created_at => Sun, 18 Mar 2012 04:20:54 UTC +00:00,
:updated_at => Sun, 18 Mar 2012 12:27:27 UTC +00:00
}
実際のコンソールの画面。