awesome_print 1.9.2 → 2.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -1
  3. data/Appraisals +2 -33
  4. data/CHANGELOG.md +6 -15
  5. data/CONTRIBUTING.md +0 -1
  6. data/README.md +7 -49
  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/custom_defaults.rb +1 -1
  18. data/lib/awesome_print/formatter.rb +38 -106
  19. data/lib/awesome_print/formatters/array_formatter.rb +11 -8
  20. data/lib/awesome_print/formatters/base_formatter.rb +20 -53
  21. data/lib/awesome_print/formatters/bigdecimal_formatter.rb +20 -0
  22. data/lib/awesome_print/formatters/class_formatter.rb +5 -6
  23. data/lib/awesome_print/formatters/dir_formatter.rb +4 -6
  24. data/lib/awesome_print/formatters/ext/active_model_error_formatter.rb +44 -0
  25. data/lib/awesome_print/formatters/ext/active_record_attributeset_formatter.rb +27 -0
  26. data/lib/awesome_print/formatters/ext/active_record_class_formatter.rb +43 -0
  27. data/lib/awesome_print/formatters/ext/active_record_instance_formatter.rb +48 -0
  28. data/lib/awesome_print/formatters/ext/active_record_relation_formatter.rb +19 -0
  29. data/lib/awesome_print/formatters/ext/bson_objectid_formatter.rb +20 -0
  30. data/lib/awesome_print/formatters/ext/hash_with_indifferent_access_formatter.rb +20 -0
  31. data/lib/awesome_print/formatters/ext/mongoid_document_formatter.rb +59 -0
  32. data/lib/awesome_print/formatters/ext/nokogiri_document_formatter.rb +30 -0
  33. data/lib/awesome_print/formatters/ext/nokogiri_node_formatter.rb +29 -0
  34. data/lib/awesome_print/formatters/ext/nokogiri_nodeset_formatter.rb +32 -0
  35. data/lib/awesome_print/formatters/ext/sequel_dataset_formatter.rb +20 -0
  36. data/lib/awesome_print/formatters/ext/sequel_model_class_formatter.rb +25 -0
  37. data/lib/awesome_print/formatters/ext/sequel_model_formatter.rb +26 -0
  38. data/lib/awesome_print/formatters/ext/time_with_zone_formatter.rb +24 -0
  39. data/lib/awesome_print/formatters/fallback_formatter.rb +55 -0
  40. data/lib/awesome_print/formatters/false_class_formatter.rb +15 -0
  41. data/lib/awesome_print/formatters/file_formatter.rb +4 -6
  42. data/lib/awesome_print/formatters/hash_formatter.rb +12 -7
  43. data/lib/awesome_print/formatters/integer_formatter.rb +11 -0
  44. data/lib/awesome_print/formatters/method_formatter.rb +8 -6
  45. data/lib/awesome_print/formatters/module_formatter.rb +18 -0
  46. data/lib/awesome_print/formatters/nil_class_formatter.rb +19 -0
  47. data/lib/awesome_print/formatters/object_formatter.rb +19 -9
  48. data/lib/awesome_print/formatters/open_struct.rb +19 -0
  49. data/lib/awesome_print/formatters/range_formatter.rb +11 -0
  50. data/lib/awesome_print/formatters/rational_formatter.rb +15 -0
  51. data/lib/awesome_print/formatters/set_formatter.rb +19 -0
  52. data/lib/awesome_print/formatters/simple_formatter.rb +10 -8
  53. data/lib/awesome_print/formatters/string_formatter.rb +14 -0
  54. data/lib/awesome_print/formatters/struct_formatter.rb +8 -6
  55. data/lib/awesome_print/formatters/symbol_formatter.rb +18 -0
  56. data/lib/awesome_print/formatters/true_class_formatter.rb +15 -0
  57. data/lib/awesome_print/formatters/unbound_method_formatter.rb +15 -0
  58. data/lib/awesome_print/inspector.rb +18 -17
  59. data/lib/awesome_print/limiter.rb +63 -0
  60. data/lib/awesome_print/registrar.rb +20 -0
  61. data/lib/awesome_print/version.rb +6 -6
  62. data/spec/formatters/array_spec.rb +251 -0
  63. data/spec/formatters/big_decimal_spec.rb +28 -0
  64. data/spec/formatters/class_spec.rb +91 -0
  65. data/spec/formatters/dir_file_spec.rb +43 -0
  66. data/spec/{ext → formatters/ext}/active_record_spec.rb +14 -58
  67. data/spec/{ext → formatters/ext}/active_support_spec.rb +7 -11
  68. data/spec/{ext → formatters/ext}/mongoid_spec.rb +2 -2
  69. data/spec/{ext → formatters/ext}/nokogiri_spec.rb +0 -0
  70. data/spec/formatters/hash_spec.rb +284 -0
  71. data/spec/{methods_spec.rb → formatters/methods_spec.rb} +3 -5
  72. data/spec/{objects_spec.rb → formatters/objects_spec.rb} +0 -0
  73. data/spec/{ext → formatters}/ostruct_spec.rb +1 -0
  74. data/spec/formatters/set_spec.rb +49 -0
  75. data/spec/formatters/struct_spec.rb +61 -0
  76. data/spec/merge_options_spec.rb +13 -0
  77. data/spec/misc_spec.rb +3 -10
  78. data/spec/spec_helper.rb +2 -9
  79. data/spec/support/ext_verifier.rb +0 -15
  80. data/spec/support/mongoid_versions.rb +4 -8
  81. data/spec/support/rails_versions.rb +2 -32
  82. metadata +100 -78
  83. data/awesome_print.gemspec +0 -33
  84. data/init.rb +0 -1
  85. data/lib/awesome_print/core_ext/method.rb +0 -21
  86. data/lib/awesome_print/ext/action_view.rb +0 -22
  87. data/lib/awesome_print/ext/active_record.rb +0 -103
  88. data/lib/awesome_print/ext/active_support.rb +0 -47
  89. data/lib/awesome_print/ext/mongo_mapper.rb +0 -124
  90. data/lib/awesome_print/ext/mongoid.rb +0 -67
  91. data/lib/awesome_print/ext/nobrainer.rb +0 -52
  92. data/lib/awesome_print/ext/nokogiri.rb +0 -45
  93. data/lib/awesome_print/ext/ostruct.rb +0 -27
  94. data/lib/awesome_print/ext/ripple.rb +0 -71
  95. data/lib/awesome_print/ext/sequel.rb +0 -58
  96. data/spec/ext/action_view_spec.rb +0 -21
  97. data/spec/ext/mongo_mapper_spec.rb +0 -261
  98. data/spec/ext/nobrainer_spec.rb +0 -59
  99. data/spec/ext/ripple_spec.rb +0 -48
  100. data/spec/formats_spec.rb +0 -779
  101. data/spec/support/active_record_data/3_2_diana.txt +0 -24
  102. data/spec/support/active_record_data/3_2_diana_legacy.txt +0 -24
  103. data/spec/support/active_record_data/3_2_multi.txt +0 -50
  104. data/spec/support/active_record_data/3_2_multi_legacy.txt +0 -50
  105. data/spec/support/active_record_data/4_0_diana.txt +0 -98
  106. data/spec/support/active_record_data/4_0_multi.txt +0 -198
  107. data/spec/support/active_record_data/4_1_diana.txt +0 -97
  108. data/spec/support/active_record_data/4_1_multi.txt +0 -196
  109. data/spec/support/active_record_data/4_2_diana.txt +0 -109
  110. data/spec/support/active_record_data/4_2_diana_legacy.txt +0 -109
  111. data/spec/support/active_record_data/4_2_multi.txt +0 -220
  112. data/spec/support/active_record_data/4_2_multi_legacy.txt +0 -220
  113. data/spec/support/active_record_data/6_0_diana.txt +0 -104
  114. data/spec/support/active_record_data/6_0_multi.txt +0 -210
  115. data/spec/support/active_record_data/6_1_diana.txt +0 -109
  116. data/spec/support/active_record_data/6_1_multi.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
@@ -30,10 +25,13 @@ module AwesomePrint
30
25
  array: :white,
31
26
  bigdecimal: :blue,
32
27
  class: :yellow,
28
+ module: :green,
33
29
  date: :greenish,
34
30
  falseclass: :red,
31
+ simple: :blue,
35
32
  fixnum: :blue,
36
33
  integer: :blue,
34
+ range: :blue,
37
35
  float: :blue,
38
36
  hash: :pale,
39
37
  keyword: :cyan,
@@ -42,6 +40,7 @@ module AwesomePrint
42
40
  rational: :blue,
43
41
  string: :yellowish,
44
42
  struct: :pale,
43
+ openstruct: :pale,
45
44
  symbol: :cyanish,
46
45
  time: :greenish,
47
46
  trueclass: :green,
@@ -62,8 +61,8 @@ module AwesomePrint
62
61
  indentator.indentation
63
62
  end
64
63
 
65
- def increase_indentation(&block)
66
- indentator.indent(&block)
64
+ def increase_indentation
65
+ indentator.indent(&Proc.new)
67
66
  end
68
67
 
69
68
  # Dispatcher that detects data nesting and invokes object-aware formatter.
@@ -106,9 +105,10 @@ module AwesomePrint
106
105
  #---------------------------------------------------------------------------
107
106
  def nested(object)
108
107
  case printable(object)
109
- when :array then @formatter.colorize('[...]', :array)
110
- when :hash then @formatter.colorize('{...}', :hash)
111
- 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)
112
112
  else @formatter.colorize("...#{object.class}...", :class)
113
113
  end
114
114
  end
@@ -123,13 +123,14 @@ module AwesomePrint
123
123
  # base class.
124
124
  #---------------------------------------------------------------------------
125
125
  def printable(object)
126
- case object
127
- when Array then :array
128
- when Hash then :hash
129
- when File then :file
130
- when Dir then :dir
131
- when Struct then :struct
132
- 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
133
134
  end
134
135
  end
135
136
 
@@ -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.9.2'
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