awesome_print 0.3.2 → 0.4.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,13 @@
1
+ 0.4.0
2
+ - 'ap object' now returns the object (Stephan Hagemann)
3
+ - Added :html => true option to enable HTML colors rather that ANSI (ex. Sinatra templates)
4
+ - Added AwesomePrint.force_colors! to allow color output on demand (Andrew O'Brien)
5
+ - Added MongoMapper formatter mixin (Elpizo Choi)
6
+ - Fixed formatting of methods array when object#method is overridden
7
+ - Fixed potential stack errors by checking whether AwesomePrint is already loaded
8
+ - Improved Ruby 1.8.6 and 1.8.7 compatibility
9
+ - Improved Windows compatibility (Viktar Basharymau)
10
+
1
11
  0.3.2
2
12
  - Make sure Rails mixins get loaded in Rails console when required from .irbrc
3
13
  - Fixed an issue with classes that define their own #send method (ex: Socket)
data/README.md CHANGED
@@ -15,15 +15,16 @@ objects and usage within Rails templates are supported via included mixins.
15
15
 
16
16
  ### Usage ###
17
17
 
18
- require "ap"
18
+ require "awesome_print"
19
19
  ap object, options = {}
20
20
 
21
21
  Default options:
22
22
 
23
- :multiline => true, # Display in multipe lines.
24
- :plain => false, # Use colors.
25
- :indent => 4, # Indent using 4 spaces.
26
- :index => true, # Display array indices.
23
+ :multiline => true, # Display in multiple lines.
24
+ :plain => false, # Use colors.
25
+ :indent => 4, # Indent using 4 spaces.
26
+ :index => true, # Display array indices.
27
+ :html => false, # Use ANSI color codes rather than HTML.
27
28
  :sorted_hash_keys => false, # Do not sort hash keys.
28
29
  :color => {
29
30
  :array => :white,
@@ -48,7 +49,7 @@ Supported color names:
48
49
 
49
50
  ### Examples ###
50
51
  $ cat > 1.rb
51
- require "ap"
52
+ require "awesome_print"
52
53
  data = [ false, 42, %w(forty two), { :now => Time.now, :class => Time.now.class, :distance => 42e42 } ]
53
54
  ap data
54
55
  ^D
@@ -68,7 +69,7 @@ Supported color names:
68
69
  ]
69
70
 
70
71
  $ cat > 2.rb
71
- require "ap"
72
+ require "awesome_print"
72
73
  data = { :now => Time.now, :class => Time.now.class, :distance => 42e42 }
73
74
  ap data, :indent => -2 # <-- Left align hash keys.
74
75
  ^D
@@ -80,7 +81,7 @@ Supported color names:
80
81
  }
81
82
 
82
83
  $ cat > 3.rb
83
- require "ap"
84
+ require "awesome_print"
84
85
  data = [ false, 42, %w(forty two) ]
85
86
  data << data # <-- Nested array.
86
87
  ap data, :multiline => false
@@ -89,7 +90,7 @@ Supported color names:
89
90
  [ false, 42, [ "forty", "two" ], [...] ]
90
91
 
91
92
  $ cat > 4.rb
92
- require "ap"
93
+ require "awesome_print"
93
94
  class Hello
94
95
  def self.world(x, y, z = nil, &blk)
95
96
  end
@@ -102,7 +103,7 @@ Supported color names:
102
103
  ]
103
104
 
104
105
  $ cat > 5.rb
105
- require "ap"
106
+ require "awesome_print"
106
107
  ap (''.methods - Object.methods).grep(/!/)
107
108
  ^D
108
109
  $ ruby 5.rb
@@ -129,10 +130,17 @@ Supported color names:
129
130
  [19] upcase!() String
130
131
  ]
131
132
 
133
+ $ cat > 6.rb
134
+ require "awesome_print"
135
+ ap 42 == ap(42)
136
+ ^D
137
+ $ ruby 6.rb
138
+ 42
139
+ true
140
+
132
141
  ### Example (Rails console) ###
133
- $ ruby script/console
134
- Loading development environment (Rails 2.3.5)
135
- rails> require "ap"
142
+ $ rails console
143
+ rails> require "awesome_print"
136
144
  rails> ap Account.all(:limit => 2)
137
145
  [
138
146
  [0] #<Account:0x1033220b8> {
@@ -192,7 +200,7 @@ To use awesome_print as default formatter in irb and Rails console add the follo
192
200
  lines into your ~/.irbrc file:
193
201
 
194
202
  require "rubygems"
195
- require "ap"
203
+ require "awesome_print"
196
204
 
197
205
  unless IRB.version.include?('DietRB')
198
206
  IRB::Irb.class_eval do
@@ -209,25 +217,30 @@ lines into your ~/.irbrc file:
209
217
  end
210
218
 
211
219
  ### Logger Convenience Method ###
212
- awesome_print adds an ap method to the Logger and ActiveSupport::BufferedLogger classes,
213
- allowing you to call:
220
+ awesome_print adds the 'ap' method to the Logger and ActiveSupport::BufferedLogger classes
221
+ letting you call:
214
222
 
215
223
  logger.ap object
216
224
 
217
- By default, this logs at the :debug level. You can override that globally with
225
+ By default, this logs at the :debug level. You can override that globally with:
218
226
 
219
227
  :log_level => :info
220
228
 
221
- in the custom defaults (see below), or you can override on a per call basis with
229
+ in the custom defaults (see below). You can also override on a per call basis with:
222
230
 
223
231
  logger.ap object, :warn
224
232
 
225
233
  ### ActionView Convenience Method ###
226
- awesome_print adds an ap method to the ActionView::Base class making it available
234
+ awesome_print adds the 'ap' method to the ActionView::Base class making it available
227
235
  within Rails templates. For example:
228
236
 
229
237
  <%= ap @accounts.first %>
230
238
 
239
+ With other web frameworks (ex: in Sinatra templates) you can explicitly request HTML
240
+ formatting:
241
+
242
+ <%= ap @accounts.first, :html => true %>
243
+
231
244
  ### Setting Custom Defaults ###
232
245
  You can set your own default options by creating ``.aprc`` file in your home
233
246
  directory. Within that file assign your defaults to ``AwesomePrint.defaults``.
@@ -244,9 +257,9 @@ For example:
244
257
 
245
258
  ### Running Specs ###
246
259
 
247
- $ rake spec # Entire spec suite.
248
- $ ruby -rubygems spec/logger_spec.rb # Individual spec file (Ruby 1.8.7 and RSpec 1.3+)
249
- $ rspec spec/logger_spec.rb # Individual spec file (Ruby 1.9.2 and RSpec 2.0+)
260
+ $ gem install rspec # RSpec 2.x is the requirement.
261
+ $ rake spec # Run the entire spec suite.
262
+ $ rspec spec/logger_spec.rb # Run individual spec file.
250
263
 
251
264
  ### Note on Patches/Pull Requests ###
252
265
  * Fork the project on Github.
@@ -257,16 +270,22 @@ For example:
257
270
 
258
271
  ### Contributors ###
259
272
 
273
+ * Andrew O'Brien -- https://github.com/AndrewO
260
274
  * Daniel Bretoi -- http://github.com/danielb2
261
275
  * Eloy Duran -- http://github.com/alloy
276
+ * Elpizo Choi -- https://github.com/fuJiin
262
277
  * Benoit Daloze -- http://github.com/eregon
263
278
  * Sean Gallagher -- http://github.com/torandu
279
+ * Stephan Hagemann -- https://github.com/shageman
264
280
  * Tim Harper -- http://github.com/timcharper
265
281
  * Tobias Crawley -- http://github.com/tobias
282
+ * Viktar Basharymau -- https://github.com/DNNX
266
283
 
267
284
  ### License ###
268
285
  Copyright (c) 2010-2011 Michael Dvorkin
286
+
269
287
  twitter.com/mid
288
+
270
289
  %w(mike dvorkin.net) * "@" || %w(mike fatfreecrm.com) * "@"
271
290
 
272
291
  Released under the MIT license. See LICENSE file for details.
data/Rakefile CHANGED
@@ -11,13 +11,8 @@ begin
11
11
  gem.email = "mike@dvorkin.net"
12
12
  gem.homepage = "http://github.com/michaeldv/awesome_print"
13
13
  gem.authors = ["Michael Dvorkin"]
14
- if RUBY_VERSION.to_f >= 1.9
15
- gem.add_development_dependency "rspec", ">= 2.0.0"
16
- else
17
- gem.add_development_dependency "rspec", ">= 1.3.0"
18
- end
14
+ gem.add_development_dependency "rspec", ">= 2.5.0"
19
15
  gem.files = FileList["[A-Z]*", "lib/**/*.rb", "rails/*.rb", "spec/*", "init.rb"]
20
- gem.has_rdoc = false
21
16
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
22
17
  end
23
18
  Jeweler::GemcutterTasks.new
@@ -25,30 +20,15 @@ rescue LoadError
25
20
  puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
26
21
  end
27
22
 
28
- if RUBY_VERSION.to_f >= 1.9
29
- require "rspec/core/rake_task" # RSpec 2.0
30
- RSpec::Core::RakeTask.new(:spec) do |spec|
31
- spec.pattern = 'spec/**/*_spec.rb'
32
- spec.rspec_opts = ['--color']
33
- end
34
-
35
- RSpec::Core::RakeTask.new(:rcov) do |spec|
36
- spec.rcov = true
37
- spec.rcov_opts = %q[--exclude "spec"]
38
- end
39
- else
40
- require 'spec/rake/spectask'
41
- Spec::Rake::SpecTask.new(:spec) do |spec|
42
- spec.libs << 'lib' << 'spec'
43
- spec.spec_opts = ['--color']
44
- spec.spec_files = FileList['spec/**/*_spec.rb']
45
- end
23
+ require "rspec/core/rake_task"
24
+ RSpec::Core::RakeTask.new(:spec) do |spec|
25
+ spec.pattern = 'spec/**/*_spec.rb'
26
+ spec.rspec_opts = ['--color']
27
+ end
46
28
 
47
- Spec::Rake::SpecTask.new(:rcov) do |spec|
48
- spec.libs << 'lib' << 'spec'
49
- spec.pattern = 'spec/**/*_spec.rb'
50
- spec.rcov = true
51
- end
29
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
30
+ spec.rcov = true
31
+ spec.rcov_opts = %q[--exclude "spec"]
52
32
  end
53
33
 
54
34
  task :spec => :check_dependencies
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.4.0
data/init.rb CHANGED
@@ -1 +1 @@
1
- require File.join(File.dirname(__FILE__), "lib", "ap")
1
+ require File.join(File.dirname(__FILE__), "lib", "awesome_print")
data/lib/ap.rb CHANGED
@@ -3,15 +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
- %w(array string method object class kernel).each do |file|
7
- require File.dirname(__FILE__) + "/ap/core_ext/#{file}"
8
- end
6
+ #
7
+ # AwesomePrint might be loaded implicitly through ~/.irbrc so do nothing
8
+ # for subsequent requires.
9
+ #
10
+ unless defined?(AwesomePrint)
11
+ %w(array string method object class kernel).each do |file|
12
+ require File.dirname(__FILE__) + "/ap/core_ext/#{file}"
13
+ end
9
14
 
10
- require File.dirname(__FILE__) + "/ap/awesome_print"
11
- require File.dirname(__FILE__) + "/ap/core_ext/logger" if defined?(Logger)
12
- require File.dirname(__FILE__) + "/ap/mixin/action_view" if defined?(ActionView)
15
+ require File.dirname(__FILE__) + "/ap/awesome_print"
16
+ require File.dirname(__FILE__) + "/ap/core_ext/logger" if defined?(Logger)
17
+ require File.dirname(__FILE__) + "/ap/mixin/action_view" if defined?(ActionView)
13
18
 
14
- # Load the following under normal circumstatnces as well as in Rails
15
- # console when required from ~/.irbrc.
16
- require File.dirname(__FILE__) + "/ap/mixin/active_record" if defined?(ActiveRecord) || (defined?(IRB) && ENV['RAILS_ENV'])
17
- require File.dirname(__FILE__) + "/ap/mixin/active_support" if defined?(ActiveSupport) || (defined?(IRB) && ENV['RAILS_ENV'])
19
+ # Load the following under normal circumstatnces as well as in Rails
20
+ # console when required from ~/.irbrc.
21
+ require File.dirname(__FILE__) + "/ap/mixin/active_record" if defined?(ActiveRecord) || (defined?(IRB) && ENV['RAILS_ENV'])
22
+ require File.dirname(__FILE__) + "/ap/mixin/active_support" if defined?(ActiveSupport) || (defined?(IRB) && ENV['RAILS_ENV'])
23
+ require File.dirname(__FILE__) + "/ap/mixin/mongo_mapper" if defined?(MongoMapper)
24
+ end
@@ -3,19 +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
+ require "cgi"
6
7
  require "shellwords"
7
8
 
8
9
  class AwesomePrint
9
10
  AP = :__awesome_print__ unless defined?(AwesomePrint::AP)
10
11
  CORE = [ :array, :hash, :class, :file, :dir, :bigdecimal, :rational, :struct, :method, :unboundmethod ] unless defined?(AwesomePrint::CORE)
12
+ @@force_colors = false
11
13
 
12
14
  def initialize(options = {})
13
15
  @options = {
14
- :multiline => true,
15
- :plain => false,
16
- :indent => 4,
17
- :index => true,
18
- :sorted_hash_keys => false,
16
+ :multiline => true, # Display in multiple lines.
17
+ :plain => false, # Use colors.
18
+ :indent => 4, # Indent using 4 spaces.
19
+ :index => true, # Display array indices.
20
+ :html => false, # Use ANSI color codes rather than HTML.
21
+ :sorted_hash_keys => false, # Do not sort hash keys.
19
22
  :color => {
20
23
  :array => :white,
21
24
  :bigdecimal => :blue,
@@ -43,7 +46,8 @@ class AwesomePrint
43
46
  @indentation = @options[:indent].abs
44
47
  Thread.current[AP] ||= []
45
48
  end
46
-
49
+
50
+
47
51
  private
48
52
 
49
53
  # Format an array.
@@ -103,7 +107,7 @@ class AwesomePrint
103
107
  end
104
108
  end
105
109
 
106
- # Format a Struct. If @options[:indent] if negative left align hash keys.
110
+ # Format a Struct. If @options[:indent] is negative left align hash keys.
107
111
  #------------------------------------------------------------------------------
108
112
  def awesome_struct(s)
109
113
  h = {}
@@ -176,13 +180,15 @@ class AwesomePrint
176
180
  def methods_array(a)
177
181
  object = a.instance_variable_get('@__awesome_methods__')
178
182
  tuples = a.map do |name|
179
- if object.respond_to?(name, true) # Regular method?
180
- method_tuple(object.method(name))
181
- elsif object.respond_to?(:instance_method) # Unbound method?
183
+ tuple = if object.respond_to?(name, true) # Is this a regular method?
184
+ the_method = object.method(name) rescue nil # Avoid potential ArgumentError if object#method is overridden.
185
+ if the_method && the_method.respond_to?(:arity) # Is this original object#method?
186
+ method_tuple(the_method) # Yes, we are good.
187
+ end
188
+ elsif object.respond_to?(:instance_method) # Is this an unbound method?
182
189
  method_tuple(object.instance_method(name))
183
- else # WTF method.
184
- [ name.to_s, '(?)', '' ]
185
190
  end
191
+ tuple || [ name.to_s, '(?)', '' ] # Return WTF default if all the above fails.
186
192
  end
187
193
 
188
194
  width = (tuples.size - 1).to_s.size
@@ -241,10 +247,11 @@ class AwesomePrint
241
247
  # Pick the color and apply it to the given string as necessary.
242
248
  #------------------------------------------------------------------------------
243
249
  def colorize(s, type)
244
- if @options[:plain] || @options[:color][type].nil?
245
- s
250
+ s = CGI.escapeHTML(s) if @options[:html]
251
+ if @options[:plain] || !@options[:color][type] || !colorize?
252
+ @options[:html] ? "<pre>#{s}</pre>" : s
246
253
  else
247
- s.send(@options[:color][type])
254
+ s.send(@options[:color][type], @options[:html])
248
255
  end
249
256
  end
250
257
 
@@ -319,6 +326,19 @@ class AwesomePrint
319
326
  $stderr.puts "Could not load #{dotfile}: #{e}"
320
327
  end
321
328
 
329
+ # Return true if we are to colorize the output.
330
+ #------------------------------------------------------------------------------
331
+ def colorize?
332
+ @@force_colors || (STDOUT.tty? && ((ENV['TERM'] && ENV['TERM'] != 'dumb') || ENV['ANSICON']))
333
+ end
334
+
335
+ # Class accessor to force colorized output (ex. forked subprocess where TERM
336
+ # might be dumb).
337
+ #------------------------------------------------------------------------------
338
+ def self.force_colors!(value = true)
339
+ @@force_colors = value
340
+ end
341
+
322
342
  # Class accessors for custom defaults.
323
343
  #------------------------------------------------------------------------------
324
344
  def self.defaults
@@ -14,12 +14,13 @@
14
14
  #
15
15
  class Array #:nodoc:
16
16
  [ :-, :& ].each do |operator|
17
- alias :"original_#{operator.object_id}" :"#{operator}"
17
+ original_operator = instance_method(operator)
18
+
18
19
  define_method operator do |*args|
19
- arr = self.__send__(:"original_#{operator.object_id}", *args)
20
+ arr = original_operator.bind(self).call(*args)
20
21
  if self.instance_variable_defined?('@__awesome_methods__')
21
22
  arr.instance_variable_set('@__awesome_methods__', self.instance_variable_get('@__awesome_methods__'))
22
- arr.sort!
23
+ arr.sort! { |a, b| a.to_s <=> b.to_s } # Need the block since Ruby 1.8.x can't sort arrays of symbols.
23
24
  end
24
25
  arr
25
26
  end
@@ -56,7 +57,10 @@ class Array #:nodoc:
56
57
  arr = unless blk
57
58
  original_grep(pattern)
58
59
  else
59
- original_grep(pattern) { |match| eval("%Q/#{match}/ =~ #{pattern.inspect}", blk.binding); yield match }
60
+ original_grep(pattern) do |match|
61
+ eval("%Q/#{match.to_s.gsub('/', '\/')}/ =~ #{pattern.inspect}", blk.binding)
62
+ yield match
63
+ end
60
64
  end
61
65
  if self.instance_variable_defined?('@__awesome_methods__')
62
66
  arr.instance_variable_set('@__awesome_methods__', self.instance_variable_get('@__awesome_methods__'))
@@ -6,10 +6,10 @@
6
6
  class Class #:nodoc:
7
7
  # Remaining public/private etc. '_methods' are handled in core_ext/object.rb.
8
8
  %w(instance_methods private_instance_methods protected_instance_methods public_instance_methods).each do |name|
9
- alias :"original_#{name}" :"#{name}"
9
+ original_method = instance_method(name)
10
10
 
11
11
  define_method name do |*args|
12
- methods = self.__send__(:"original_#{name}", *args)
12
+ methods = original_method.bind(self).call(*args)
13
13
  methods.instance_variable_set('@__awesome_methods__', self) # Evil?!
14
14
  methods.sort!
15
15
  end
@@ -13,6 +13,7 @@ module Kernel
13
13
 
14
14
  def ap(object, options = {})
15
15
  puts object.ai(options)
16
+ object
16
17
  end
17
18
  alias :awesome_print :ap
18
19
 
@@ -6,10 +6,10 @@
6
6
  class Object #:nodoc:
7
7
  # Remaining instance '_methods' are handled in core_ext/class.rb.
8
8
  %w(methods private_methods protected_methods public_methods singleton_methods).each do |name|
9
- alias :"original_#{name}" :"#{name}"
9
+ original_method = instance_method(name)
10
10
 
11
11
  define_method name do |*args|
12
- methods = self.__send__(:"original_#{name}", *args)
12
+ methods = original_method.bind(self).call(*args)
13
13
  methods.instance_variable_set('@__awesome_methods__', self) # Evil?!
14
14
  methods.sort!
15
15
  end
@@ -11,13 +11,14 @@ class String
11
11
  # 1 => bright
12
12
  # 0 => normal
13
13
 
14
- [ :gray, :red, :green, :yellow, :blue, :purple, :cyan, :white ].each_with_index do |color, i|
15
- if STDOUT.tty? && ENV['TERM'] && ENV['TERM'] != 'dumb'
16
- define_method color do "\033[1;#{30+i}m#{self}\033[0m" end
17
- define_method :"#{color}ish" do "\033[0;#{30+i}m#{self}\033[0m" end
18
- else
19
- define_method color do self end
20
- alias_method :"#{color}ish", color
14
+ %w(gray red green yellow blue purple cyan white).zip(
15
+ %w(black darkred darkgreen brown navy darkmagenta darkcyan slategray)).each_with_index do |(color, shade), i|
16
+ define_method color do |*html|
17
+ html[0] ? %Q|<pre style="color:#{color}">#{self}</pre>| : "\033[1;#{30+i}m#{self}\033[0m"
18
+ end
19
+
20
+ define_method "#{color}ish" do |*html|
21
+ html[0] ? %Q|<pre style="color:#{shade}">#{self}</pre>| : "\033[0;#{30+i}m#{self}\033[0m"
21
22
  end
22
23
  end
23
24
 
@@ -5,30 +5,9 @@
5
5
  #------------------------------------------------------------------------------
6
6
  module AwesomePrintActionView
7
7
 
8
- def self.included(base)
9
- unless base.const_defined?(:AP_ANSI_TO_HTML)
10
- hash = {} # Build ANSI => HTML color map.
11
- [ :gray, :red, :green, :yellow, :blue, :purple, :cyan, :white ].each_with_index do |color, i|
12
- hash["\033[1;#{30+i}m"] = color
13
- end
14
- [ :black, :darkred, :darkgreen, :brown, :navy, :darkmagenta, :darkcyan, :slategray ].each_with_index do |color, i|
15
- hash["\033[0;#{30+i}m"] = color
16
- end
17
- base.const_set(:AP_ANSI_TO_HTML, hash.freeze)
18
- end
19
- end
20
-
8
+ # Use HTML colors and add default "debug_dump" class to the resulting HTML.
21
9
  def ap_debug(object, options = {})
22
- formatted = h(object.ai(options))
23
-
24
- unless options[:plain]
25
- self.class::AP_ANSI_TO_HTML.each do |key, value|
26
- formatted.gsub!(key, %Q|<font color="#{value}">|)
27
- end
28
- formatted.gsub!("\033[0m", "</font>")
29
- end
30
-
31
- content_tag(:pre, formatted, :class => "debug_dump")
10
+ object.ai(options.merge(:html => true)).sub(/^<pre([\s>])/, '<pre class="debug_dump"\\1')
32
11
  end
33
12
 
34
13
  alias_method :ap, :ap_debug
@@ -0,0 +1,54 @@
1
+ # Copyright (c) 2010-2011 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 AwesomePrintMongoMapper
7
+
8
+ def self.included(base)
9
+ base.send :alias_method, :printable_without_mongo_mapper, :printable
10
+ base.send :alias_method, :printable, :printable_with_mongo_mapper
11
+ end
12
+
13
+ # Add MongoMapper class names to the dispatcher pipeline.
14
+ #------------------------------------------------------------------------------
15
+ def printable_with_mongo_mapper(object)
16
+ printable = printable_without_mongo_mapper(object)
17
+ return printable if !defined?(MongoMapper::Document)
18
+
19
+ if printable == :self
20
+ if object.is_a?(MongoMapper::Document) || object.is_a?(MongoMapper::EmbeddedDocument)
21
+ printable = :mongo_mapper_instance
22
+ end
23
+ elsif printable == :class && (object.ancestors & [MongoMapper::Document, MongoMapper::EmbeddedDocument]).size > 0
24
+ printable = :mongo_mapper_class
25
+ end
26
+ printable
27
+ end
28
+
29
+ # Format MongoMapper instance object.
30
+ #------------------------------------------------------------------------------
31
+ def awesome_mongo_mapper_instance(object)
32
+ return object.inspect if !defined?(ActiveSupport::OrderedHash)
33
+
34
+ data = object.keys.keys.sort_by{|k| k}.inject(ActiveSupport::OrderedHash.new) do |hash, name|
35
+ hash[name] = object[name]
36
+ hash
37
+ end
38
+ "#{object} " + awesome_hash(data)
39
+ end
40
+
41
+ # Format MongoMapper class object.
42
+ #------------------------------------------------------------------------------
43
+ def awesome_mongo_mapper_class(object)
44
+ return object.inspect if !defined?(ActiveSupport::OrderedHash) || !object.respond_to?(:keys)
45
+
46
+ data = object.keys.sort_by{|k| k}.inject(ActiveSupport::OrderedHash.new) do |hash, c|
47
+ hash[c.first] = (c.last.type || "undefined").to_s.underscore.intern
48
+ hash
49
+ end
50
+ "class #{object} < #{object.superclass} " << awesome_hash(data)
51
+ end
52
+ end
53
+
54
+ AwesomePrint.send(:include, AwesomePrintMongoMapper)
data/lib/awesome_print.rb CHANGED
@@ -7,18 +7,20 @@
7
7
  # This is the copy of original 'ap.rb' file that matches the gem name. It makes
8
8
  # it possible to omit the :require part in bundler's Gemfile:
9
9
  #
10
- # gem 'awesome_print', '>= 0.2.1', :require => 'ap'
11
- # gem 'awesome_print', '>= 3.0.0'
10
+ # gem 'awesome_print', '>= 0.4.0'
12
11
  #
13
- %w(array string method object class kernel).each do |file|
14
- require File.dirname(__FILE__) + "/ap/core_ext/#{file}"
15
- end
12
+ unless defined?(AwesomePrint)
13
+ %w(array string method object class kernel).each do |file|
14
+ require File.dirname(__FILE__) + "/ap/core_ext/#{file}"
15
+ end
16
16
 
17
- require File.dirname(__FILE__) + "/ap/awesome_print"
18
- require File.dirname(__FILE__) + "/ap/core_ext/logger" if defined?(Logger)
19
- require File.dirname(__FILE__) + "/ap/mixin/action_view" if defined?(ActionView)
17
+ require File.dirname(__FILE__) + "/ap/awesome_print"
18
+ require File.dirname(__FILE__) + "/ap/core_ext/logger" if defined?(Logger)
19
+ require File.dirname(__FILE__) + "/ap/mixin/action_view" if defined?(ActionView)
20
20
 
21
- # Load the following under normal circumstatnces as well as in Rails
22
- # console when required from ~/.irbrc.
23
- require File.dirname(__FILE__) + "/ap/mixin/active_record" if defined?(ActiveRecord) || (defined?(IRB) && ENV['RAILS_ENV'])
24
- require File.dirname(__FILE__) + "/ap/mixin/active_support" if defined?(ActiveSupport) || (defined?(IRB) && ENV['RAILS_ENV'])
21
+ # Load the following under normal circumstatnces as well as in Rails
22
+ # console when required from ~/.irbrc.
23
+ require File.dirname(__FILE__) + "/ap/mixin/active_record" if defined?(ActiveRecord) || (defined?(IRB) && ENV['RAILS_ENV'])
24
+ require File.dirname(__FILE__) + "/ap/mixin/active_support" if defined?(ActiveSupport) || (defined?(IRB) && ENV['RAILS_ENV'])
25
+ require File.dirname(__FILE__) + "/ap/mixin/mongo_mapper" if defined?(MongoMapper)
26
+ end
data/rails/init.rb CHANGED
@@ -6,8 +6,4 @@
6
6
  #
7
7
  # Load awesome_print when installed as Rails 2.3.x plugin.
8
8
  #
9
- # NOTE: After Rails 2.3.x console loads awesome_print/lib/ap.rb it attempts
10
- # to load this file as well. Make sure to check whether the awesome_print
11
- # is already loaded to avoid Ruby stack overflow when extending core classes.
12
- #
13
9
  require File.join(File.dirname(__FILE__), "..", "init") unless defined?(AwesomePrint)
@@ -1,35 +1,25 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- require 'action_view'
4
- require 'ap/mixin/action_view'
3
+ begin
4
+ require 'action_view'
5
+ require 'ap/mixin/action_view'
5
6
 
6
- describe "AwesomePrint ActionView extensions" do
7
- before(:each) do
8
- @view = ActionView::Base.new
9
- end
7
+ describe "AwesomePrint ActionView extension" do
8
+ before(:each) do
9
+ @view = ActionView::Base.new
10
+ end
10
11
 
11
- it "should wrap ap output with <pre> tag" do
12
- obj = 42
13
- @view.ap(obj, :plain => true).should == '<pre class="debug_dump">42</pre>'
14
- end
15
-
16
- it "should encode HTML entities" do
17
- obj = " &<hello>"
18
- @view.ap(obj, :plain => true).should == '<pre class="debug_dump">&quot; &amp;&lt;hello&gt;&quot;</pre>'
19
- end
20
-
21
- it "should convert primary ANSI colors to HTML" do
22
- obj = 42
23
- [ :gray, :red, :green, :yellow, :blue, :purple, :cyan, :white ].each do |color|
24
- @view.ap(obj, :color => { :fixnum => color }).should == %Q|<pre class="debug_dump"><font color="#{color}">42</font></pre>|
12
+ it "uses HTML and adds 'debug_dump' class to plain <pre> tag" do
13
+ markup = rand
14
+ @view.ap(markup, :plain => true).should == %Q|<pre class="debug_dump">#{markup}</pre>|
25
15
  end
26
- end
27
16
 
28
- it "should convert mixed ANSI colors to HTML" do
29
- obj = 42
30
- [ :grayish, :redish, :greenish, :yellowish, :blueish, :purpleish, :cyanish, :whiteish, :black, :pale ].zip(
31
- [ :black, :darkred, :darkgreen, :brown, :navy, :darkmagenta, :darkcyan, :slategray, :black, :slategray ]) do |ansi, html|
32
- @view.ap(obj, :color => { :fixnum => ansi }).should == %Q|<pre class="debug_dump"><font color="#{html}">42</font></pre>|
17
+ it "uses HTML and adds 'debug_dump' class to colorized <pre> tag" do
18
+ markup = ' &<hello>'
19
+ @view.ap(markup).should == '<pre class="debug_dump" style="color:brown">&quot; &amp;&lt;hello&gt;&quot;</pre>'
33
20
  end
34
21
  end
22
+
23
+ rescue LoadError
24
+ puts "Skipping ActionView specs..."
35
25
  end
@@ -1,56 +1,56 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- require 'active_record'
4
- require 'ap/mixin/active_record'
3
+ begin
4
+ require 'active_record'
5
+ require 'ap/mixin/active_record'
5
6
 
7
+ if defined?(::ActiveRecord)
6
8
 
7
- if defined?(::ActiveRecord)
8
-
9
- # Create tableless ActiveRecord model.
10
- #------------------------------------------------------------------------------
11
- class User < ActiveRecord::Base
12
- def self.columns()
13
- @columns ||= []
14
- end
9
+ # Create tableless ActiveRecord model.
10
+ #------------------------------------------------------------------------------
11
+ class User < ActiveRecord::Base
12
+ def self.columns()
13
+ @columns ||= []
14
+ end
15
15
 
16
- def self.column(name, sql_type = nil, default = nil, null = true)
17
- columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
18
- end
16
+ def self.column(name, sql_type = nil, default = nil, null = true)
17
+ columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
18
+ end
19
19
 
20
- column :id, :integer
21
- column :name, :string
22
- column :rank, :integer
23
- column :admin, :boolean
24
- column :created_at, :datetime
20
+ column :id, :integer
21
+ column :name, :string
22
+ column :rank, :integer
23
+ column :admin, :boolean
24
+ column :created_at, :datetime
25
25
 
26
- def self.table_exists?
27
- true
26
+ def self.table_exists?
27
+ true
28
+ end
28
29
  end
29
- end
30
30
 
31
- class SubUser < User
32
- def self.columns
33
- User.columns
31
+ class SubUser < User
32
+ def self.columns
33
+ User.columns
34
+ end
34
35
  end
35
- end
36
36
 
37
- describe "AwesomePrint/ActiveRecord" do
38
- before(:each) do
39
- stub_dotfile!
40
- end
41
-
42
- #------------------------------------------------------------------------------
43
- describe "ActiveRecord instance" do
37
+ describe "AwesomePrint/ActiveRecord" do
44
38
  before(:each) do
45
- ActiveRecord::Base.default_timezone = :utc
46
- @diana = User.new(:name => "Diana", :rank => 1, :admin => false, :created_at => "1992-10-10 12:30:00")
47
- @laura = User.new(:name => "Laura", :rank => 2, :admin => true, :created_at => "2003-05-26 14:15:00")
48
- @ap = AwesomePrint.new(:plain => true)
39
+ stub_dotfile!
49
40
  end
50
41
 
51
- it "display single record" do
52
- out = @ap.send(:awesome, @diana)
53
- str = <<-EOS.strip
42
+ #------------------------------------------------------------------------------
43
+ describe "ActiveRecord instance" do
44
+ before(:each) do
45
+ ActiveRecord::Base.default_timezone = :utc
46
+ @diana = User.new(:name => "Diana", :rank => 1, :admin => false, :created_at => "1992-10-10 12:30:00")
47
+ @laura = User.new(:name => "Laura", :rank => 2, :admin => true, :created_at => "2003-05-26 14:15:00")
48
+ @ap = AwesomePrint.new(:plain => true)
49
+ end
50
+
51
+ it "display single record" do
52
+ out = @ap.send(:awesome, @diana)
53
+ str = <<-EOS.strip
54
54
  #<User:0x01234567> {
55
55
  :id => nil,
56
56
  :name => "Diana",
@@ -59,18 +59,18 @@ if defined?(::ActiveRecord)
59
59
  :created_at => ?
60
60
  }
61
61
  EOS
62
- if RUBY_VERSION.to_f < 1.9
63
- str.sub!('?', 'Sat Oct 10 12:30:00 UTC 1992')
64
- else
65
- str.sub!('?', '1992-10-10 12:30:00 UTC')
66
- end
62
+ if RUBY_VERSION.to_f < 1.9
63
+ str.sub!('?', 'Sat Oct 10 12:30:00 UTC 1992')
64
+ else
65
+ str.sub!('?', '1992-10-10 12:30:00 UTC')
66
+ end
67
67
 
68
- out.gsub(/0x([a-f\d]+)/, "0x01234567").should == str
69
- end
68
+ out.gsub(/0x([a-f\d]+)/, "0x01234567").should == str
69
+ end
70
70
 
71
- it "display multiple records" do
72
- out = @ap.send(:awesome, [ @diana, @laura ])
73
- str = <<-EOS.strip
71
+ it "display multiple records" do
72
+ out = @ap.send(:awesome, [ @diana, @laura ])
73
+ str = <<-EOS.strip
74
74
  [
75
75
  [0] #<User:0x01234567> {
76
76
  :id => nil,
@@ -88,23 +88,23 @@ EOS
88
88
  }
89
89
  ]
90
90
  EOS
91
- if RUBY_VERSION.to_f < 1.9
92
- str.sub!('?', 'Sat Oct 10 12:30:00 UTC 1992')
93
- str.sub!('!', 'Mon May 26 14:15:00 UTC 2003')
94
- else
95
- str.sub!('?', '1992-10-10 12:30:00 UTC')
96
- str.sub!('!', '2003-05-26 14:15:00 UTC')
97
- end
91
+ if RUBY_VERSION.to_f < 1.9
92
+ str.sub!('?', 'Sat Oct 10 12:30:00 UTC 1992')
93
+ str.sub!('!', 'Mon May 26 14:15:00 UTC 2003')
94
+ else
95
+ str.sub!('?', '1992-10-10 12:30:00 UTC')
96
+ str.sub!('!', '2003-05-26 14:15:00 UTC')
97
+ end
98
98
 
99
- out.gsub(/0x([a-f\d]+)/, "0x01234567").should == str
99
+ out.gsub(/0x([a-f\d]+)/, "0x01234567").should == str
100
+ end
100
101
  end
101
- end
102
102
 
103
- #------------------------------------------------------------------------------
104
- describe "ActiveRecord class" do
105
- it "should print the class" do
106
- @ap = AwesomePrint.new(:plain => true)
107
- @ap.send(:awesome, User).should == <<-EOS.strip
103
+ #------------------------------------------------------------------------------
104
+ describe "ActiveRecord class" do
105
+ it "should print the class" do
106
+ @ap = AwesomePrint.new(:plain => true)
107
+ @ap.send(:awesome, User).should == <<-EOS.strip
108
108
  class User < ActiveRecord::Base {
109
109
  :id => :integer,
110
110
  :name => :string,
@@ -112,13 +112,12 @@ class User < ActiveRecord::Base {
112
112
  :admin => :boolean,
113
113
  :created_at => :datetime
114
114
  }
115
- EOS
116
-
117
- end
115
+ EOS
116
+ end
118
117
 
119
- it "should print the class for non-direct subclasses of AR::Base" do
120
- @ap = AwesomePrint.new(:plain => true)
121
- @ap.send(:awesome, SubUser).should == <<-EOS.strip
118
+ it "should print the class for non-direct subclasses of AR::Base" do
119
+ @ap = AwesomePrint.new(:plain => true)
120
+ @ap.send(:awesome, SubUser).should == <<-EOS.strip
122
121
  class SubUser < User {
123
122
  :id => :integer,
124
123
  :name => :string,
@@ -126,9 +125,12 @@ class SubUser < User {
126
125
  :admin => :boolean,
127
126
  :created_at => :datetime
128
127
  }
129
- EOS
130
-
128
+ EOS
129
+ end
131
130
  end
132
131
  end
133
132
  end
133
+
134
+ rescue LoadError
135
+ puts "Skipping ActiveRecord specs..."
134
136
  end
@@ -454,6 +454,47 @@ EOS
454
454
  end
455
455
  weird.new.ai(:plain => true).should == ''
456
456
  end
457
+
458
+ # See https://github.com/michaeldv/awesome_print/issues/35
459
+ it "handle array grep when pattern contains / chapacter" do
460
+ hash = { "1/x" => 1, "2//x" => :"2" }
461
+ grepped = hash.keys.grep(/^(\d+)\//) { $1 }
462
+ grepped.ai(:plain => true, :multiline => false).should == '[ "1", "2" ]'
463
+ end
464
+
465
+ it "returns value passed as a parameter" do
466
+ object = rand
467
+ self.stub!(:puts)
468
+ (ap object).should == object
469
+ end
470
+
471
+ # Require different file name this time (lib/ap.rb vs. lib/awesome_print).
472
+ it "several require 'awesome_print' should do no harm" do
473
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/ap')
474
+ lambda { rand.ai }.should_not raise_error
475
+ end
476
+ end
477
+
478
+ describe "HTML output" do
479
+ it "wraps ap output with plain <pre> tag" do
480
+ markup = rand
481
+ markup.ai(:html => true, :plain => true).should == "<pre>#{markup}</pre>"
482
+ end
483
+
484
+ it "wraps ap output with colorized <pre> tag" do
485
+ markup = rand
486
+ markup.ai(:html => true).should == %Q|<pre style="color:blue">#{markup}</pre>|
487
+ end
488
+
489
+ it "encodes HTML entities (plain)" do
490
+ markup = ' &<hello>'
491
+ markup.ai(:html => true, :plain => true).should == '<pre>&quot; &amp;&lt;hello&gt;&quot;</pre>'
492
+ end
493
+
494
+ it "encodes HTML entities (color)" do
495
+ markup = ' &<hello>'
496
+ markup.ai(:html => true).should == '<pre style="color:brown">&quot; &amp;&lt;hello&gt;&quot;</pre>'
497
+ end
457
498
  end
458
499
 
459
500
  #------------------------------------------------------------------------------
@@ -504,14 +545,15 @@ EOS
504
545
  it "inherited from File should be displayed as File" do
505
546
  class My < File; end
506
547
 
507
- my = File.new('/dev/null')
548
+ my = File.new('/dev/null') rescue File.new('nul')
508
549
  my.ai(:plain => true).should == "#{my.inspect}\n" << `ls -alF #{my.path}`.chop
509
550
  end
510
551
 
511
552
  it "inherited from Dir should be displayed as Dir" do
512
553
  class My < Dir; end
513
554
 
514
- my = My.new('/tmp')
555
+ require 'tmpdir'
556
+ my = My.new(Dir.tmpdir)
515
557
  my.ai(:plain => true).should == "#{my.inspect}\n" << `ls -alF #{my.path}`.chop
516
558
  end
517
559
 
@@ -523,5 +565,16 @@ EOS
523
565
  my = My.new
524
566
  my.methods.ai(:plain => true).should_not raise_error(ArgumentError)
525
567
  end
568
+
569
+ it "should handle a class defines its own #method method (ex. request.method)" do
570
+ class My
571
+ def method
572
+ 'POST'
573
+ end
574
+ end
575
+
576
+ my = My.new
577
+ my.methods.ai(:plain => true).should_not raise_error(ArgumentError)
578
+ end
526
579
  end
527
580
  end
@@ -0,0 +1,84 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "AwesomePrint" do
4
+ before(:each) do
5
+ stub_dotfile!
6
+ end
7
+
8
+ describe "colorization" do
9
+ PLAIN = '[ 1, :two, "three", [ nil, [ true, false ] ] ]'
10
+ COLORIZED = "[ \e[1;34m1\e[0m, \e[0;36m:two\e[0m, \e[0;33m\"three\"\e[0m, [ \e[1;31mnil\e[0m, [ \e[1;32mtrue\e[0m, \e[1;31mfalse\e[0m ] ] ]"
11
+
12
+ before(:each) do
13
+ AwesomePrint.force_colors!(false)
14
+ ENV['TERM'] = "xterm-colors"
15
+ ENV.delete('ANSICON')
16
+ @arr = [ 1, :two, "three", [ nil, [ true, false] ] ]
17
+ end
18
+
19
+ it "colorizes tty processes by default" do
20
+ stub_tty!(STDOUT, true)
21
+
22
+ @arr.ai(:multiline => false).should == COLORIZED
23
+ end
24
+
25
+ it "colorizes tty processes by default" do
26
+ stub_tty!(STDOUT, true)
27
+
28
+ @arr.ai(:multiline => false).should == COLORIZED
29
+ end
30
+
31
+
32
+ it "colorizes processes with ENV['ANSICON'] by default" do
33
+ stub_tty!(STDOUT, true)
34
+ ENV['ANSICON'] = "1"
35
+
36
+ @arr.ai(:multiline => false).should == COLORIZED
37
+ end
38
+
39
+ it "does not colorize tty processes running in dumb terminals by default" do
40
+ stub_tty!(STDOUT, true)
41
+ ENV['TERM'] = "dumb"
42
+
43
+ @arr.ai(:multiline => false).should == PLAIN
44
+ end
45
+
46
+ it "does not colorize subprocesses by default" do
47
+ stub_tty!(STDOUT, false)
48
+
49
+ @arr.ai(:multiline => false).should == PLAIN
50
+ end
51
+
52
+ describe "forced" do
53
+ before(:each) do
54
+ AwesomePrint.force_colors!
55
+ end
56
+
57
+ it "still colorizes tty processes" do
58
+ stub_tty!(STDOUT, true)
59
+
60
+ @arr.ai(:multiline => false).should == COLORIZED
61
+ end
62
+
63
+ it "colorizes dumb terminals" do
64
+ stub_tty!(STDOUT, true)
65
+ ENV["TERM"] = "dumb"
66
+
67
+ @arr.ai(:multiline => false).should == COLORIZED
68
+ end
69
+
70
+ it "colorizes subprocess" do
71
+ stub_tty!(STDOUT, true)
72
+ @arr.ai(:multiline => false).should == COLORIZED
73
+ end
74
+ end
75
+ end
76
+
77
+ def stub_tty!(stream, value)
78
+ eval(%{class << stream
79
+ def tty?
80
+ #{value}
81
+ end
82
+ end})
83
+ end
84
+ end
data/spec/logger_spec.rb CHANGED
@@ -6,7 +6,7 @@ require 'ap/core_ext/logger'
6
6
 
7
7
  describe "AwesomePrint logging extensions" do
8
8
  before(:all) do
9
- @logger = Logger.new('/dev/null')
9
+ @logger = Logger.new('/dev/null') rescue Logger.new('nul')
10
10
  end
11
11
 
12
12
  describe "ap method" do
data/spec/methods_spec.rb CHANGED
@@ -406,4 +406,23 @@ describe "Methods arrays" do
406
406
  out = Hello.methods.grep(/^m(\d)$/) { %w(none one)[$1.to_i] }.ai(:plain => true)
407
407
  out.should == "[\n [0] none() Hello\n [1] one() Hello\n]"
408
408
  end
409
+
410
+ # See https://github.com/michaeldv/awesome_print/issues/30 for details.
411
+ it "grepping methods and converting them to_sym should work as expected" do
412
+ class Hello
413
+ private
414
+ def him; end
415
+
416
+ def his
417
+ private_methods.grep(/^h..$/) { |n| n.to_sym }
418
+ end
419
+
420
+ def her
421
+ private_methods.grep(/^.e.$/) { |n| n.to_sym }
422
+ end
423
+ end
424
+
425
+ hello = Hello.new
426
+ (hello.send(:his) - hello.send(:her)).sort_by { |x| x.to_s }.should == [ :him, :his ]
427
+ end
409
428
  end
@@ -0,0 +1,63 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ begin
4
+ require "mongo_mapper"
5
+ require "ap/mixin/mongo_mapper"
6
+
7
+ describe "AwesomePrint/MongoMapper" do
8
+ before :all do
9
+ class MongoUser
10
+ include MongoMapper::Document
11
+
12
+ key :first_name, String
13
+ key :last_name, String
14
+ end
15
+ end
16
+
17
+ before :each do
18
+ @ap = AwesomePrint.new(:plain => true)
19
+ end
20
+
21
+ it "should print for a class instance" do
22
+ user = MongoUser.new(:first_name => "Al", :last_name => "Capone")
23
+ out = @ap.send(:awesome, user)
24
+ str = <<-EOS.strip
25
+ #<MongoUser:0x01234567> {
26
+ "_id" => BSON::ObjectId('4d9183739a546f6806000001'),
27
+ "first_name" => "Al",
28
+ "last_name" => "Capone"
29
+ }
30
+ EOS
31
+ out.gsub!(/'([\w]+){23}'/, "'4d9183739a546f6806000001'")
32
+ out.gsub!(/0x([a-f\d]+)/, "0x01234567")
33
+ out.should == str
34
+ end
35
+
36
+ it "should print for a class" do
37
+ @ap.send(:awesome, MongoUser).should == <<-EOS.strip
38
+ class MongoUser < Object {
39
+ "_id" => :object_id,
40
+ "first_name" => :string,
41
+ "last_name" => :string
42
+ }
43
+ EOS
44
+ end
45
+
46
+ it "should print for a class when type is undefined" do
47
+ class Chamelion
48
+ include MongoMapper::Document
49
+ key :last_attribute
50
+ end
51
+
52
+ @ap.send(:awesome, Chamelion).should == <<-EOS.strip
53
+ class Chamelion < Object {
54
+ "_id" => :object_id,
55
+ "last_attribute" => :undefined
56
+ }
57
+ EOS
58
+ end
59
+ end
60
+
61
+ rescue LoadError
62
+ puts "Skipping MongoMapper specs..."
63
+ end
data/spec/spec_helper.rb CHANGED
@@ -4,25 +4,48 @@
4
4
  # See LICENSE file or http://www.opensource.org/licenses/mit-license.php
5
5
  #------------------------------------------------------------------------------
6
6
  #
7
- # Running specs with Ruby 1.8.7 and RSpec 1.3+:
8
- # $ rake spec # Entire spec suite.
9
- # $ ruby -rubygems spec/logger_spec.rb # Individual spec file.
10
- #
11
- # Running specs with Ruby 1.9.2 and RSpec 2.0+:
12
- # $ rake spec # Entire spec suite.
13
- # $ rspec spec/logger_spec.rb # Individual spec file.
7
+ # Running specs from the command line:
8
+ # $ rake spec # Entire spec suite.
9
+ # $ rspec spec/logger_spec.rb # Individual spec file.
14
10
  #
15
11
  $LOAD_PATH.unshift(File.dirname(__FILE__))
16
12
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
17
- require 'ap'
18
-
19
- if RUBY_VERSION.to_f < 1.9
20
- require 'spec'
21
- require 'spec/autorun'
22
- require 'rubygems'
23
- end
13
+ require 'awesome_print'
24
14
 
25
15
  def stub_dotfile!
26
16
  dotfile = File.join(ENV["HOME"], ".aprc")
27
17
  File.should_receive(:readable?).at_least(:once).with(dotfile).and_return(false)
28
18
  end
19
+
20
+ # The following is needed for the Infinity Test. It runs tests as subprocesses,
21
+ # which sets STDOUT.tty? to false and would otherwise prematurely disallow colors.
22
+ AwesomePrint.force_colors!
23
+
24
+ # Ruby 1.8.6 only: define missing String methods that are needed for the specs to pass.
25
+ if RUBY_VERSION < '1.8.7'
26
+ class String
27
+ def shellescape # Taken from Ruby 1.9.2 standard library, see lib/shellwords.rb.
28
+ return "''" if self.empty?
29
+ str = self.dup
30
+ str.gsub!(/([^A-Za-z0-9_\-.,:\/@\n])/n, "\\\\\\1")
31
+ str.gsub!(/\n/, "'\n'")
32
+ str
33
+ end
34
+
35
+ def start_with?(*prefixes)
36
+ prefixes.each do |prefix|
37
+ prefix = prefix.to_s
38
+ return true if prefix == self[0, prefix.size]
39
+ end
40
+ false
41
+ end
42
+
43
+ def end_with?(*suffixes)
44
+ suffixes.each do |suffix|
45
+ suffix = suffix.to_s
46
+ return true if suffix == self[-suffix.size, suffix.size]
47
+ end
48
+ false
49
+ end
50
+ end
51
+ end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awesome_print
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 15
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 3
8
- - 2
9
- version: 0.3.2
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Michael Dvorkin
@@ -14,21 +15,23 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2011-02-02 00:00:00 -08:00
18
+ date: 2011-05-13 00:00:00 -07:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: rspec
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 27
27
30
  segments:
28
- - 1
29
- - 3
31
+ - 2
32
+ - 5
30
33
  - 0
31
- version: 1.3.0
34
+ version: 2.5.0
32
35
  type: :development
33
36
  version_requirements: *id001
34
37
  description: "Great Ruby dubugging companion: pretty print Ruby objects to visualize their structure. Supports Rails ActiveRecord objects via included mixin."
@@ -59,13 +62,16 @@ files:
59
62
  - lib/ap/mixin/action_view.rb
60
63
  - lib/ap/mixin/active_record.rb
61
64
  - lib/ap/mixin/active_support.rb
65
+ - lib/ap/mixin/mongo_mapper.rb
62
66
  - lib/awesome_print.rb
63
67
  - rails/init.rb
64
68
  - spec/action_view_spec.rb
65
69
  - spec/active_record_spec.rb
66
70
  - spec/awesome_print_spec.rb
71
+ - spec/colorization_spec.rb
67
72
  - spec/logger_spec.rb
68
73
  - spec/methods_spec.rb
74
+ - spec/mongo_mapper_spec.rb
69
75
  - spec/spec_helper.rb
70
76
  - spec/string_spec.rb
71
77
  has_rdoc: true
@@ -73,36 +79,34 @@ homepage: http://github.com/michaeldv/awesome_print
73
79
  licenses: []
74
80
 
75
81
  post_install_message:
76
- rdoc_options:
77
- - --charset=UTF-8
82
+ rdoc_options: []
83
+
78
84
  require_paths:
79
85
  - lib
80
86
  required_ruby_version: !ruby/object:Gem::Requirement
87
+ none: false
81
88
  requirements:
82
89
  - - ">="
83
90
  - !ruby/object:Gem::Version
91
+ hash: 3
84
92
  segments:
85
93
  - 0
86
94
  version: "0"
87
95
  required_rubygems_version: !ruby/object:Gem::Requirement
96
+ none: false
88
97
  requirements:
89
98
  - - ">="
90
99
  - !ruby/object:Gem::Version
100
+ hash: 3
91
101
  segments:
92
102
  - 0
93
103
  version: "0"
94
104
  requirements: []
95
105
 
96
106
  rubyforge_project: awesome_print
97
- rubygems_version: 1.3.6
107
+ rubygems_version: 1.3.7
98
108
  signing_key:
99
109
  specification_version: 3
100
110
  summary: Pretty print Ruby objects with proper indentation and colors.
101
- test_files:
102
- - spec/action_view_spec.rb
103
- - spec/active_record_spec.rb
104
- - spec/awesome_print_spec.rb
105
- - spec/logger_spec.rb
106
- - spec/methods_spec.rb
107
- - spec/spec_helper.rb
108
- - spec/string_spec.rb
111
+ test_files: []
112
+