awesome_print 1.8.0 → 2.0.0.pre

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.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Appraisals +16 -48
  4. data/CHANGELOG.md +10 -1
  5. data/LICENSE +16 -19
  6. data/README.md +3 -10
  7. data/lib/ap.rb +1 -5
  8. data/lib/awesome_print.rb +7 -29
  9. data/lib/awesome_print/colorize.rb +2 -0
  10. data/lib/awesome_print/core_ext/active_support.rb +7 -0
  11. data/lib/awesome_print/core_ext/awesome_method_array.rb +0 -6
  12. data/lib/awesome_print/core_ext/class.rb +0 -5
  13. data/lib/awesome_print/core_ext/kernel.rb +0 -5
  14. data/lib/awesome_print/core_ext/logger.rb +0 -5
  15. data/lib/awesome_print/core_ext/object.rb +0 -5
  16. data/lib/awesome_print/core_ext/string.rb +0 -5
  17. data/lib/awesome_print/formatter.rb +38 -98
  18. data/lib/awesome_print/formatters/array_formatter.rb +10 -7
  19. data/lib/awesome_print/formatters/base_formatter.rb +17 -50
  20. data/lib/awesome_print/formatters/bigdecimal_formatter.rb +20 -0
  21. data/lib/awesome_print/formatters/class_formatter.rb +5 -6
  22. data/lib/awesome_print/formatters/dir_formatter.rb +4 -6
  23. data/lib/awesome_print/formatters/ext/active_model_error_formatter.rb +44 -0
  24. data/lib/awesome_print/formatters/ext/active_record_attributeset_formatter.rb +27 -0
  25. data/lib/awesome_print/formatters/ext/active_record_class_formatter.rb +43 -0
  26. data/lib/awesome_print/formatters/ext/active_record_instance_formatter.rb +48 -0
  27. data/lib/awesome_print/formatters/ext/active_record_relation_formatter.rb +19 -0
  28. data/lib/awesome_print/formatters/ext/bson_objectid_formatter.rb +20 -0
  29. data/lib/awesome_print/formatters/ext/hash_with_indifferent_access_formatter.rb +20 -0
  30. data/lib/awesome_print/formatters/ext/mongoid_document_formatter.rb +59 -0
  31. data/lib/awesome_print/formatters/ext/nokogiri_document_formatter.rb +30 -0
  32. data/lib/awesome_print/formatters/ext/nokogiri_node_formatter.rb +29 -0
  33. data/lib/awesome_print/formatters/ext/nokogiri_nodeset_formatter.rb +32 -0
  34. data/lib/awesome_print/formatters/ext/sequel_dataset_formatter.rb +20 -0
  35. data/lib/awesome_print/formatters/ext/sequel_model_class_formatter.rb +25 -0
  36. data/lib/awesome_print/formatters/ext/sequel_model_formatter.rb +26 -0
  37. data/lib/awesome_print/formatters/ext/time_with_zone_formatter.rb +24 -0
  38. data/lib/awesome_print/formatters/fallback_formatter.rb +55 -0
  39. data/lib/awesome_print/formatters/false_class_formatter.rb +15 -0
  40. data/lib/awesome_print/formatters/file_formatter.rb +4 -6
  41. data/lib/awesome_print/formatters/hash_formatter.rb +12 -7
  42. data/lib/awesome_print/formatters/integer_formatter.rb +11 -0
  43. data/lib/awesome_print/formatters/method_formatter.rb +8 -6
  44. data/lib/awesome_print/formatters/module_formatter.rb +18 -0
  45. data/lib/awesome_print/formatters/nil_class_formatter.rb +19 -0
  46. data/lib/awesome_print/formatters/object_formatter.rb +20 -7
  47. data/lib/awesome_print/formatters/open_struct.rb +19 -0
  48. data/lib/awesome_print/formatters/range_formatter.rb +11 -0
  49. data/lib/awesome_print/formatters/rational_formatter.rb +15 -0
  50. data/lib/awesome_print/formatters/set_formatter.rb +19 -0
  51. data/lib/awesome_print/formatters/simple_formatter.rb +10 -8
  52. data/lib/awesome_print/formatters/string_formatter.rb +14 -0
  53. data/lib/awesome_print/formatters/struct_formatter.rb +8 -6
  54. data/lib/awesome_print/formatters/symbol_formatter.rb +18 -0
  55. data/lib/awesome_print/formatters/true_class_formatter.rb +15 -0
  56. data/lib/awesome_print/formatters/unbound_method_formatter.rb +15 -0
  57. data/lib/awesome_print/inspector.rb +20 -16
  58. data/lib/awesome_print/limiter.rb +63 -0
  59. data/lib/awesome_print/registrar.rb +20 -0
  60. data/lib/awesome_print/version.rb +6 -6
  61. data/spec/formatters/array_spec.rb +251 -0
  62. data/spec/formatters/big_decimal_spec.rb +28 -0
  63. data/spec/formatters/class_spec.rb +91 -0
  64. data/spec/formatters/dir_file_spec.rb +43 -0
  65. data/spec/{ext → formatters/ext}/active_record_spec.rb +27 -63
  66. data/spec/{ext → formatters/ext}/active_support_spec.rb +6 -6
  67. data/spec/{ext → formatters/ext}/mongoid_spec.rb +4 -41
  68. data/spec/{ext → formatters/ext}/nokogiri_spec.rb +0 -0
  69. data/spec/formatters/hash_spec.rb +284 -0
  70. data/spec/{methods_spec.rb → formatters/methods_spec.rb} +13 -7
  71. data/spec/{objects_spec.rb → formatters/objects_spec.rb} +49 -0
  72. data/spec/{ext → formatters}/ostruct_spec.rb +1 -0
  73. data/spec/formatters/set_spec.rb +49 -0
  74. data/spec/formatters/struct_spec.rb +61 -0
  75. data/spec/merge_options_spec.rb +13 -0
  76. data/spec/misc_spec.rb +21 -21
  77. data/spec/spec_helper.rb +5 -10
  78. data/spec/support/active_record_data/5_1_diana.txt +104 -0
  79. data/spec/support/active_record_data/5_1_multi.txt +210 -0
  80. data/spec/support/active_record_data/5_2_diana.txt +104 -0
  81. data/spec/support/active_record_data/5_2_multi.txt +210 -0
  82. data/spec/support/ext_verifier.rb +0 -15
  83. data/spec/support/mongoid_versions.rb +4 -4
  84. data/spec/support/rails_versions.rb +10 -20
  85. metadata +98 -87
  86. data/lib/awesome_print/core_ext/method.rb +0 -21
  87. data/lib/awesome_print/ext/action_view.rb +0 -22
  88. data/lib/awesome_print/ext/active_record.rb +0 -78
  89. data/lib/awesome_print/ext/active_support.rb +0 -47
  90. data/lib/awesome_print/ext/mongo_mapper.rb +0 -124
  91. data/lib/awesome_print/ext/mongoid.rb +0 -67
  92. data/lib/awesome_print/ext/nobrainer.rb +0 -52
  93. data/lib/awesome_print/ext/nokogiri.rb +0 -45
  94. data/lib/awesome_print/ext/ostruct.rb +0 -27
  95. data/lib/awesome_print/ext/ripple.rb +0 -71
  96. data/lib/awesome_print/ext/sequel.rb +0 -58
  97. data/spec/ext/action_view_spec.rb +0 -18
  98. data/spec/ext/mongo_mapper_spec.rb +0 -261
  99. data/spec/ext/nobrainer_spec.rb +0 -59
  100. data/spec/ext/ripple_spec.rb +0 -48
  101. data/spec/formats_spec.rb +0 -779
  102. data/spec/support/active_record_data/3_2_diana.txt +0 -24
  103. data/spec/support/active_record_data/3_2_diana_legacy.txt +0 -24
  104. data/spec/support/active_record_data/3_2_multi.txt +0 -50
  105. data/spec/support/active_record_data/3_2_multi_legacy.txt +0 -50
  106. data/spec/support/active_record_data/4_0_diana.txt +0 -98
  107. data/spec/support/active_record_data/4_0_multi.txt +0 -198
  108. data/spec/support/active_record_data/4_1_diana.txt +0 -97
  109. data/spec/support/active_record_data/4_1_multi.txt +0 -196
  110. data/spec/support/active_record_data/4_2_diana.txt +0 -109
  111. data/spec/support/active_record_data/4_2_diana_legacy.txt +0 -109
  112. data/spec/support/active_record_data/4_2_multi.txt +0 -220
  113. data/spec/support/active_record_data/4_2_multi_legacy.txt +0 -220
@@ -0,0 +1,19 @@
1
+ require_relative 'base_formatter'
2
+
3
+ module AwesomePrint
4
+ module Formatters
5
+ class OpenStruct < BaseFormatter
6
+
7
+ formatter_for :openstruct
8
+
9
+ def self.formattable?(object)
10
+ defined?(::OpenStruct) && object.is_a?(::OpenStruct)
11
+ end
12
+
13
+ def format(object)
14
+ "#{object.class} #{HashFormatter.new(inspector).format(object.marshal_dump)}"
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ require_relative 'simple_formatter'
2
+
3
+ module AwesomePrint
4
+ module Formatters
5
+ class RangeFormatter < SimpleFormatter
6
+
7
+ formatter_for :range
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'simple_formatter'
2
+
3
+ module AwesomePrint
4
+ module Formatters
5
+ class RationalFormatter < SimpleFormatter
6
+
7
+ formatter_for :rational
8
+
9
+ def self.formattable?(object)
10
+ object.is_a?(Rational)
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'base_formatter'
2
+
3
+ module AwesomePrint
4
+ module Formatters
5
+ class SetFormatter < BaseFormatter
6
+
7
+ formatter_for :set
8
+
9
+ def self.formattable?(object)
10
+ object.kind_of?(Set)
11
+ end
12
+
13
+ def format(object)
14
+ Formatters::ArrayFormatter.new(@inspector).format(object.to_a)
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -4,18 +4,20 @@ module AwesomePrint
4
4
  module Formatters
5
5
  class SimpleFormatter < BaseFormatter
6
6
 
7
- attr_reader :string, :type, :inspector, :options
7
+ formatter_for :simple
8
8
 
9
- def initialize(string, type, inspector)
10
- @string = string
11
- @type = type
12
- @inspector = inspector
13
- @options = inspector.options
9
+ def self.core?
10
+ true
14
11
  end
15
12
 
16
- def format
17
- colorize(string, type)
13
+ def self.formattable?(object)
14
+ object.respond_to?(:to_s)
18
15
  end
16
+
17
+ def format(object)
18
+ colorize(object.to_s, self.class.formatted_object_type)
19
+ end
20
+
19
21
  end
20
22
  end
21
23
  end
@@ -0,0 +1,14 @@
1
+ require_relative 'simple_formatter'
2
+
3
+ module AwesomePrint
4
+ module Formatters
5
+ class StringFormatter < SimpleFormatter
6
+
7
+ formatter_for :string
8
+
9
+ def format(object)
10
+ colorize("\"#{object.to_s}\"", self.class.formatted_object_type)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -4,16 +4,18 @@ module AwesomePrint
4
4
  module Formatters
5
5
  class StructFormatter < BaseFormatter
6
6
 
7
- attr_reader :struct, :variables, :inspector, :options
7
+ formatter_for :struct
8
8
 
9
- def initialize(struct, inspector)
9
+ def self.formattable?(object)
10
+ object.is_a?(Struct)
11
+ end
12
+
13
+ attr_reader :struct, :variables
14
+
15
+ def format(struct)
10
16
  @struct = struct
11
17
  @variables = struct.members
12
- @inspector = inspector
13
- @options = inspector.options
14
- end
15
18
 
16
- def format
17
19
  vars = variables.map do |var|
18
20
  property = var.to_s[1..-1].to_sym # to_s because of some monkey patching done by Puppet.
19
21
  accessor = if struct.respond_to?(:"#{property}=")
@@ -0,0 +1,18 @@
1
+ require_relative 'simple_formatter'
2
+
3
+ module AwesomePrint
4
+ module Formatters
5
+ class SymbolFormatter < SimpleFormatter
6
+
7
+ formatter_for :symbol
8
+
9
+ def self.formattable?(object)
10
+ object.respond_to?(:to_s)
11
+ end
12
+
13
+ def format(object)
14
+ colorize(":#{object.to_s}", self.class.formatted_object_type)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'simple_formatter'
2
+
3
+ module AwesomePrint
4
+ module Formatters
5
+ class TrueClassFormatter < SimpleFormatter
6
+
7
+ formatter_for :trueclass
8
+
9
+ def self.formattable?(object)
10
+ object == true
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'method_formatter'
2
+
3
+ module AwesomePrint
4
+ module Formatters
5
+ class UnboundMethodFormatter < MethodFormatter
6
+
7
+ formatter_for :unboundmethod
8
+
9
+ def self.formattable?(object)
10
+ object.is_a?(UnboundMethod)
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -1,8 +1,3 @@
1
- # Copyright (c) 2010-2016 Michael Dvorkin and contributors
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
1
  require_relative 'indentator'
7
2
 
8
3
  module AwesomePrint
@@ -23,14 +18,20 @@ module AwesomePrint
23
18
  sort_vars: true, # Sort instance variables.
24
19
  limit: false, # Limit arrays & hashes. Accepts bool or int.
25
20
  ruby19_syntax: false, # Use Ruby 1.9 hash syntax in output.
21
+ class_name: :class, # Method used to get Instance class name.
22
+ object_id: true, # Show object_id.
26
23
  color: {
27
24
  args: :pale,
28
25
  array: :white,
29
26
  bigdecimal: :blue,
30
27
  class: :yellow,
28
+ module: :green,
31
29
  date: :greenish,
32
30
  falseclass: :red,
31
+ simple: :blue,
33
32
  fixnum: :blue,
33
+ integer: :blue,
34
+ range: :blue,
34
35
  float: :blue,
35
36
  hash: :pale,
36
37
  keyword: :cyan,
@@ -39,6 +40,7 @@ module AwesomePrint
39
40
  rational: :blue,
40
41
  string: :yellowish,
41
42
  struct: :pale,
43
+ openstruct: :pale,
42
44
  symbol: :cyanish,
43
45
  time: :greenish,
44
46
  trueclass: :green,
@@ -103,9 +105,10 @@ module AwesomePrint
103
105
  #---------------------------------------------------------------------------
104
106
  def nested(object)
105
107
  case printable(object)
106
- when :array then @formatter.colorize('[...]', :array)
107
- when :hash then @formatter.colorize('{...}', :hash)
108
- when :struct then @formatter.colorize('{...}', :struct)
108
+ when :array then @formatter.colorize('[...]', :array)
109
+ when :hash then @formatter.colorize('{...}', :hash)
110
+ when :struct then @formatter.colorize('{...}', :struct)
111
+ when :openstruct then @formatter.colorize('{...}', :openstruct)
109
112
  else @formatter.colorize("...#{object.class}...", :class)
110
113
  end
111
114
  end
@@ -120,13 +123,14 @@ module AwesomePrint
120
123
  # base class.
121
124
  #---------------------------------------------------------------------------
122
125
  def printable(object)
123
- case object
124
- when Array then :array
125
- when Hash then :hash
126
- when File then :file
127
- when Dir then :dir
128
- when Struct then :struct
129
- else object.class.to_s.gsub(/:+/, '_').downcase.to_sym
126
+ # FIXME: rails specific hack. this needs to be extracted into a
127
+ # awesome_print-rails binding lib or something.
128
+ if defined?(::ActiveRecord) && object.respond_to?(:ancestors) && object.ancestors.to_a.include?(::ActiveRecord::Base)
129
+ :activerecord_base_class
130
+ elsif defined?(::Mongoid) && object.respond_to?(:ancestors) && object.ancestors.to_a.include?(::Mongoid::Document)
131
+ :mongoid_document
132
+ else
133
+ object.class.to_s.gsub(/:+/, '_').downcase.to_sym
130
134
  end
131
135
  end
132
136
 
@@ -160,7 +164,7 @@ module AwesomePrint
160
164
  load_dotfile
161
165
  merge_options!(AwesomePrint.defaults) if AwesomePrint.defaults.is_a?(Hash)
162
166
  rescue => e
163
- $stderr.puts "Could not load #{dotfile}: #{e}"
167
+ $stderr.puts "Could not load '.aprc' from ENV['HOME']: #{e}"
164
168
  end
165
169
  end
166
170
  end
@@ -0,0 +1,63 @@
1
+ module AwesomePrint
2
+ module Limiter
3
+
4
+ DEFAULT_LIMIT_SIZE = 7
5
+
6
+ # To support limited output, for example:
7
+ #
8
+ # ap ('a'..'z').to_a, :limit => 3
9
+ # [
10
+ # [ 0] "a",
11
+ # [ 1] .. [24],
12
+ # [25] "z"
13
+ # ]
14
+ #
15
+ # ap (1..100).to_a, :limit => true # Default limit is 7.
16
+ # [
17
+ # [ 0] 1,
18
+ # [ 1] 2,
19
+ # [ 2] 3,
20
+ # [ 3] .. [96],
21
+ # [97] 98,
22
+ # [98] 99,
23
+ # [99] 100
24
+ # ]
25
+ #------------------------------------------------------------------------------
26
+ def should_be_limited?
27
+ options[:limit] or (options[:limit].is_a?(Integer) and options[:limit] > 0)
28
+ end
29
+
30
+ def get_limit_size
31
+ case options[:limit]
32
+ when true
33
+ DEFAULT_LIMIT_SIZE
34
+ else
35
+ options[:limit]
36
+ end
37
+ end
38
+
39
+ def limited(data, width, is_hash = false)
40
+ limit = get_limit_size
41
+ if data.length <= limit
42
+ data
43
+ else
44
+ # Calculate how many elements to be displayed above and below the separator.
45
+ head = limit / 2
46
+ tail = head - (limit - 1) % 2
47
+
48
+ # Add the proper elements to the temp array and format the separator.
49
+ temp = data[0, head] + [nil] + data[-tail, tail]
50
+
51
+ temp[head] = if is_hash
52
+ "#{indent}#{data[head].strip} .. #{data[data.length - tail - 1].strip}"
53
+ else
54
+ "#{indent}[#{head.to_s.rjust(width)}] .. [#{data.length - tail - 1}]"
55
+ end
56
+
57
+ temp
58
+ end
59
+ end
60
+
61
+
62
+ end
63
+ end
@@ -0,0 +1,20 @@
1
+ module AwesomePrint
2
+ module Registrar
3
+
4
+ def self.included(base)
5
+ base.send(:extend, ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+
10
+ attr_accessor :formatted_object_type
11
+
12
+ def formatter_for(type)
13
+ self.formatted_object_type = type
14
+
15
+ AwesomePrint::Formatter.register(self)
16
+ end
17
+ end
18
+
19
+ end
20
+ end
@@ -1,10 +1,10 @@
1
- # Copyright (c) 2010-2016 Michael Dvorkin and contributors
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
1
  module AwesomePrint
2
+
3
+ def self.debug
4
+ false #true
5
+ end
6
+
7
7
  def self.version
8
- '1.8.0'
8
+ '2.0.0.pre'
9
9
  end
10
10
  end
@@ -0,0 +1,251 @@
1
+ require_relative '../spec_helper'
2
+
3
+ RSpec.describe 'AwesomePrint' do
4
+ describe 'Array' do
5
+ before do
6
+ @arr = [1, :two, 'three', [nil, [true, false]]]
7
+ end
8
+
9
+ it 'empty array' do
10
+ expect([].ai).to eq('[]')
11
+ end
12
+
13
+ it 'plain multiline' do
14
+ expect(@arr.ai(plain: true)).to eq <<-EOS.strip
15
+ [
16
+ [0] 1,
17
+ [1] :two,
18
+ [2] "three",
19
+ [3] [
20
+ [0] nil,
21
+ [1] [
22
+ [0] true,
23
+ [1] false
24
+ ]
25
+ ]
26
+ ]
27
+ EOS
28
+ end
29
+
30
+ it 'plain multiline without index' do
31
+ expect(@arr.ai(plain: true, index: false)).to eq <<-EOS.strip
32
+ [
33
+ 1,
34
+ :two,
35
+ "three",
36
+ [
37
+ nil,
38
+ [
39
+ true,
40
+ false
41
+ ]
42
+ ]
43
+ ]
44
+ EOS
45
+ end
46
+
47
+ it 'plain multiline indented' do
48
+ expect(@arr.ai(plain: true, indent: 2)).to eq <<-EOS.strip
49
+ [
50
+ [0] 1,
51
+ [1] :two,
52
+ [2] "three",
53
+ [3] [
54
+ [0] nil,
55
+ [1] [
56
+ [0] true,
57
+ [1] false
58
+ ]
59
+ ]
60
+ ]
61
+ EOS
62
+ end
63
+
64
+ it 'plain multiline indented without index' do
65
+ expect(@arr.ai(plain: true, indent: 2, index: false)).to eq <<-EOS.strip
66
+ [
67
+ 1,
68
+ :two,
69
+ "three",
70
+ [
71
+ nil,
72
+ [
73
+ true,
74
+ false
75
+ ]
76
+ ]
77
+ ]
78
+ EOS
79
+ end
80
+
81
+ it 'plain single line' do
82
+ expect(@arr.ai(plain: true, multiline: false)).to eq('[ 1, :two, "three", [ nil, [ true, false ] ] ]')
83
+ end
84
+
85
+ it 'colored multiline (default)' do
86
+ expect(@arr.ai).to eq <<-EOS.strip
87
+ [
88
+ \e[1;37m[0] \e[0m\e[1;34m1\e[0m,
89
+ \e[1;37m[1] \e[0m\e[0;36m:two\e[0m,
90
+ \e[1;37m[2] \e[0m\e[0;33m\"three\"\e[0m,
91
+ \e[1;37m[3] \e[0m[
92
+ \e[1;37m[0] \e[0m\e[1;31mnil\e[0m,
93
+ \e[1;37m[1] \e[0m[
94
+ \e[1;37m[0] \e[0m\e[1;32mtrue\e[0m,
95
+ \e[1;37m[1] \e[0m\e[1;31mfalse\e[0m
96
+ ]
97
+ ]
98
+ ]
99
+ EOS
100
+ end
101
+
102
+ it 'colored multiline indented' do
103
+ expect(@arr.ai(indent: 8)).to eq <<-EOS.strip
104
+ [
105
+ \e[1;37m[0] \e[0m\e[1;34m1\e[0m,
106
+ \e[1;37m[1] \e[0m\e[0;36m:two\e[0m,
107
+ \e[1;37m[2] \e[0m\e[0;33m\"three\"\e[0m,
108
+ \e[1;37m[3] \e[0m[
109
+ \e[1;37m[0] \e[0m\e[1;31mnil\e[0m,
110
+ \e[1;37m[1] \e[0m[
111
+ \e[1;37m[0] \e[0m\e[1;32mtrue\e[0m,
112
+ \e[1;37m[1] \e[0m\e[1;31mfalse\e[0m
113
+ ]
114
+ ]
115
+ ]
116
+ EOS
117
+ end
118
+
119
+ it 'colored single line' do
120
+ 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 ] ] ]")
121
+ end
122
+ end
123
+
124
+ #------------------------------------------------------------------------------
125
+ describe 'Nested Array' do
126
+ before do
127
+ @arr = [1, 2]
128
+ @arr << @arr
129
+ end
130
+
131
+ it 'plain multiline' do
132
+ expect(@arr.ai(plain: true)).to eq <<-EOS.strip
133
+ [
134
+ [0] 1,
135
+ [1] 2,
136
+ [2] [...]
137
+ ]
138
+ EOS
139
+ end
140
+
141
+ it 'plain multiline without index' do
142
+ expect(@arr.ai(plain: true, index: false)).to eq <<-EOS.strip
143
+ [
144
+ 1,
145
+ 2,
146
+ [...]
147
+ ]
148
+ EOS
149
+ end
150
+
151
+ it 'plain single line' do
152
+ expect(@arr.ai(plain: true, multiline: false)).to eq('[ 1, 2, [...] ]')
153
+ end
154
+ end
155
+
156
+ #------------------------------------------------------------------------------
157
+ describe 'Limited Output Array' do
158
+ before(:each) do
159
+ @arr = (1..1000).to_a
160
+ end
161
+
162
+ it 'plain limited output large' do
163
+ expect(@arr.ai(plain: true, limit: true)).to eq <<-EOS.strip
164
+ [
165
+ [ 0] 1,
166
+ [ 1] 2,
167
+ [ 2] 3,
168
+ [ 3] .. [996],
169
+ [997] 998,
170
+ [998] 999,
171
+ [999] 1000
172
+ ]
173
+ EOS
174
+ end
175
+
176
+ it 'plain limited output small' do
177
+ @arr = @arr[0..3]
178
+ expect(@arr.ai(plain: true, limit: true)).to eq <<-EOS.strip
179
+ [
180
+ [0] 1,
181
+ [1] 2,
182
+ [2] 3,
183
+ [3] 4
184
+ ]
185
+ EOS
186
+ end
187
+
188
+ it 'plain limited output with 10 lines' do
189
+ expect(@arr.ai(plain: true, limit: 10)).to eq <<-EOS.strip
190
+ [
191
+ [ 0] 1,
192
+ [ 1] 2,
193
+ [ 2] 3,
194
+ [ 3] 4,
195
+ [ 4] 5,
196
+ [ 5] .. [995],
197
+ [996] 997,
198
+ [997] 998,
199
+ [998] 999,
200
+ [999] 1000
201
+ ]
202
+ EOS
203
+ end
204
+
205
+ it 'plain limited output with 11 lines' do
206
+ expect(@arr.ai(plain: true, limit: 11)).to eq <<-EOS.strip
207
+ [
208
+ [ 0] 1,
209
+ [ 1] 2,
210
+ [ 2] 3,
211
+ [ 3] 4,
212
+ [ 4] 5,
213
+ [ 5] .. [994],
214
+ [995] 996,
215
+ [996] 997,
216
+ [997] 998,
217
+ [998] 999,
218
+ [999] 1000
219
+ ]
220
+ EOS
221
+ end
222
+ end
223
+
224
+ #------------------------------------------------------------------------------
225
+ describe 'Inherited from standard Ruby classes' do
226
+ after do
227
+ Object.instance_eval { remove_const :My } if defined?(My)
228
+ end
229
+
230
+ it 'inherited from Array should be displayed as Array' do
231
+ class My < Array; end
232
+
233
+ my = My.new([1, :two, 'three', [nil, [true, false]]])
234
+ expect(my.ai(plain: true)).to eq <<-EOS.strip
235
+ [
236
+ [0] 1,
237
+ [1] :two,
238
+ [2] "three",
239
+ [3] [
240
+ [0] nil,
241
+ [1] [
242
+ [0] true,
243
+ [1] false
244
+ ]
245
+ ]
246
+ ]
247
+ EOS
248
+ end
249
+
250
+ end
251
+ end