-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Mike Dvorkin
committed
Oct 24, 2012
1 parent
62820b5
commit f789e73
Showing
4 changed files
with
52 additions
and
295 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,64 +1,43 @@ | ||
## 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. | ||
## Awesome Print for RubyMotion ## | ||
Awesome Print for RubyMotion is a RubyMotion gem that pretty prints RubyMotion objects in full color | ||
exposing their internal structure with proper indentation. | ||
|
||
Current version is based on Awesome Print v1.1.0. Please see http://github.com/michaeldv/awesome_print | ||
for more information. | ||
|
||
### Installation ### | ||
# Installing as Ruby gem | ||
$ gem install awesome_print | ||
$ gem install awesome_print_motion | ||
|
||
# Cloning the repository | ||
$ git clone git://github.com/michaeldv/awesome_print.git | ||
$ git clone git://github.com/michaeldv/awesome_print_motion.git | ||
|
||
### Usage ### | ||
Generate RubyMotion project, then require "awesome_print_motion" in projects's Rakefile: | ||
|
||
require "awesome_print" | ||
ap object, options = {} | ||
# -*- coding: utf-8 -*- | ||
$:.unshift("/Library/RubyMotion/lib") | ||
require "motion/project" | ||
require "awesome_print_motion" | ||
|
||
Default options: | ||
Motion::Project::App.setup do |app| | ||
app.name = "your_app_name" | ||
end | ||
|
||
:indent => 4, # Indent using 4 spaces. | ||
:index => true, # Display array indices. | ||
:html => false, # Use ANSI color codes rather than HTML. | ||
:multiline => true, # Display in multiple lines. | ||
:plain => false, # Use colors. | ||
:raw => false, # Do not recursively format object instance variables. | ||
:sort_keys => false, # Do not sort hash keys. | ||
:limit => false, # Limit large output for arrays and hashes. Set to a boolean or integer. | ||
:color => { | ||
:args => :pale, | ||
:array => :white, | ||
:bigdecimal => :blue, | ||
:class => :yellow, | ||
:date => :greenish, | ||
:falseclass => :red, | ||
:fixnum => :blue, | ||
:float => :blue, | ||
:hash => :pale, | ||
:keyword => :cyan, | ||
:method => :purpleish, | ||
:nilclass => :red, | ||
:rational => :blue, | ||
:string => :yellowish, | ||
:struct => :pale, | ||
:symbol => :cyanish, | ||
:time => :greenish, | ||
:trueclass => :green, | ||
:variable => :cyanish | ||
} | ||
Within AppDelegate you can use <code>ap object, options</code> method. For example: | ||
|
||
Supported color names: | ||
class AppDelegate | ||
def application(application, didFinishLaunchingWithOptions:launchOptions) | ||
ap self, :raw => true | ||
true | ||
end | ||
end | ||
|
||
:gray, :red, :green, :yellow, :blue, :purple, :cyan, :white | ||
:black, :redish, :greenish, :yellowish, :blueish, :purpleish, :cyanish, :pale | ||
AwesomePrint also becomes available in RubyMotion console: | ||
|
||
### Examples ### | ||
$ cat > 1.rb | ||
require "awesome_print" | ||
data = [ false, 42, %w(forty two), { :now => Time.now, :class => Time.now.class, :distance => 42e42 } ] | ||
ap data | ||
^D | ||
$ ruby 1.rb | ||
Build ./build/iPhoneSimulator-6.0-Development | ||
Simulate ./build/iPhoneSimulator-6.0-Development/your_app_name.app | ||
(main)> ap [ false, 42, %w(forty two), { :now => Time.now, :class => Time.now.class, :distance => 42e42 } ] | ||
[ | ||
[0] false, | ||
[1] 42, | ||
|
@@ -67,260 +46,30 @@ Supported color names: | |
[1] "two" | ||
], | ||
[3] { | ||
:class => Time < Object, | ||
:now => Fri Apr 02 19:55:53 -0700 2010, | ||
:distance => 4.2e+43 | ||
:now => 2012-10-23 17:09:19 -0700, | ||
:class => Time < NSDate, | ||
:distance => Infinity | ||
} | ||
] | ||
=> nil | ||
(main)> ap [1,2,3] | ||
|
||
$ cat > 2.rb | ||
require "awesome_print" | ||
data = { :now => Time.now, :class => Time.now.class, :distance => 42e42 } | ||
ap data, :indent => -2 # <-- Left align hash keys. | ||
^D | ||
$ ruby 2.rb | ||
{ | ||
:class => Time < Object, | ||
:now => Fri Apr 02 19:55:53 -0700 2010, | ||
:distance => 4.2e+43 | ||
} | ||
Supported options and color codes are documented at http://github.com/michaeldv/awesome_print. | ||
|
||
$ cat > 3.rb | ||
require "awesome_print" | ||
data = [ false, 42, %w(forty two) ] | ||
data << data # <-- Nested array. | ||
ap data, :multiline => false | ||
^D | ||
$ ruby 3.rb | ||
[ false, 42, [ "forty", "two" ], [...] ] | ||
### Differences with Ruby awesome_print v1.1.0 ### | ||
* No support for :html formatting option. | ||
* No integration with Logger. | ||
* No integration IRB or Pry. | ||
* AwesomePrint extensions are supported but none are bundled. | ||
* AwesomePrint specs haven't been ported yet. | ||
* Not compatible with Ruby 1.8.6 and 1.8.7 ;-) | ||
|
||
$ cat > 4.rb | ||
require "awesome_print" | ||
class Hello | ||
def self.world(x, y, z = nil, &blk) | ||
end | ||
end | ||
ap Hello.methods - Class.methods | ||
^D | ||
$ ruby 4.rb | ||
[ | ||
[0] world(x, y, *z, &blk) Hello | ||
] | ||
|
||
$ cat > 5.rb | ||
require "awesome_print" | ||
ap (''.methods - Object.methods).grep(/!/) | ||
^D | ||
$ ruby 5.rb | ||
[ | ||
[ 0] capitalize!() String | ||
[ 1] chomp!(*arg1) String | ||
[ 2] chop!() String | ||
[ 3] delete!(*arg1) String | ||
[ 4] downcase!() String | ||
[ 5] encode!(*arg1) String | ||
[ 6] gsub!(*arg1) String | ||
[ 7] lstrip!() String | ||
[ 8] next!() String | ||
[ 9] reverse!() String | ||
[10] rstrip!() String | ||
[11] slice!(*arg1) String | ||
[12] squeeze!(*arg1) String | ||
[13] strip!() String | ||
[14] sub!(*arg1) String | ||
[15] succ!() String | ||
[16] swapcase!() String | ||
[17] tr!(arg1, arg2) String | ||
[18] tr_s!(arg1, arg2) String | ||
[19] upcase!() String | ||
] | ||
|
||
$ cat > 6.rb | ||
require "awesome_print" | ||
ap 42 == ap(42) | ||
^D | ||
$ ruby 6.rb | ||
42 | ||
true | ||
$ cat 7.rb | ||
require "awesome_print" | ||
some_array = (1..1000).to_a | ||
ap some_array, :limit => true | ||
^D | ||
$ ruby 7.rb | ||
[ | ||
[ 0] 1, | ||
[ 1] 2, | ||
[ 2] 3, | ||
[ 3] .. [996], | ||
[997] 998, | ||
[998] 999, | ||
[999] 1000 | ||
] | ||
|
||
$ cat 8.rb | ||
require "awesome_print" | ||
some_array = (1..1000).to_a | ||
ap some_array, :limit => 5 | ||
^D | ||
$ ruby 8.rb | ||
[ | ||
[ 0] 1, | ||
[ 1] 2, | ||
[ 2] .. [997], | ||
[998] 999, | ||
[999] 1000 | ||
] | ||
|
||
### Example (Rails console) ### | ||
$ rails console | ||
rails> require "awesome_print" | ||
rails> ap Account.all(:limit => 2) | ||
[ | ||
[0] #<Account:0x1033220b8> { | ||
:id => 1, | ||
:user_id => 5, | ||
:assigned_to => 7, | ||
:name => "Hayes-DuBuque", | ||
:access => "Public", | ||
:website => "http://www.hayesdubuque.com", | ||
:toll_free_phone => "1-800-932-6571", | ||
:phone => "(111)549-5002", | ||
:fax => "(349)415-2266", | ||
:deleted_at => nil, | ||
:created_at => Sat, 06 Mar 2010 09:46:10 UTC +00:00, | ||
:updated_at => Sat, 06 Mar 2010 16:33:10 UTC +00:00, | ||
:email => "[email protected]", | ||
:background_info => nil | ||
}, | ||
[1] #<Account:0x103321ff0> { | ||
:id => 2, | ||
:user_id => 4, | ||
:assigned_to => 4, | ||
:name => "Ziemann-Streich", | ||
:access => "Public", | ||
:website => "http://www.ziemannstreich.com", | ||
:toll_free_phone => "1-800-871-0619", | ||
:phone => "(042)056-1534", | ||
:fax => "(106)017-8792", | ||
:deleted_at => nil, | ||
:created_at => Tue, 09 Feb 2010 13:32:10 UTC +00:00, | ||
:updated_at => Tue, 09 Feb 2010 20:05:01 UTC +00:00, | ||
:email => "[email protected]", | ||
:background_info => nil | ||
} | ||
] | ||
rails> ap Account | ||
class Account < ActiveRecord::Base { | ||
:id => :integer, | ||
:user_id => :integer, | ||
:assigned_to => :integer, | ||
:name => :string, | ||
:access => :string, | ||
:website => :string, | ||
:toll_free_phone => :string, | ||
:phone => :string, | ||
:fax => :string, | ||
:deleted_at => :datetime, | ||
:created_at => :datetime, | ||
:updated_at => :datetime, | ||
:email => :string, | ||
:background_info => :string | ||
} | ||
rails> | ||
|
||
### IRB integration ### | ||
To use awesome_print as default formatter in irb and Rails console add the following | ||
code to your ~/.irbrc file: | ||
|
||
require "awesome_print" | ||
AwesomePrint.irb! | ||
|
||
### PRY integration ### | ||
If you miss awesome_print's way of formatting output, here's how you can use it in place | ||
of the formatting which comes with pry. Add the following code to your ~/.pryrc: | ||
|
||
require "awesome_print" | ||
AwesomePrint.pry! | ||
|
||
### Logger Convenience Method ### | ||
awesome_print adds the 'ap' method to the Logger and ActiveSupport::BufferedLogger classes | ||
letting you call: | ||
|
||
logger.ap object | ||
|
||
By default, this logs at the :debug level. You can override that globally with: | ||
|
||
:log_level => :info | ||
|
||
in the custom defaults (see below). You can also override on a per call basis with: | ||
|
||
logger.ap object, :warn | ||
|
||
### ActionView Convenience Method ### | ||
awesome_print adds the 'ap' method to the ActionView::Base class making it available | ||
within Rails templates. For example: | ||
|
||
<%= ap @accounts.first %> # ERB | ||
!= ap @accounts.first # HAML | ||
|
||
With other web frameworks (ex: in Sinatra templates) you can explicitly request HTML | ||
formatting: | ||
|
||
<%= ap @accounts.first, :html => true %> | ||
|
||
### Setting Custom Defaults ### | ||
You can set your own default options by creating ``.aprc`` file in your home | ||
directory. Within that file assign your defaults to ``AwesomePrint.defaults``. | ||
For example: | ||
|
||
# ~/.aprc file. | ||
AwesomePrint.defaults = { | ||
:indent => -2, | ||
:color => { | ||
:hash => :pale, | ||
:class => :white | ||
} | ||
} | ||
|
||
### Running Specs ### | ||
|
||
$ gem install rspec # RSpec 2.x is the requirement. | ||
$ rake spec # Run the entire spec suite. | ||
$ rspec spec/logger_spec.rb # Run individual spec file. | ||
|
||
### Note on Patches/Pull Requests ### | ||
* Fork the project on Github. | ||
* Make your feature addition or bug fix. | ||
* Add specs for it, making sure $ rake spec is all green. | ||
* Commit, do not mess with rakefile, version, or history. | ||
* Send me commit URL (*do not* send me pull requests). | ||
|
||
### Contributors ### | ||
|
||
* Adam Doppelt -- https://github.com/gurgeous | ||
* Andrew O'Brien -- https://github.com/AndrewO | ||
* Andrew Horsman -- https://github.com/basicxman | ||
* Barry Allard -- https://github.com/steakknife | ||
* Benoit Daloze -- http://github.com/eregon | ||
* Brandon Zylstra -- https://github.com/brandondrew | ||
* Dan Lynn -- https://github.com/danlynn | ||
* Daniel Johnson -- https://github.com/adhd360 | ||
* Daniel Bretoi -- http://github.com/danielb2 | ||
* Eloy Duran -- http://github.com/alloy | ||
* Elpizo Choi -- https://github.com/fuJiin | ||
* Evan Senter -- https://github.com/evansenter | ||
* George . -- https://github.com/gardelea | ||
* Greg Weber -- https://github.com/gregwebs | ||
* Jeff Felchner -- https://github.com/jfelchner | ||
* Nikolaj Nikolajsen -- https://github.com/nikolajsen | ||
* Ryan Schlesinger -- https://github.com/ryansch | ||
* Sean Gallagher -- http://github.com/torandu | ||
* Stephan Hagemann -- https://github.com/shageman | ||
* Tim Harper -- http://github.com/timcharper | ||
* Tobias Crawley -- http://github.com/tobias | ||
* Thibaut Barrère -- https://github.com/thbar | ||
* Viktar Basharymau -- https://github.com/DNNX | ||
* Commit, do not mess with Rakefile, version, or history. | ||
* Send me commit URL (*do not* send pull requests). | ||
|
||
### License ### | ||
Copyright (c) 2010-2012 Michael Dvorkin | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Copyright (c) 2010-2012 Michael Dvorkin | ||
# | ||
# Awesome Print is freely distributable under the terms of MIT license. | ||
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php | ||
#------------------------------------------------------------------------------ | ||
# | ||
# Keeping this to allow require "ap" | ||
# | ||
require File.dirname(__FILE__) + "/awesome_print_motion" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters