awesome_print 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ 0.2.0
2
+ - Added support for logger.ap (including Rails logger)
3
+ - Added support for HashWithIndifferentAccess from ActiveSupport
4
+ - ap now works with scripts that use ActiveRecord/ActiveSupport outside Rails
5
+ - ap now correctly shows file and directory names with fancy characters (shell escape)
6
+
1
7
  0.1.4
2
8
  - Format BigDecimal and Rational objects as Float scalars
3
9
  - Explicit options parameter can override custom defaults
data/README.md CHANGED
@@ -144,6 +144,32 @@ Supported color names:
144
144
  }
145
145
  rails>
146
146
 
147
+ ### IRB integration ###
148
+ To use awesome_print as default formatter in irb and Rails console add the following
149
+ lines into your ~/.irbrc file:
150
+
151
+ require "rubygems"
152
+ require "ap"
153
+ IRB::Irb.class_eval do
154
+ def output_value
155
+ ap @context.last_value
156
+ end
157
+ end
158
+
159
+ ### Logger Convenience Method ###
160
+ awesome_print adds an ap method to the Logger and ActiveSupport::BufferedLogger classes,
161
+ allowing you to call:
162
+
163
+ logger.ap object
164
+
165
+ By default, this logs at the :debug level. You can override that globally with
166
+
167
+ :log_level => :info
168
+
169
+ in the custom defaults (see below), or you can override on a per call basis with
170
+
171
+ logger.ap object, :warn
172
+
147
173
  ### Setting Custom Defaults ###
148
174
  You can set your own default options by creating ``.aprc`` file in your home
149
175
  directory. Within that file assign your defaults to ``AwesomePrint.defaults``.
@@ -165,8 +191,14 @@ For example:
165
191
  * Commit, do not mess with rakefile, version, or history.
166
192
  * Send me a pull request.
167
193
 
194
+ ### Contributors ###
195
+
196
+ * Daniel Bretoi -- http://github.com/danielb2
197
+ * eregon -- http://github.com/eregon
198
+ * Tobias Crawley -- http://github.com/tobias
199
+
168
200
  ### License ###
169
201
  Copyright (c) 2010 Michael Dvorkin
170
202
  %w(mike dvorkin.net) * "@" || %w(mike fatfreecrm.com) * "@"
171
203
 
172
- Released under the MIT license. See LICENSE file for details.
204
+ Released under the MIT license. See LICENSE file for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.2.0
data/lib/ap.rb CHANGED
@@ -7,4 +7,8 @@ require File.dirname(__FILE__) + "/ap/core_ext/string"
7
7
  require File.dirname(__FILE__) + "/ap/core_ext/kernel"
8
8
  require File.dirname(__FILE__) + "/ap/awesome_print"
9
9
 
10
- require File.dirname(__FILE__) + "/ap/mixin/rails" if defined?(::Rails)
10
+ require File.dirname(__FILE__) + "/ap/core_ext/logger" if defined?(::Logger) or defined?(::ActiveSupport::BufferedLogger)
11
+
12
+ require File.dirname(__FILE__) + "/ap/mixin/active_record" if defined?(::ActiveRecord)
13
+ require File.dirname(__FILE__) + "/ap/mixin/active_support" if defined?(::ActiveSupport)
14
+
@@ -3,6 +3,8 @@
3
3
  # Awesome Print is freely distributable under the terms of MIT license.
4
4
  # See LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
5
  #------------------------------------------------------------------------------
6
+ require "shellwords"
7
+
6
8
  class AwesomePrint
7
9
  AP = :__awesome_print__
8
10
  CORE = [ :array, :hash, :class, :file, :dir, :bigdecimal, :rational ]
@@ -20,7 +22,7 @@ class AwesomePrint
20
22
  :falseclass => :red,
21
23
  :fixnum => :blue,
22
24
  :float => :blue,
23
- :hash => :gray,
25
+ :hash => :pale,
24
26
  :nilclass => :red,
25
27
  :string => :yellowish,
26
28
  :symbol => :cyanish,
@@ -36,8 +38,7 @@ class AwesomePrint
36
38
  @indentation = @options[:indent].abs
37
39
  Thread.current[AP] ||= []
38
40
  end
39
-
40
-
41
+
41
42
  private
42
43
 
43
44
  # Format an array.
@@ -104,14 +105,14 @@ class AwesomePrint
104
105
  # Format File object.
105
106
  #------------------------------------------------------------------------------
106
107
  def awesome_file(f)
107
- ls = File.directory?(f) ? `ls -adlF #{f.path}` : `ls -alF #{f.path}`
108
+ ls = File.directory?(f) ? `ls -adlF #{f.path.shellescape}` : `ls -alF #{f.path.shellescape}`
108
109
  awesome_self(f, :with => ls.empty? ? nil : "\n#{ls.chop}")
109
110
  end
110
111
 
111
112
  # Format Dir object.
112
113
  #------------------------------------------------------------------------------
113
114
  def awesome_dir(d)
114
- ls = `ls -alF #{d.path}`
115
+ ls = `ls -alF #{d.path.shellescape}`
115
116
  awesome_self(d, :with => ls.empty? ? nil : "\n#{ls.chop}")
116
117
  end
117
118
 
@@ -0,0 +1,18 @@
1
+ # Copyright (c) 2010 Michael Dvorkin
2
+ #
3
+ # Awesome Print is freely distributable under the terms of MIT license.
4
+ # See LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
+ #------------------------------------------------------------------------------
6
+ module AwesomePrintLogger
7
+
8
+ # Add ap method to logger
9
+ #------------------------------------------------------------------------------
10
+ def ap(object, level = nil)
11
+ level ||= AwesomePrint.defaults[:log_level] || :debug
12
+ send level, object.ai
13
+ end
14
+
15
+ end
16
+
17
+ Logger.send(:include, AwesomePrintLogger) if defined?(Logger)
18
+ ActiveSupport::BufferedLogger.send(:include, AwesomePrintLogger) if defined?(::ActiveSupport::BufferedLogger)
@@ -3,23 +3,22 @@
3
3
  # Awesome Print is freely distributable under the terms of MIT license.
4
4
  # See LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
5
  #------------------------------------------------------------------------------
6
- module AwesomePrintRails
6
+ module AwesomePrintActiveRecord
7
7
 
8
8
  def self.included(base)
9
- base.alias_method_chain :printable, :rails
9
+ base.send :alias_method, :printable_without_active_record, :printable
10
+ base.send :alias_method, :printable, :printable_with_active_record
10
11
  end
11
12
 
12
13
  # Add ActiveRecord class names to the dispatcher pipeline.
13
14
  #------------------------------------------------------------------------------
14
- def printable_with_rails(object)
15
- printable = printable_without_rails(object)
15
+ def printable_with_active_record(object)
16
+ printable = printable_without_active_record(object)
16
17
  if printable == :self
17
18
  if object.is_a?(ActiveRecord::Base)
18
19
  printable = :active_record_instance
19
- elsif object.is_a?(ActiveSupport::TimeWithZone)
20
- printable = :active_support_time
21
20
  end
22
- elsif printable == :class && object.class.is_a?(ActiveRecord::Base.class)
21
+ elsif printable == :class and object.ancestors.include?(ActiveRecord::Base)
23
22
  printable = :active_record_class
24
23
  end
25
24
  printable
@@ -48,13 +47,7 @@ module AwesomePrintRails
48
47
  object.inspect
49
48
  end
50
49
  end
51
-
52
- # Format ActiveSupport::TimeWithZone as standard Time.
53
- #------------------------------------------------------------------------------
54
- def awesome_active_support_time(object)
55
- awesome_self(object, :as => :time)
56
- end
57
-
50
+
58
51
  end
59
52
 
60
- AwesomePrint.send(:include, AwesomePrintRails)
53
+ AwesomePrint.send(:include, AwesomePrintActiveRecord)
@@ -0,0 +1,44 @@
1
+ # Copyright (c) 2010 Michael Dvorkin
2
+ #
3
+ # Awesome Print is freely distributable under the terms of MIT license.
4
+ # See LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
+ #------------------------------------------------------------------------------
6
+ module AwesomePrintActiveSupport
7
+
8
+ def self.included(base)
9
+ base.send :alias_method, :printable_without_active_support, :printable
10
+ base.send :alias_method, :printable, :printable_with_active_support
11
+ end
12
+
13
+ # Add ActiveSupport class names to the dispatcher pipeline.
14
+ #------------------------------------------------------------------------------
15
+ def printable_with_active_support(object)
16
+ printable = printable_without_active_support(object)
17
+ if printable == :self
18
+ if object.is_a?(ActiveSupport::TimeWithZone)
19
+ printable = :active_support_time
20
+ elsif object.is_a?(HashWithIndifferentAccess)
21
+ printable = :hash_with_indifferent_access
22
+ end
23
+ end
24
+ printable
25
+ end
26
+
27
+ # Format ActiveSupport::TimeWithZone as standard Time.
28
+ #------------------------------------------------------------------------------
29
+ def awesome_active_support_time(object)
30
+ awesome_self(object, :as => :time)
31
+ end
32
+
33
+ # Format HashWithIndifferentAccess as standard Hash.
34
+ #
35
+ # NOTE: can't use awesome_self(object, :as => :hash) since awesome_self uses
36
+ # object.inspect internally, i.e. it would convert hash to string.
37
+ #------------------------------------------------------------------------------
38
+ def awesome_hash_with_indifferent_access(object)
39
+ awesome_hash(object)
40
+ end
41
+
42
+ end
43
+
44
+ AwesomePrint.send(:include, AwesomePrintActiveSupport)
@@ -1,6 +1,10 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- if defined?(::Rails)
3
+ require 'active_record'
4
+ require 'ap/mixin/active_record'
5
+
6
+
7
+ if defined?(::ActiveRecord)
4
8
 
5
9
  # Create tableless ActiveRecord model.
6
10
  #------------------------------------------------------------------------------
@@ -18,9 +22,19 @@ if defined?(::Rails)
18
22
  column :rank, :integer
19
23
  column :admin, :boolean
20
24
  column :created_at, :datetime
21
- end
22
25
 
23
- describe "AwesomePrint/Rails" do
26
+ def self.table_exists?
27
+ true
28
+ end
29
+ end
30
+
31
+ class SubUser < User
32
+ def self.columns
33
+ User.columns
34
+ end
35
+ end
36
+
37
+ describe "AwesomePrint/ActiveRecord" do
24
38
  before(:each) do
25
39
  stub_dotfile!
26
40
  end
@@ -28,6 +42,7 @@ if defined?(::Rails)
28
42
  #------------------------------------------------------------------------------
29
43
  describe "ActiveRecord instance" do
30
44
  before(:each) do
45
+ ActiveRecord::Base.default_timezone = :utc
31
46
  @diana = User.new(:name => "Diana", :rank => 1, :admin => false, :created_at => "1992-10-10 12:30:00")
32
47
  @laura = User.new(:name => "Laura", :rank => 2, :admin => true, :created_at => "2003-05-26 14:15:00")
33
48
  @ap = AwesomePrint.new(:plain => true)
@@ -41,7 +56,7 @@ if defined?(::Rails)
41
56
  :name => "Diana",
42
57
  :rank => 1,
43
58
  :admin => false,
44
- :created_at => Sat, 10 Oct 1992 12:30:00 UTC +00:00
59
+ :created_at => Sat Oct 10 12:30:00 UTC 1992
45
60
  }
46
61
  EOS
47
62
  end
@@ -55,14 +70,14 @@ EOS
55
70
  :name => "Diana",
56
71
  :rank => 1,
57
72
  :admin => false,
58
- :created_at => Sat, 10 Oct 1992 12:30:00 UTC +00:00
73
+ :created_at => Sat Oct 10 12:30:00 UTC 1992
59
74
  },
60
75
  [1] #<User:0x01234567> {
61
76
  :id => nil,
62
77
  :name => "Laura",
63
78
  :rank => 2,
64
79
  :admin => true,
65
- :created_at => Mon, 26 May 2003 14:15:00 UTC +00:00
80
+ :created_at => Mon May 26 14:15:00 UTC 2003
66
81
  }
67
82
  ]
68
83
  EOS
@@ -71,7 +86,7 @@ EOS
71
86
 
72
87
  #------------------------------------------------------------------------------
73
88
  describe "ActiveRecord class" do
74
- it "should" do
89
+ it "should print the class" do
75
90
  @ap = AwesomePrint.new(:plain => true)
76
91
  @ap.send(:awesome, User).should == <<-EOS.strip
77
92
  class User < ActiveRecord::Base {
@@ -81,7 +96,22 @@ class User < ActiveRecord::Base {
81
96
  :admin => :boolean,
82
97
  :created_at => :datetime
83
98
  }
84
- EOS
99
+ EOS
100
+
101
+ end
102
+
103
+ it "should print the class for non-direct subclasses of AR::Base" do
104
+ @ap = AwesomePrint.new(:plain => true)
105
+ @ap.send(:awesome, SubUser).should == <<-EOS.strip
106
+ class SubUser < User {
107
+ :id => :integer,
108
+ :name => :string,
109
+ :rank => :integer,
110
+ :admin => :boolean,
111
+ :created_at => :datetime
112
+ }
113
+ EOS
114
+
85
115
  end
86
116
  end
87
117
  end
@@ -267,7 +267,7 @@ EOS
267
267
  #------------------------------------------------------------------------------
268
268
  describe "BigDecimal and Rational" do
269
269
  it "should present BigDecimal object as Float scalar" do
270
- big = BigDecimal("2010.04")
270
+ big = BigDecimal("2010.4")
271
271
  big.ai(:plain => true).should == "2010.4"
272
272
  end
273
273
 
@@ -0,0 +1,43 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+
4
+ require 'logger'
5
+ require 'ap/core_ext/logger'
6
+
7
+ describe "AwesomePrint logging extensions" do
8
+ before(:all) do
9
+ @logger = Logger.new('/dev/null')
10
+ end
11
+
12
+ describe "ap method" do
13
+ it "should awesome_inspect the given object" do
14
+ object = mock
15
+ object.should_receive(:ai)
16
+ @logger.ap object
17
+ end
18
+
19
+ describe "the log level" do
20
+ before(:each) do
21
+ AwesomePrint.defaults = { }
22
+ end
23
+
24
+ it "should fallback to the default :debug log level" do
25
+ @logger.should_receive(:debug)
26
+ @logger.ap(nil)
27
+ end
28
+
29
+ it "should use the global user default if no level passed" do
30
+ AwesomePrint.defaults = { :log_level => :info }
31
+ @logger.should_receive(:info)
32
+ @logger.ap(nil)
33
+ end
34
+
35
+ it "should use the passed in level" do
36
+ @logger.should_receive(:warn)
37
+ @logger.ap(nil, :warn)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+
@@ -3,6 +3,7 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'ap'
4
4
  require 'spec'
5
5
  require 'spec/autorun'
6
+ require 'rubygems'
6
7
 
7
8
  Spec::Runner.configure do |config|
8
9
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 4
9
- version: 0.1.4
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Michael Dvorkin
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-08 00:00:00 -07:00
17
+ date: 2010-05-05 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -50,11 +50,14 @@ files:
50
50
  - lib/ap.rb
51
51
  - lib/ap/awesome_print.rb
52
52
  - lib/ap/core_ext/kernel.rb
53
+ - lib/ap/core_ext/logger.rb
53
54
  - lib/ap/core_ext/string.rb
54
- - lib/ap/mixin/rails.rb
55
+ - lib/ap/mixin/active_record.rb
56
+ - lib/ap/mixin/active_support.rb
55
57
  - rails/init.rb
58
+ - spec/active_record_spec.rb
56
59
  - spec/awesome_print_spec.rb
57
- - spec/rails_spec.rb
60
+ - spec/logger_spec.rb
58
61
  - spec/spec.opts
59
62
  - spec/spec_helper.rb
60
63
  - spec/string_spec.rb
@@ -89,7 +92,8 @@ signing_key:
89
92
  specification_version: 3
90
93
  summary: Pretty print Ruby objects with proper indentation and colors.
91
94
  test_files:
95
+ - spec/active_record_spec.rb
92
96
  - spec/awesome_print_spec.rb
93
- - spec/rails_spec.rb
97
+ - spec/logger_spec.rb
94
98
  - spec/spec_helper.rb
95
99
  - spec/string_spec.rb