awesome_print 1.2.0 → 1.6.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.
- checksums.yaml +7 -0
- data/.gitignore +9 -3
- data/CHANGELOG +13 -1
- data/Gemfile +39 -1
- data/Gemfile.lock +91 -0
- data/LICENSE +1 -1
- data/README.md +3 -0
- data/lib/ap.rb +0 -0
- data/lib/awesome_print.rb +6 -1
- data/lib/awesome_print/ext/active_record.rb +2 -1
- data/lib/awesome_print/ext/mongoid.rb +1 -1
- data/lib/awesome_print/ext/ostruct.rb +27 -0
- data/lib/awesome_print/formatter.rb +1 -1
- data/lib/awesome_print/inspector.rb +0 -0
- data/lib/awesome_print/version.rb +1 -1
- data/spec/active_record_helper.rb +42 -0
- data/spec/colors_spec.rb +8 -8
- data/spec/formats_spec.rb +70 -70
- data/spec/methods_spec.rb +61 -61
- data/spec/misc_spec.rb +53 -34
- data/spec/objects_spec.rb +6 -6
- data/spec/spec_helper.rb +1 -1
- metadata +22 -24
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: aabb3e481a4a95d63ef09c71a7536fe4af4ad8da
|
4
|
+
data.tar.gz: 3c8b4bba0f9e8ee7dd138f1f1ad9035b87405629
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1e2c1ddea1248d991a213d6cf36d9f88eedb8c8c0b5b293fa3bc5ef4870bd8a9b52b9b45deef4fa848008e2abb77dccf13d1af9eaa0f5ff669919e03a549b0e9
|
7
|
+
data.tar.gz: bea6f63b5c6f0ab9093a8273012f7069791e0486e06d04d2ae399903663664f53ffc50599f46bce190dbeb92cea0864ab2fb58d121ea3cf3c193c88ff2c1119c
|
data/.gitignore
CHANGED
@@ -13,12 +13,18 @@ tmtags
|
|
13
13
|
## VIM
|
14
14
|
*.swp
|
15
15
|
|
16
|
+
## RUBYMINE
|
17
|
+
.idea
|
18
|
+
|
16
19
|
## PROJECT::GENERAL
|
17
20
|
coverage
|
18
21
|
rdoc
|
19
22
|
pkg
|
20
|
-
|
23
|
+
.ruby-version
|
21
24
|
|
22
|
-
## PROJECT::
|
25
|
+
## PROJECT::RVM
|
23
26
|
.rvmrc
|
24
|
-
|
27
|
+
|
28
|
+
# PROJECT::RBENV
|
29
|
+
.ruby-gemset
|
30
|
+
.awesome-print/
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
1.6.0
|
2
|
+
semi-major release since it's been a while, and there are several
|
3
|
+
improvements.
|
4
|
+
- Improves support for new mongoid/moped (Velkitor, Francois Bernier et al)
|
5
|
+
- Converts specs to rspec 3+ (Adam Jonas, James Cox)
|
6
|
+
- Fixes incompatibility with IPAddr (James Cox, Michael Dvorkin)
|
7
|
+
- Fixes incompatibility with the money gem (Michael Dvorkin)
|
8
|
+
- Fixes AR::Relation presentation (Sergey Ponomarov)
|
9
|
+
- Lazy-loads ActionView (Akira Matsuda)
|
10
|
+
- Fixes inspection of abstract classes (Jonathan Priddle)
|
11
|
+
- Gets most specs passing, and fixes suite (Eoin Kelly)
|
12
|
+
|
1
13
|
1.2.0 <-- NOTE: This is the *last* release supporting Ruby < v1.9.3 and Rails < v3.
|
2
14
|
- Added Sequel ORM plugin (Jonathan Davies)
|
3
15
|
- Added Ripple plugin (Ruby modeling layer for Riak, Scott Hyndman)
|
@@ -93,4 +105,4 @@
|
|
93
105
|
|
94
106
|
0.1.0
|
95
107
|
- Initial Release.
|
96
|
-
|
108
|
+
|
data/Gemfile
CHANGED
@@ -1,3 +1,41 @@
|
|
1
|
-
source
|
1
|
+
source 'https://rubygems.org'
|
2
2
|
gemspec
|
3
3
|
|
4
|
+
group :development do
|
5
|
+
|
6
|
+
# ActionView extension
|
7
|
+
# ####################
|
8
|
+
gem 'actionview', '>= 4.2.0'
|
9
|
+
|
10
|
+
# ActiveSupport extension
|
11
|
+
# #######################
|
12
|
+
gem 'activesupport', '>= 4.2.0'
|
13
|
+
|
14
|
+
# ActiveRecord extension
|
15
|
+
# ######################
|
16
|
+
# * To simplify creating test models we use an in-memory SQLite DB
|
17
|
+
gem 'activerecord', '>= 4.2.0'
|
18
|
+
gem 'sqlite3'
|
19
|
+
|
20
|
+
# MongoMapper extension
|
21
|
+
# #####################
|
22
|
+
# * cannot be enabled at the same time as mongoid
|
23
|
+
# gem 'mongo_mapper', '~> 0.13.0'
|
24
|
+
# gem 'bson_ext'
|
25
|
+
|
26
|
+
# Nokogiri extension
|
27
|
+
# ##################
|
28
|
+
gem 'nokogiri', '>= 1.6.5'
|
29
|
+
|
30
|
+
# Ripple extension
|
31
|
+
# ################
|
32
|
+
#
|
33
|
+
# * Ripple is abandoned http://basho.com/tag/ripple-client-apis/
|
34
|
+
# * Ripple is not currently compatible with Rails 4
|
35
|
+
# gem 'ripple', '~> 0.9.5'
|
36
|
+
|
37
|
+
# Mongoid extension
|
38
|
+
# #################
|
39
|
+
# * cannot be enabled at the same time as mongo_mapper
|
40
|
+
gem 'mongoid', '>= 4.0.0'
|
41
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
awesome_print (1.2.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
actionview (4.2.0)
|
10
|
+
activesupport (= 4.2.0)
|
11
|
+
builder (~> 3.1)
|
12
|
+
erubis (~> 2.7.0)
|
13
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
14
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
15
|
+
activemodel (4.2.0)
|
16
|
+
activesupport (= 4.2.0)
|
17
|
+
builder (~> 3.1)
|
18
|
+
activerecord (4.2.0)
|
19
|
+
activemodel (= 4.2.0)
|
20
|
+
activesupport (= 4.2.0)
|
21
|
+
arel (~> 6.0)
|
22
|
+
activesupport (4.2.0)
|
23
|
+
i18n (~> 0.7)
|
24
|
+
json (~> 1.7, >= 1.7.7)
|
25
|
+
minitest (~> 5.1)
|
26
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
27
|
+
tzinfo (~> 1.1)
|
28
|
+
arel (6.0.0)
|
29
|
+
bson (2.3.0)
|
30
|
+
builder (3.2.2)
|
31
|
+
connection_pool (2.1.0)
|
32
|
+
diff-lcs (1.2.5)
|
33
|
+
erubis (2.7.0)
|
34
|
+
fakefs (0.5.3)
|
35
|
+
i18n (0.7.0)
|
36
|
+
json (1.8.1)
|
37
|
+
loofah (2.0.1)
|
38
|
+
nokogiri (>= 1.5.9)
|
39
|
+
mini_portile (0.6.1)
|
40
|
+
minitest (5.5.0)
|
41
|
+
mongoid (4.0.0)
|
42
|
+
activemodel (~> 4.0)
|
43
|
+
moped (~> 2.0.0)
|
44
|
+
origin (~> 2.1)
|
45
|
+
tzinfo (>= 0.3.37)
|
46
|
+
moped (2.0.2)
|
47
|
+
bson (~> 2.2)
|
48
|
+
connection_pool (~> 2.0)
|
49
|
+
optionable (~> 0.2.0)
|
50
|
+
nokogiri (1.6.5)
|
51
|
+
mini_portile (~> 0.6.0)
|
52
|
+
optionable (0.2.0)
|
53
|
+
origin (2.1.1)
|
54
|
+
rails-deprecated_sanitizer (1.0.3)
|
55
|
+
activesupport (>= 4.2.0.alpha)
|
56
|
+
rails-dom-testing (1.0.5)
|
57
|
+
activesupport (>= 4.2.0.beta, < 5.0)
|
58
|
+
nokogiri (~> 1.6.0)
|
59
|
+
rails-deprecated_sanitizer (>= 1.0.1)
|
60
|
+
rails-html-sanitizer (1.0.1)
|
61
|
+
loofah (~> 2.0)
|
62
|
+
rspec (3.0.0)
|
63
|
+
rspec-core (~> 3.0.0)
|
64
|
+
rspec-expectations (~> 3.0.0)
|
65
|
+
rspec-mocks (~> 3.0.0)
|
66
|
+
rspec-core (3.0.4)
|
67
|
+
rspec-support (~> 3.0.0)
|
68
|
+
rspec-expectations (3.0.4)
|
69
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
70
|
+
rspec-support (~> 3.0.0)
|
71
|
+
rspec-mocks (3.0.4)
|
72
|
+
rspec-support (~> 3.0.0)
|
73
|
+
rspec-support (3.0.4)
|
74
|
+
sqlite3 (1.3.10)
|
75
|
+
thread_safe (0.3.4)
|
76
|
+
tzinfo (1.2.2)
|
77
|
+
thread_safe (~> 0.1)
|
78
|
+
|
79
|
+
PLATFORMS
|
80
|
+
ruby
|
81
|
+
|
82
|
+
DEPENDENCIES
|
83
|
+
actionview (>= 4.2.0)
|
84
|
+
activerecord (>= 4.2.0)
|
85
|
+
activesupport (>= 4.2.0)
|
86
|
+
awesome_print!
|
87
|
+
fakefs (>= 0.2.1)
|
88
|
+
mongoid (>= 4.0.0)
|
89
|
+
nokogiri (>= 1.6.5)
|
90
|
+
rspec (>= 3.0.0)
|
91
|
+
sqlite3
|
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Copyright (c) 2010-2013 Michael Dvorkin
|
2
2
|
http://www.dvorkin.net
|
3
|
-
%w(mike dvorkin.net) * "@" ||
|
3
|
+
%w(mike dvorkin.net) * "@" || "twitter.com/mid"
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
6
6
|
a copy of this software and associated documentation files (the
|
data/README.md
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
## Awesome Print ##
|
2
|
+
|
3
|
+
[](https://gitter.im/michaeldv/awesome_print?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
4
|
+
|
2
5
|
Awesome Print is a Ruby library that pretty prints Ruby objects in full color
|
3
6
|
exposing their internal structure with proper indentation. Rails ActiveRecord
|
4
7
|
objects and usage within Rails templates are supported via included mixins.
|
data/lib/ap.rb
CHANGED
File without changes
|
data/lib/awesome_print.rb
CHANGED
@@ -25,11 +25,16 @@ unless defined?(AwesomePrint::Inspector)
|
|
25
25
|
#
|
26
26
|
# Load remaining extensions.
|
27
27
|
#
|
28
|
-
|
28
|
+
if defined?(ActiveSupport)
|
29
|
+
ActiveSupport.on_load(:action_view) do
|
30
|
+
require File.dirname(__FILE__) + "/awesome_print/ext/action_view"
|
31
|
+
end
|
32
|
+
end
|
29
33
|
require File.dirname(__FILE__) + "/awesome_print/ext/mongo_mapper" if defined?(MongoMapper)
|
30
34
|
require File.dirname(__FILE__) + "/awesome_print/ext/mongoid" if defined?(Mongoid)
|
31
35
|
require File.dirname(__FILE__) + "/awesome_print/ext/nokogiri" if defined?(Nokogiri)
|
32
36
|
require File.dirname(__FILE__) + "/awesome_print/ext/no_brainer" if defined?(NoBrainer)
|
33
37
|
require File.dirname(__FILE__) + "/awesome_print/ext/ripple" if defined?(Ripple)
|
34
38
|
require File.dirname(__FILE__) + "/awesome_print/ext/sequel" if defined?(Sequel)
|
39
|
+
require File.dirname(__FILE__) + "/awesome_print/ext/ostruct" if defined?(OpenStruct)
|
35
40
|
end
|
@@ -21,7 +21,7 @@ module AwesomePrint
|
|
21
21
|
cast = :active_record_instance
|
22
22
|
elsif object.is_a?(Class) && object.ancestors.include?(::ActiveRecord::Base)
|
23
23
|
cast = :active_record_class
|
24
|
-
elsif type == :activerecord_relation
|
24
|
+
elsif type == :activerecord_relation || object.class.ancestors.include?(::ActiveRecord::Relation)
|
25
25
|
cast = :array
|
26
26
|
end
|
27
27
|
cast
|
@@ -56,6 +56,7 @@ module AwesomePrint
|
|
56
56
|
#------------------------------------------------------------------------------
|
57
57
|
def awesome_active_record_class(object)
|
58
58
|
return object.inspect if !defined?(::ActiveSupport::OrderedHash) || !object.respond_to?(:columns) || object.to_s == "ActiveRecord::Base"
|
59
|
+
return awesome_class(object) if object.respond_to?(:abstract_class?) && object.abstract_class?
|
59
60
|
|
60
61
|
data = object.columns.inject(::ActiveSupport::OrderedHash.new) do |hash, c|
|
61
62
|
hash[c.name.to_sym] = c.type
|
@@ -20,7 +20,7 @@ module AwesomePrint
|
|
20
20
|
cast = :mongoid_class
|
21
21
|
elsif object.class.ancestors.include?(::Mongoid::Document)
|
22
22
|
cast = :mongoid_document
|
23
|
-
elsif (defined?(::BSON) && object.is_a?(::BSON::ObjectId)) || (defined?(::Moped) && object.is_a?(::Moped::BSON::ObjectId))
|
23
|
+
elsif (defined?(::BSON) && object.is_a?(::BSON::ObjectId)) || (defined?(::Moped::BSON) && object.is_a?(::Moped::BSON::ObjectId))
|
24
24
|
cast = :mongoid_bson_id
|
25
25
|
end
|
26
26
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Copyright (c) 2010-2013 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 AwesomePrint
|
7
|
+
module OpenStruct
|
8
|
+
def self.included(base)
|
9
|
+
base.send :alias_method, :cast_without_ostruct, :cast
|
10
|
+
base.send :alias_method, :cast, :cast_with_ostruct
|
11
|
+
end
|
12
|
+
|
13
|
+
def cast_with_ostruct(object, type)
|
14
|
+
cast = cast_without_ostruct(object, type)
|
15
|
+
if (defined?(::OpenStruct)) && (object.is_a?(::OpenStruct))
|
16
|
+
cast = :open_struct_instance
|
17
|
+
end
|
18
|
+
cast
|
19
|
+
end
|
20
|
+
|
21
|
+
def awesome_open_struct_instance(object)
|
22
|
+
"#{object.class} #{awesome_hash(object.marshal_dump)}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
AwesomePrint::Formatter.send(:include, AwesomePrint::OpenStruct)
|
@@ -63,7 +63,7 @@ module AwesomePrint
|
|
63
63
|
def awesome_self(object, type)
|
64
64
|
if @options[:raw] && object.instance_variables.any?
|
65
65
|
awesome_object(object)
|
66
|
-
elsif object
|
66
|
+
elsif object.respond_to?(:to_hash)
|
67
67
|
awesome_hash(object.to_hash)
|
68
68
|
else
|
69
69
|
colorize(object.inspect.to_s, type)
|
File without changes
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
# Required to use the column support
|
4
|
+
module Rails
|
5
|
+
def self.env
|
6
|
+
{}
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
# Establish connection to in-memory SQLite DB
|
11
|
+
ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
|
12
|
+
|
13
|
+
# Create the users table
|
14
|
+
ActiveRecord::Migration.verbose = false
|
15
|
+
ActiveRecord::Migration.create_table :users do |t|
|
16
|
+
t.string :name
|
17
|
+
t.integer :rank
|
18
|
+
t.boolean :admin
|
19
|
+
t.datetime :created_at
|
20
|
+
end
|
21
|
+
|
22
|
+
# Create models
|
23
|
+
class User < ActiveRecord::Base; end
|
24
|
+
class SubUser < User; end
|
25
|
+
|
26
|
+
|
27
|
+
# Helper methods
|
28
|
+
# ##############
|
29
|
+
|
30
|
+
def activerecord_version
|
31
|
+
# ActiveRecord 4+
|
32
|
+
return ActiveRecord.version.to_s if ActiveRecord.method_defined? :version
|
33
|
+
|
34
|
+
# everything else
|
35
|
+
ActiveRecord::VERSION::STRING
|
36
|
+
end
|
37
|
+
|
38
|
+
# we only work with ActiveRecord 2+
|
39
|
+
def is_usable_activerecord?
|
40
|
+
defined?(ActiveRecord::VERSION::MAJOR) && ActiveRecord::VERSION::MAJOR >= 2
|
41
|
+
end
|
42
|
+
|
data/spec/colors_spec.rb
CHANGED
@@ -30,14 +30,14 @@ describe "AwesomePrint" do
|
|
30
30
|
|
31
31
|
it "colorizes tty processes by default" do
|
32
32
|
stub_tty!
|
33
|
-
@arr.ai(:multiline => false).
|
33
|
+
expect(@arr.ai(:multiline => false)).to eq(COLORIZED)
|
34
34
|
end
|
35
35
|
|
36
36
|
it "colorizes processes with ENV['ANSICON'] by default" do
|
37
37
|
begin
|
38
38
|
stub_tty!
|
39
39
|
term, ENV['ANSICON'] = ENV['ANSICON'], "1"
|
40
|
-
@arr.ai(:multiline => false).
|
40
|
+
expect(@arr.ai(:multiline => false)).to eq(COLORIZED)
|
41
41
|
ensure
|
42
42
|
ENV['ANSICON'] = term
|
43
43
|
end
|
@@ -47,7 +47,7 @@ describe "AwesomePrint" do
|
|
47
47
|
begin
|
48
48
|
stub_tty!
|
49
49
|
term, ENV['TERM'] = ENV['TERM'], "dumb"
|
50
|
-
@arr.ai(:multiline => false).
|
50
|
+
expect(@arr.ai(:multiline => false)).to eq(PLAIN)
|
51
51
|
ensure
|
52
52
|
ENV['TERM'] = term
|
53
53
|
end
|
@@ -56,7 +56,7 @@ describe "AwesomePrint" do
|
|
56
56
|
it "does not colorize subprocesses by default" do
|
57
57
|
begin
|
58
58
|
stub_tty! false
|
59
|
-
@arr.ai(:multiline => false).
|
59
|
+
expect(@arr.ai(:multiline => false)).to eq(PLAIN)
|
60
60
|
ensure
|
61
61
|
stub_tty!
|
62
62
|
end
|
@@ -70,14 +70,14 @@ describe "AwesomePrint" do
|
|
70
70
|
|
71
71
|
it "still colorizes tty processes" do
|
72
72
|
stub_tty!
|
73
|
-
@arr.ai(:multiline => false).
|
73
|
+
expect(@arr.ai(:multiline => false)).to eq(COLORIZED)
|
74
74
|
end
|
75
75
|
|
76
76
|
it "colorizes processes with ENV['ANSICON'] set to 0" do
|
77
77
|
begin
|
78
78
|
stub_tty!
|
79
79
|
term, ENV['ANSICON'] = ENV['ANSICON'], "1"
|
80
|
-
@arr.ai(:multiline => false).
|
80
|
+
expect(@arr.ai(:multiline => false)).to eq(COLORIZED)
|
81
81
|
ensure
|
82
82
|
ENV['ANSICON'] = term
|
83
83
|
end
|
@@ -87,7 +87,7 @@ describe "AwesomePrint" do
|
|
87
87
|
begin
|
88
88
|
stub_tty!
|
89
89
|
term, ENV['TERM'] = ENV['TERM'], "dumb"
|
90
|
-
@arr.ai(:multiline => false).
|
90
|
+
expect(@arr.ai(:multiline => false)).to eq(COLORIZED)
|
91
91
|
ensure
|
92
92
|
ENV['TERM'] = term
|
93
93
|
end
|
@@ -96,7 +96,7 @@ describe "AwesomePrint" do
|
|
96
96
|
it "colorizes subprocess" do
|
97
97
|
begin
|
98
98
|
stub_tty! false
|
99
|
-
@arr.ai(:multiline => false).
|
99
|
+
expect(@arr.ai(:multiline => false)).to eq(COLORIZED)
|
100
100
|
ensure
|
101
101
|
stub_tty!
|
102
102
|
end
|
data/spec/formats_spec.rb
CHANGED
@@ -14,11 +14,11 @@ describe "AwesomePrint" do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it "empty array" do
|
17
|
-
[].ai.
|
17
|
+
expect([].ai).to eq("[]")
|
18
18
|
end
|
19
19
|
|
20
20
|
it "plain multiline" do
|
21
|
-
@arr.ai(:plain => true).
|
21
|
+
expect(@arr.ai(:plain => true)).to eq <<-EOS.strip
|
22
22
|
[
|
23
23
|
[0] 1,
|
24
24
|
[1] :two,
|
@@ -35,7 +35,7 @@ EOS
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it "plain multiline without index" do
|
38
|
-
@arr.ai(:plain => true, :index => false).
|
38
|
+
expect(@arr.ai(:plain => true, :index => false)).to eq <<-EOS.strip
|
39
39
|
[
|
40
40
|
1,
|
41
41
|
:two,
|
@@ -52,7 +52,7 @@ EOS
|
|
52
52
|
end
|
53
53
|
|
54
54
|
it "plain multiline indented" do
|
55
|
-
@arr.ai(:plain => true, :indent => 2).
|
55
|
+
expect(@arr.ai(:plain => true, :indent => 2)).to eq <<-EOS.strip
|
56
56
|
[
|
57
57
|
[0] 1,
|
58
58
|
[1] :two,
|
@@ -69,7 +69,7 @@ EOS
|
|
69
69
|
end
|
70
70
|
|
71
71
|
it "plain multiline indented without index" do
|
72
|
-
@arr.ai(:plain => true, :indent => 2, :index => false).
|
72
|
+
expect(@arr.ai(:plain => true, :indent => 2, :index => false)).to eq <<-EOS.strip
|
73
73
|
[
|
74
74
|
1,
|
75
75
|
:two,
|
@@ -86,11 +86,11 @@ EOS
|
|
86
86
|
end
|
87
87
|
|
88
88
|
it "plain single line" do
|
89
|
-
@arr.ai(:plain => true, :multiline => false).
|
89
|
+
expect(@arr.ai(:plain => true, :multiline => false)).to eq('[ 1, :two, "three", [ nil, [ true, false ] ] ]')
|
90
90
|
end
|
91
91
|
|
92
92
|
it "colored multiline (default)" do
|
93
|
-
@arr.ai.
|
93
|
+
expect(@arr.ai).to eq <<-EOS.strip
|
94
94
|
[
|
95
95
|
\e[1;37m[0] \e[0m\e[1;34m1\e[0m,
|
96
96
|
\e[1;37m[1] \e[0m\e[0;36m:two\e[0m,
|
@@ -107,7 +107,7 @@ EOS
|
|
107
107
|
end
|
108
108
|
|
109
109
|
it "colored multiline indented" do
|
110
|
-
@arr.ai(:indent => 8).
|
110
|
+
expect(@arr.ai(:indent => 8)).to eq <<-EOS.strip
|
111
111
|
[
|
112
112
|
\e[1;37m[0] \e[0m\e[1;34m1\e[0m,
|
113
113
|
\e[1;37m[1] \e[0m\e[0;36m:two\e[0m,
|
@@ -124,7 +124,7 @@ EOS
|
|
124
124
|
end
|
125
125
|
|
126
126
|
it "colored single line" do
|
127
|
-
@arr.ai(:multiline => false).
|
127
|
+
expect(@arr.ai(:multiline => false)).to eq("[ \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 ] ] ]")
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
@@ -136,7 +136,7 @@ EOS
|
|
136
136
|
end
|
137
137
|
|
138
138
|
it "plain multiline" do
|
139
|
-
@arr.ai(:plain => true).
|
139
|
+
expect(@arr.ai(:plain => true)).to eq <<-EOS.strip
|
140
140
|
[
|
141
141
|
[0] 1,
|
142
142
|
[1] 2,
|
@@ -146,7 +146,7 @@ EOS
|
|
146
146
|
end
|
147
147
|
|
148
148
|
it "plain multiline without index" do
|
149
|
-
@arr.ai(:plain => true, :index => false).
|
149
|
+
expect(@arr.ai(:plain => true, :index => false)).to eq <<-EOS.strip
|
150
150
|
[
|
151
151
|
1,
|
152
152
|
2,
|
@@ -156,7 +156,7 @@ EOS
|
|
156
156
|
end
|
157
157
|
|
158
158
|
it "plain single line" do
|
159
|
-
@arr.ai(:plain => true, :multiline => false).
|
159
|
+
expect(@arr.ai(:plain => true, :multiline => false)).to eq("[ 1, 2, [...] ]")
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
@@ -167,7 +167,7 @@ EOS
|
|
167
167
|
end
|
168
168
|
|
169
169
|
it "plain limited output large" do
|
170
|
-
@arr.ai(:plain => true, :limit => true).
|
170
|
+
expect(@arr.ai(:plain => true, :limit => true)).to eq <<-EOS.strip
|
171
171
|
[
|
172
172
|
[ 0] 1,
|
173
173
|
[ 1] 2,
|
@@ -182,7 +182,7 @@ EOS
|
|
182
182
|
|
183
183
|
it "plain limited output small" do
|
184
184
|
@arr = @arr[0..3]
|
185
|
-
@arr.ai(:plain => true, :limit => true).
|
185
|
+
expect(@arr.ai(:plain => true, :limit => true)).to eq <<-EOS.strip
|
186
186
|
[
|
187
187
|
[0] 1,
|
188
188
|
[1] 2,
|
@@ -193,7 +193,7 @@ EOS
|
|
193
193
|
end
|
194
194
|
|
195
195
|
it "plain limited output with 10 lines" do
|
196
|
-
@arr.ai(:plain => true, :limit => 10).
|
196
|
+
expect(@arr.ai(:plain => true, :limit => 10)).to eq <<-EOS.strip
|
197
197
|
[
|
198
198
|
[ 0] 1,
|
199
199
|
[ 1] 2,
|
@@ -210,7 +210,7 @@ EOS
|
|
210
210
|
end
|
211
211
|
|
212
212
|
it "plain limited output with 11 lines" do
|
213
|
-
@arr.ai(:plain => true, :limit => 11).
|
213
|
+
expect(@arr.ai(:plain => true, :limit => 11)).to eq <<-EOS.strip
|
214
214
|
[
|
215
215
|
[ 0] 1,
|
216
216
|
[ 1] 2,
|
@@ -235,7 +235,7 @@ EOS
|
|
235
235
|
end
|
236
236
|
|
237
237
|
it "plain limited output" do
|
238
|
-
@hash.ai(:sort_keys => true, :plain => true, :limit => true).
|
238
|
+
expect(@hash.ai(:sort_keys => true, :plain => true, :limit => true)).to eq <<-EOS.strip
|
239
239
|
{
|
240
240
|
"a" => :a,
|
241
241
|
"b" => :b,
|
@@ -254,13 +254,13 @@ EOS
|
|
254
254
|
before do
|
255
255
|
@hash = { 1 => { :sym => { "str" => { [1, 2, 3] => { { :k => :v } => Hash } } } } }
|
256
256
|
end
|
257
|
-
|
257
|
+
|
258
258
|
it "empty hash" do
|
259
|
-
{}.ai.
|
259
|
+
expect({}.ai).to eq("{}")
|
260
260
|
end
|
261
|
-
|
261
|
+
|
262
262
|
it "plain multiline" do
|
263
|
-
@hash.ai(:plain => true).
|
263
|
+
expect(@hash.ai(:plain => true)).to eq <<-EOS.strip
|
264
264
|
{
|
265
265
|
1 => {
|
266
266
|
:sym => {
|
@@ -276,7 +276,7 @@ EOS
|
|
276
276
|
end
|
277
277
|
|
278
278
|
it "plain multiline indented" do
|
279
|
-
@hash.ai(:plain => true, :indent => 1).
|
279
|
+
expect(@hash.ai(:plain => true, :indent => 1)).to eq <<-EOS.strip
|
280
280
|
{
|
281
281
|
1 => {
|
282
282
|
:sym => {
|
@@ -292,11 +292,11 @@ EOS
|
|
292
292
|
end
|
293
293
|
|
294
294
|
it "plain single line" do
|
295
|
-
@hash.ai(:plain => true, :multiline => false).
|
295
|
+
expect(@hash.ai(:plain => true, :multiline => false)).to eq('{ 1 => { :sym => { "str" => { [ 1, 2, 3 ] => { { :k => :v } => Hash < Object } } } } }')
|
296
296
|
end
|
297
297
|
|
298
298
|
it "colored multiline (default)" do
|
299
|
-
@hash.ai.
|
299
|
+
expect(@hash.ai).to eq <<-EOS.strip
|
300
300
|
{
|
301
301
|
1\e[0;37m => \e[0m{
|
302
302
|
:sym\e[0;37m => \e[0m{
|
@@ -312,7 +312,7 @@ EOS
|
|
312
312
|
end
|
313
313
|
|
314
314
|
it "colored multiline indented" do
|
315
|
-
@hash.ai(:indent => 2).
|
315
|
+
expect(@hash.ai(:indent => 2)).to eq <<-EOS.strip
|
316
316
|
{
|
317
317
|
1\e[0;37m => \e[0m{
|
318
318
|
:sym\e[0;37m => \e[0m{
|
@@ -328,7 +328,7 @@ EOS
|
|
328
328
|
end
|
329
329
|
|
330
330
|
it "colored single line" do
|
331
|
-
@hash.ai(:multiline => false).
|
331
|
+
expect(@hash.ai(:multiline => false)).to eq("{ 1\e[0;37m => \e[0m{ :sym\e[0;37m => \e[0m{ \"str\"\e[0;37m => \e[0m{ [ 1, 2, 3 ]\e[0;37m => \e[0m{ { :k => :v }\e[0;37m => \e[0m\e[1;33mHash < Object\e[0m } } } } }")
|
332
332
|
end
|
333
333
|
|
334
334
|
end
|
@@ -341,7 +341,7 @@ EOS
|
|
341
341
|
end
|
342
342
|
|
343
343
|
it "plain multiline" do
|
344
|
-
@hash.ai(:plain => true).
|
344
|
+
expect(@hash.ai(:plain => true)).to eq <<-EOS.strip
|
345
345
|
{
|
346
346
|
:a => {...}
|
347
347
|
}
|
@@ -349,7 +349,7 @@ EOS
|
|
349
349
|
end
|
350
350
|
|
351
351
|
it "plain single line" do
|
352
|
-
@hash.ai(:plain => true, :multiline => false).
|
352
|
+
expect(@hash.ai(:plain => true, :multiline => false)).to eq('{ :a => {...} }')
|
353
353
|
end
|
354
354
|
end
|
355
355
|
|
@@ -362,13 +362,13 @@ EOS
|
|
362
362
|
it "plain multiline" do
|
363
363
|
out = @hash.ai(:plain => true)
|
364
364
|
if RUBY_VERSION.to_f < 1.9 # Order of @hash keys is not guaranteed.
|
365
|
-
out.
|
366
|
-
out.
|
367
|
-
out.
|
368
|
-
out.
|
369
|
-
out.
|
365
|
+
expect(out).to match(/^\{[^\}]+\}/m)
|
366
|
+
expect(out).to match(/ "b" => "b",?/)
|
367
|
+
expect(out).to match(/ :a => "a",?/)
|
368
|
+
expect(out).to match(/ :z => "z",?/)
|
369
|
+
expect(out).to match(/ "alpha" => "alpha",?$/)
|
370
370
|
else
|
371
|
-
out.
|
371
|
+
expect(out).to eq <<-EOS.strip
|
372
372
|
{
|
373
373
|
"b" => "b",
|
374
374
|
:a => "a",
|
@@ -378,9 +378,9 @@ EOS
|
|
378
378
|
EOS
|
379
379
|
end
|
380
380
|
end
|
381
|
-
|
381
|
+
|
382
382
|
it "plain multiline with sorted keys" do
|
383
|
-
@hash.ai(:plain => true, :sort_keys => true).
|
383
|
+
expect(@hash.ai(:plain => true, :sort_keys => true)).to eq <<-EOS.strip
|
384
384
|
{
|
385
385
|
:a => "a",
|
386
386
|
"alpha" => "alpha",
|
@@ -401,7 +401,7 @@ EOS
|
|
401
401
|
it "hash keys must be left aligned" do
|
402
402
|
hash = { [0, 0, 255] => :yellow, :red => "rgb(255, 0, 0)", "magenta" => "rgb(255, 0, 255)" }
|
403
403
|
out = hash.ai(:plain => true, :indent => -4, :sort_keys => true)
|
404
|
-
out.
|
404
|
+
expect(out).to eq <<-EOS.strip
|
405
405
|
{
|
406
406
|
[ 0, 0, 255 ] => :yellow,
|
407
407
|
"magenta" => "rgb(255, 0, 255)",
|
@@ -413,7 +413,7 @@ EOS
|
|
413
413
|
it "nested hash keys should be indented (array of hashes)" do
|
414
414
|
arr = [ { :a => 1, :bb => 22, :ccc => 333}, { 1 => :a, 22 => :bb, 333 => :ccc} ]
|
415
415
|
out = arr.ai(:plain => true, :indent => -4, :sort_keys => true)
|
416
|
-
out.
|
416
|
+
expect(out).to eq <<-EOS.strip
|
417
417
|
[
|
418
418
|
[0] {
|
419
419
|
:a => 1,
|
@@ -432,7 +432,7 @@ EOS
|
|
432
432
|
it "nested hash keys should be indented (hash of hashes)" do
|
433
433
|
arr = { :first => { :a => 1, :bb => 22, :ccc => 333}, :second => { 1 => :a, 22 => :bb, 333 => :ccc} }
|
434
434
|
out = arr.ai(:plain => true, :indent => -4, :sort_keys => true)
|
435
|
-
out.
|
435
|
+
expect(out).to eq <<-EOS.strip
|
436
436
|
{
|
437
437
|
:first => {
|
438
438
|
:a => 1,
|
@@ -452,11 +452,11 @@ EOS
|
|
452
452
|
#------------------------------------------------------------------------------
|
453
453
|
describe "Class" do
|
454
454
|
it "shoud show superclass (plain)" do
|
455
|
-
self.class.ai(:plain => true).
|
455
|
+
expect(self.class.ai(:plain => true)).to eq("#{self.class} < #{self.class.superclass}")
|
456
456
|
end
|
457
457
|
|
458
458
|
it "shoud show superclass (color)" do
|
459
|
-
self.class.ai.
|
459
|
+
expect(self.class.ai).to eq("#{self.class} < #{self.class.superclass}".yellow)
|
460
460
|
end
|
461
461
|
end
|
462
462
|
|
@@ -464,7 +464,7 @@ EOS
|
|
464
464
|
describe "File" do
|
465
465
|
it "should display a file (plain)" do
|
466
466
|
File.open(__FILE__, "r") do |f|
|
467
|
-
f.ai(:plain => true).
|
467
|
+
expect(f.ai(:plain => true)).to eq("#{f.inspect}\n" << `ls -alF #{f.path}`.chop)
|
468
468
|
end
|
469
469
|
end
|
470
470
|
end
|
@@ -473,7 +473,7 @@ EOS
|
|
473
473
|
describe "Dir" do
|
474
474
|
it "should display a direcory (plain)" do
|
475
475
|
Dir.open(File.dirname(__FILE__)) do |d|
|
476
|
-
d.ai(:plain => true).
|
476
|
+
expect(d.ai(:plain => true)).to eq("#{d.inspect}\n" << `ls -alF #{d.path}`.chop)
|
477
477
|
end
|
478
478
|
end
|
479
479
|
end
|
@@ -482,7 +482,7 @@ EOS
|
|
482
482
|
describe "BigDecimal and Rational" do
|
483
483
|
it "should present BigDecimal object with arbitrary precision" do
|
484
484
|
big = BigDecimal("201020102010201020102010201020102010.4")
|
485
|
-
big.ai(:plain => true).
|
485
|
+
expect(big.ai(:plain => true)).to eq("201020102010201020102010201020102010.4")
|
486
486
|
end
|
487
487
|
|
488
488
|
it "should present Rational object with arbitrary precision" do
|
@@ -494,9 +494,9 @@ EOS
|
|
494
494
|
# http://www.ruby-forum.com/topic/189397
|
495
495
|
#
|
496
496
|
if RUBY_VERSION < "1.9"
|
497
|
-
out.
|
497
|
+
expect(out).to eq("100510051005100510051005100510051005")
|
498
498
|
else
|
499
|
-
out.
|
499
|
+
expect(out).to eq("100510051005100510051005100510051005/1")
|
500
500
|
end
|
501
501
|
end
|
502
502
|
end
|
@@ -507,8 +507,8 @@ EOS
|
|
507
507
|
ap = AwesomePrint::Inspector.new
|
508
508
|
ap.send(:merge_options!, { :color => { :array => :black }, :indent => 0 })
|
509
509
|
options = ap.instance_variable_get("@options")
|
510
|
-
options[:color][:array].
|
511
|
-
options[:indent].
|
510
|
+
expect(options[:color][:array]).to eq(:black)
|
511
|
+
expect(options[:indent]).to eq(0)
|
512
512
|
end
|
513
513
|
end
|
514
514
|
|
@@ -520,40 +520,40 @@ EOS
|
|
520
520
|
end
|
521
521
|
|
522
522
|
it "empty set" do
|
523
|
-
Set.new.ai.
|
523
|
+
expect(Set.new.ai).to eq([].ai)
|
524
524
|
end
|
525
525
|
|
526
526
|
if RUBY_VERSION > "1.9"
|
527
527
|
it "plain multiline" do
|
528
|
-
@set.ai(:plain => true).
|
528
|
+
expect(@set.ai(:plain => true)).to eq(@arr.ai(:plain => true))
|
529
529
|
end
|
530
530
|
|
531
531
|
it "plain multiline indented" do
|
532
|
-
@set.ai(:plain => true, :indent => 1).
|
532
|
+
expect(@set.ai(:plain => true, :indent => 1)).to eq(@arr.ai(:plain => true, :indent => 1))
|
533
533
|
end
|
534
534
|
|
535
535
|
it "plain single line" do
|
536
|
-
@set.ai(:plain => true, :multiline => false).
|
536
|
+
expect(@set.ai(:plain => true, :multiline => false)).to eq(@arr.ai(:plain => true, :multiline => false))
|
537
537
|
end
|
538
538
|
|
539
539
|
it "colored multiline (default)" do
|
540
|
-
@set.ai.
|
540
|
+
expect(@set.ai).to eq(@arr.ai)
|
541
541
|
end
|
542
542
|
else # Prior to Ruby 1.9 the order of set values is unpredicatble.
|
543
543
|
it "plain multiline" do
|
544
|
-
@set.sort_by{ |x| x.to_s }.ai(:plain => true).
|
544
|
+
expect(@set.sort_by{ |x| x.to_s }.ai(:plain => true)).to eq(@arr.sort_by{ |x| x.to_s }.ai(:plain => true))
|
545
545
|
end
|
546
546
|
|
547
547
|
it "plain multiline indented" do
|
548
|
-
@set.sort_by{ |x| x.to_s }.ai(:plain => true, :indent => 1).
|
548
|
+
expect(@set.sort_by{ |x| x.to_s }.ai(:plain => true, :indent => 1)).to eq(@arr.sort_by{ |x| x.to_s }.ai(:plain => true, :indent => 1))
|
549
549
|
end
|
550
550
|
|
551
551
|
it "plain single line" do
|
552
|
-
@set.sort_by{ |x| x.to_s }.ai(:plain => true, :multiline => false).
|
552
|
+
expect(@set.sort_by{ |x| x.to_s }.ai(:plain => true, :multiline => false)).to eq(@arr.sort_by{ |x| x.to_s }.ai(:plain => true, :multiline => false))
|
553
553
|
end
|
554
554
|
|
555
555
|
it "colored multiline (default)" do
|
556
|
-
@set.sort_by{ |x| x.to_s }.ai.
|
556
|
+
expect(@set.sort_by{ |x| x.to_s }.ai).to eq(@arr.sort_by{ |x| x.to_s }.ai)
|
557
557
|
end
|
558
558
|
end
|
559
559
|
end
|
@@ -569,11 +569,11 @@ EOS
|
|
569
569
|
@struct.name = "Herman Munster"
|
570
570
|
@struct.address = "1313 Mockingbird Lane"
|
571
571
|
end
|
572
|
-
|
572
|
+
|
573
573
|
it "empty struct" do
|
574
|
-
Struct.new("EmptyStruct").ai.
|
574
|
+
expect(Struct.new("EmptyStruct").ai).to eq("\e[1;33mStruct::EmptyStruct < Struct\e[0m")
|
575
575
|
end
|
576
|
-
|
576
|
+
|
577
577
|
it "plain multiline" do
|
578
578
|
s1 = <<-EOS.strip
|
579
579
|
{
|
@@ -587,7 +587,7 @@ EOS
|
|
587
587
|
:address => "1313 Mockingbird Lane"
|
588
588
|
}
|
589
589
|
EOS
|
590
|
-
@struct.ai(:plain => true).
|
590
|
+
expect(@struct.ai(:plain => true)).to satisfy { |match| match == s1 || match == s2 }
|
591
591
|
end
|
592
592
|
|
593
593
|
it "plain multiline indented" do
|
@@ -603,13 +603,13 @@ EOS
|
|
603
603
|
:address => "1313 Mockingbird Lane"
|
604
604
|
}
|
605
605
|
EOS
|
606
|
-
@struct.ai(:plain => true, :indent => 1).
|
606
|
+
expect(@struct.ai(:plain => true, :indent => 1)).to satisfy { |match| match == s1 || match == s2 }
|
607
607
|
end
|
608
608
|
|
609
609
|
it "plain single line" do
|
610
610
|
s1 = "{ :address => \"1313 Mockingbird Lane\", :name => \"Herman Munster\" }"
|
611
611
|
s2 = "{ :name => \"Herman Munster\", :address => \"1313 Mockingbird Lane\" }"
|
612
|
-
@struct.ai(:plain => true, :multiline => false).
|
612
|
+
expect(@struct.ai(:plain => true, :multiline => false)).to satisfy { |match| match == s1 || match == s2 }
|
613
613
|
end
|
614
614
|
|
615
615
|
it "colored multiline (default)" do
|
@@ -625,7 +625,7 @@ EOS
|
|
625
625
|
:address\e[0;37m => \e[0m\e[0;33m\"1313 Mockingbird Lane\"\e[0m
|
626
626
|
}
|
627
627
|
EOS
|
628
|
-
@struct.ai.
|
628
|
+
expect(@struct.ai).to satisfy { |match| match == s1 || match == s2 }
|
629
629
|
end
|
630
630
|
end
|
631
631
|
|
@@ -639,7 +639,7 @@ EOS
|
|
639
639
|
class My < Array; end
|
640
640
|
|
641
641
|
my = My.new([ 1, :two, "three", [ nil, [ true, false ] ] ])
|
642
|
-
my.ai(:plain => true).
|
642
|
+
expect(my.ai(:plain => true)).to eq <<-EOS.strip
|
643
643
|
[
|
644
644
|
[0] 1,
|
645
645
|
[1] :two,
|
@@ -659,7 +659,7 @@ EOS
|
|
659
659
|
class My < Hash; end
|
660
660
|
|
661
661
|
my = My[ { 1 => { :sym => { "str" => { [1, 2, 3] => { { :k => :v } => Hash } } } } } ]
|
662
|
-
my.ai(:plain => true).
|
662
|
+
expect(my.ai(:plain => true)).to eq <<-EOS.strip
|
663
663
|
{
|
664
664
|
1 => {
|
665
665
|
:sym => {
|
@@ -678,7 +678,7 @@ EOS
|
|
678
678
|
class My < File; end
|
679
679
|
|
680
680
|
my = File.new('/dev/null') rescue File.new('nul')
|
681
|
-
my.ai(:plain => true).
|
681
|
+
expect(my.ai(:plain => true)).to eq("#{my.inspect}\n" << `ls -alF #{my.path}`.chop)
|
682
682
|
end
|
683
683
|
|
684
684
|
it "inherited from Dir should be displayed as Dir" do
|
@@ -686,7 +686,7 @@ EOS
|
|
686
686
|
|
687
687
|
require 'tmpdir'
|
688
688
|
my = My.new(Dir.tmpdir)
|
689
|
-
my.ai(:plain => true).
|
689
|
+
expect(my.ai(:plain => true)).to eq("#{my.inspect}\n" << `ls -alF #{my.path}`.chop)
|
690
690
|
end
|
691
691
|
|
692
692
|
it "should handle a class that defines its own #send method" do
|
@@ -695,7 +695,7 @@ EOS
|
|
695
695
|
end
|
696
696
|
|
697
697
|
my = My.new
|
698
|
-
my.methods.ai(:plain => true).
|
698
|
+
expect { my.methods.ai(:plain => true) }.not_to raise_error
|
699
699
|
end
|
700
700
|
|
701
701
|
it "should handle a class defines its own #method method (ex. request.method)" do
|
@@ -706,7 +706,7 @@ EOS
|
|
706
706
|
end
|
707
707
|
|
708
708
|
my = My.new
|
709
|
-
my.methods.ai(:plain => true).
|
709
|
+
expect { my.methods.ai(:plain => true) }.not_to raise_error
|
710
710
|
end
|
711
711
|
end
|
712
712
|
end
|