amazing_print 1.0.0 → 1.3.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 +4 -4
- data/.gitignore +1 -1
- data/Appraisals +47 -51
- data/CHANGELOG.md +32 -0
- data/Gemfile +2 -0
- data/LICENSE +1 -0
- data/README.md +20 -13
- data/Rakefile +2 -0
- data/lib/amazing_print.rb +19 -17
- data/lib/amazing_print/colorize.rb +2 -0
- data/lib/amazing_print/core_ext/awesome_method_array.rb +3 -1
- data/lib/amazing_print/core_ext/class.rb +2 -0
- data/lib/amazing_print/core_ext/kernel.rb +2 -0
- data/lib/amazing_print/core_ext/logger.rb +11 -2
- data/lib/amazing_print/core_ext/object.rb +2 -0
- data/lib/amazing_print/core_ext/string.rb +5 -2
- data/lib/amazing_print/custom_defaults.rb +3 -1
- data/lib/amazing_print/ext/action_view.rb +3 -1
- data/lib/amazing_print/ext/active_record.rb +9 -18
- data/lib/amazing_print/ext/active_support.rb +2 -0
- data/lib/amazing_print/ext/mongo_mapper.rb +4 -2
- data/lib/amazing_print/ext/mongoid.rb +2 -0
- data/lib/amazing_print/ext/nobrainer.rb +6 -0
- data/lib/amazing_print/ext/nokogiri.rb +2 -0
- data/lib/amazing_print/ext/ostruct.rb +2 -0
- data/lib/amazing_print/ext/ripple.rb +2 -0
- data/lib/amazing_print/ext/sequel.rb +4 -2
- data/lib/amazing_print/formatter.rb +9 -2
- data/lib/amazing_print/formatters.rb +12 -10
- data/lib/amazing_print/formatters/array_formatter.rb +3 -1
- data/lib/amazing_print/formatters/base_formatter.rb +5 -2
- data/lib/amazing_print/formatters/class_formatter.rb +2 -0
- data/lib/amazing_print/formatters/dir_formatter.rb +4 -1
- data/lib/amazing_print/formatters/file_formatter.rb +4 -1
- data/lib/amazing_print/formatters/hash_formatter.rb +4 -2
- data/lib/amazing_print/formatters/method_formatter.rb +2 -0
- data/lib/amazing_print/formatters/object_formatter.rb +14 -13
- data/lib/amazing_print/formatters/simple_formatter.rb +2 -0
- data/lib/amazing_print/formatters/struct_formatter.rb +9 -7
- data/lib/amazing_print/indentator.rb +2 -0
- data/lib/amazing_print/inspector.rb +9 -9
- data/lib/amazing_print/version.rb +3 -1
- data/lib/ap.rb +3 -1
- data/spec/active_record_helper.rb +10 -0
- data/spec/colors_spec.rb +43 -46
- data/spec/core_ext/logger_spec.rb +40 -14
- data/spec/core_ext/string_spec.rb +2 -7
- data/spec/ext/action_controller_spec.rb +40 -0
- data/spec/ext/action_view_spec.rb +8 -1
- data/spec/ext/active_model_spec.rb +37 -0
- data/spec/ext/active_record_spec.rb +42 -7
- data/spec/ext/active_support_spec.rb +12 -1
- data/spec/ext/mongo_mapper_spec.rb +8 -6
- data/spec/ext/mongoid_spec.rb +2 -0
- data/spec/ext/nobrainer_spec.rb +2 -0
- data/spec/ext/nokogiri_spec.rb +2 -0
- data/spec/ext/ostruct_spec.rb +2 -0
- data/spec/ext/ripple_spec.rb +2 -0
- data/spec/ext/sequel_spec.rb +45 -0
- data/spec/formats_spec.rb +10 -8
- data/spec/methods_spec.rb +37 -3
- data/spec/misc_spec.rb +3 -1
- data/spec/objects_spec.rb +2 -0
- data/spec/sequel_helper.rb +18 -0
- data/spec/spec_helper.rb +5 -1
- data/spec/support/active_record_data.rb +2 -0
- data/spec/support/active_record_data/6_1_diana.txt +109 -0
- data/spec/support/active_record_data/6_1_multi.txt +220 -0
- data/spec/support/ext_verifier.rb +9 -4
- data/spec/support/mongoid_versions.rb +2 -0
- data/spec/support/rails_versions.rb +7 -0
- metadata +79 -54
- data/lib/amazing_print/core_ext/method.rb +0 -21
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright (c) 2010-2016 Michael Dvorkin and contributors
|
2
4
|
#
|
3
5
|
# AmazingPrint is freely distributable under the terms of MIT license.
|
@@ -53,7 +55,7 @@ module AmazingPrint
|
|
53
55
|
end
|
54
56
|
end
|
55
57
|
end
|
56
|
-
|
58
|
+
[awesome_simple(object.to_s, :active_record_instance), awesome_hash(data)].join(' ')
|
57
59
|
end
|
58
60
|
|
59
61
|
# Format ActiveRecord class object.
|
@@ -70,10 +72,7 @@ module AmazingPrint
|
|
70
72
|
hash[c.name.to_sym] = c.type
|
71
73
|
end
|
72
74
|
|
73
|
-
|
74
|
-
base = "< #{awesome_simple(object.superclass.to_s, :class)}"
|
75
|
-
|
76
|
-
[name, base, awesome_hash(data)].join(' ')
|
75
|
+
[awesome_simple("class #{object} < #{object.superclass}", :class), awesome_hash(data)].join(' ')
|
77
76
|
end
|
78
77
|
|
79
78
|
# Format ActiveModel error object.
|
@@ -82,20 +81,12 @@ module AmazingPrint
|
|
82
81
|
return object.inspect unless defined?(::ActiveSupport::OrderedHash)
|
83
82
|
return awesome_object(object) if @options[:raw]
|
84
83
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
object_dump.class.column_names.each_with_object(::ActiveSupport::OrderedHash.new) do |name, hash|
|
90
|
-
if object_dump.has_attribute?(name) || object_dump.new_record?
|
91
|
-
value = object_dump.respond_to?(name) ? object_dump.send(name) : object_dump.read_attribute(name)
|
92
|
-
hash[name.to_sym] = value
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
84
|
+
data = object.instance_variable_get('@base')
|
85
|
+
.attributes
|
86
|
+
.merge(details: object.details.to_h,
|
87
|
+
messages: object.messages.to_h.transform_values(&:to_a))
|
96
88
|
|
97
|
-
|
98
|
-
"#{object} " << awesome_hash(data)
|
89
|
+
[awesome_simple(object.to_s, :active_model_error), awesome_hash(data)].join(' ')
|
99
90
|
end
|
100
91
|
end
|
101
92
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright (c) 2010-2016 Michael Dvorkin and contributors
|
2
4
|
#
|
3
5
|
# AmazingPrint is freely distributable under the terms of MIT license.
|
@@ -17,7 +19,7 @@ module AmazingPrint
|
|
17
19
|
cast = cast_without_mongo_mapper(object, type)
|
18
20
|
|
19
21
|
if defined?(::MongoMapper::Document)
|
20
|
-
if object.is_a?(Class) && (object.ancestors & [::MongoMapper::Document, ::MongoMapper::EmbeddedDocument]).
|
22
|
+
if object.is_a?(Class) && !(object.ancestors & [::MongoMapper::Document, ::MongoMapper::EmbeddedDocument]).empty?
|
21
23
|
cast = :mongo_mapper_class
|
22
24
|
elsif object.is_a?(::MongoMapper::Document) || object.is_a?(::MongoMapper::EmbeddedDocument)
|
23
25
|
cast = :mongo_mapper_instance
|
@@ -88,7 +90,7 @@ module AmazingPrint
|
|
88
90
|
label = "#{colorize('embedded', :assoc)} #{label}"
|
89
91
|
end
|
90
92
|
|
91
|
-
|
93
|
+
[label, awesome_hash(data)].join(' ')
|
92
94
|
end
|
93
95
|
|
94
96
|
# Format MongoMapper association object.
|
@@ -1,3 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Style/HashTransformValues
|
4
|
+
|
1
5
|
# Copyright (c) 2010-2016 Michael Dvorkin and contributors
|
2
6
|
#
|
3
7
|
# AmazingPrint is freely distributable under the terms of MIT license.
|
@@ -51,3 +55,5 @@ module AmazingPrint
|
|
51
55
|
end
|
52
56
|
|
53
57
|
AmazingPrint::Formatter.include AmazingPrint::NoBrainer
|
58
|
+
|
59
|
+
# rubocop:enable Style/HashTransformValues
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright (c) 2010-2016 Michael Dvorkin and contributors
|
2
4
|
#
|
3
5
|
# AmazingPrint is freely distributable under the terms of MIT license.
|
@@ -16,7 +18,7 @@ module AmazingPrint
|
|
16
18
|
cast = cast_without_sequel(object, type)
|
17
19
|
if defined?(::Sequel::Model) && object.is_a?(::Sequel::Model)
|
18
20
|
cast = :sequel_document
|
19
|
-
elsif defined?(::Sequel::Model) && object.is_a?(Class) && object.ancestors.include?(::Sequel::Model)
|
21
|
+
elsif defined?(::Sequel::Model) && object.is_a?(Class) && object.ancestors.include?(::Sequel::Model) && object&.name != 'Sequel::Model'
|
20
22
|
cast = :sequel_model_class
|
21
23
|
elsif defined?(::Sequel::Mysql2::Dataset) && object.class.ancestors.include?(::Sequel::Mysql2::Dataset)
|
22
24
|
cast = :sequel_dataset
|
@@ -27,7 +29,7 @@ module AmazingPrint
|
|
27
29
|
# Format Sequel Document object.
|
28
30
|
#------------------------------------------------------------------------------
|
29
31
|
def awesome_sequel_document(object)
|
30
|
-
data = object.values.sort_by
|
32
|
+
data = object.values.sort_by(&:to_s).each_with_object({}) do |c, hash|
|
31
33
|
hash[c[0].to_sym] = c[1]
|
32
34
|
end
|
33
35
|
data = { errors: object.errors, values: data } unless object.errors.empty?
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright (c) 2010-2016 Michael Dvorkin and contributors
|
2
4
|
#
|
3
5
|
# AmazingPrint is freely distributable under the terms of MIT license.
|
4
6
|
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
5
7
|
#------------------------------------------------------------------------------
|
6
|
-
|
8
|
+
require_relative 'formatters'
|
7
9
|
|
8
10
|
module AmazingPrint
|
9
11
|
class Formatter
|
@@ -26,7 +28,7 @@ module AmazingPrint
|
|
26
28
|
send(:"awesome_#{core_class}", object) # Core formatters.
|
27
29
|
else
|
28
30
|
awesome_self(object, type) # Catch all that falls back to object.inspect.
|
29
|
-
|
31
|
+
end
|
30
32
|
awesome
|
31
33
|
end
|
32
34
|
|
@@ -111,6 +113,11 @@ module AmazingPrint
|
|
111
113
|
|
112
114
|
return nil if object.method(:to_hash).arity != 0
|
113
115
|
|
116
|
+
# ActionController::Parameters will raise if they are not yet permitted and
|
117
|
+
# we try to convert to hash.
|
118
|
+
# https://api.rubyonrails.org/classes/ActionController/Parameters.html
|
119
|
+
return nil if object.respond_to?(:permitted?) && !object.permitted?
|
120
|
+
|
114
121
|
hash = object.to_hash
|
115
122
|
return nil if !hash.respond_to?(:keys) || !hash.respond_to?(:[])
|
116
123
|
|
@@ -1,14 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module AmazingPrint
|
2
4
|
module Formatters
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
require_relative 'formatters/object_formatter'
|
6
|
+
require_relative 'formatters/struct_formatter'
|
7
|
+
require_relative 'formatters/hash_formatter'
|
8
|
+
require_relative 'formatters/array_formatter'
|
9
|
+
require_relative 'formatters/simple_formatter'
|
10
|
+
require_relative 'formatters/method_formatter'
|
11
|
+
require_relative 'formatters/class_formatter'
|
12
|
+
require_relative 'formatters/dir_formatter'
|
13
|
+
require_relative 'formatters/file_formatter'
|
14
|
+
require_relative 'colorize'
|
13
15
|
end
|
14
16
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'base_formatter'
|
2
4
|
|
3
5
|
module AmazingPrint
|
@@ -31,7 +33,7 @@ module AmazingPrint
|
|
31
33
|
if options[:multiline]
|
32
34
|
multiline_array
|
33
35
|
else
|
34
|
-
'[ '
|
36
|
+
'[ ' + array.map { |item| inspector.awesome(item) }.join(', ') + ' ]'
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../colorize'
|
2
4
|
|
3
5
|
module AmazingPrint
|
@@ -70,6 +72,8 @@ module AmazingPrint
|
|
70
72
|
name ||= (type == :block ? 'block' : "arg#{arr.size + 1}")
|
71
73
|
arr << case type
|
72
74
|
when :req then name.to_s
|
75
|
+
when :keyreq then "#{name}:"
|
76
|
+
when :key then "*#{name}:"
|
73
77
|
when :opt, :rest then "*#{name}"
|
74
78
|
when :block then "&#{name}"
|
75
79
|
else '?'
|
@@ -91,7 +95,7 @@ module AmazingPrint
|
|
91
95
|
# #<UnboundMethod: Hello#world>
|
92
96
|
# #<UnboundMethod: Hello#world() /home/hs/code/amazing_print/spec/methods_spec.rb:68>
|
93
97
|
#
|
94
|
-
if method.to_s =~
|
98
|
+
if method.to_s =~ %r{(Unbound)*Method: ((#<)?[^/#]*)[#\.]}
|
95
99
|
unbound = Regexp.last_match(1) && '(unbound)'
|
96
100
|
klass = Regexp.last_match(2)
|
97
101
|
if klass && klass =~ /(\(\w+:\s.*?\))/ # Is this ActiveRecord-style class?
|
@@ -123,7 +127,6 @@ module AmazingPrint
|
|
123
127
|
end
|
124
128
|
|
125
129
|
def outdent
|
126
|
-
' ' * (indentation - options[:indent].abs)
|
127
130
|
i = indentation - options[:indent].abs
|
128
131
|
|
129
132
|
INDENT_CACHE[i] || ' ' * i
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'base_formatter'
|
2
4
|
|
3
5
|
module AmazingPrint
|
@@ -84,11 +86,11 @@ module AmazingPrint
|
|
84
86
|
|
85
87
|
def ruby19_syntax(key, value, width)
|
86
88
|
key[0] = ''
|
87
|
-
align(key, width - 1)
|
89
|
+
"#{align(key, width - 1)}#{colorize(': ', :hash)}#{inspector.awesome(value)}"
|
88
90
|
end
|
89
91
|
|
90
92
|
def pre_ruby19_syntax(key, value, width)
|
91
|
-
align(key, width)
|
93
|
+
"#{align(key, width)}#{colorize(' => ', :hash)}#{inspector.awesome(value)}"
|
92
94
|
end
|
93
95
|
|
94
96
|
def plain_single_line
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'base_formatter'
|
2
4
|
|
3
5
|
module AmazingPrint
|
@@ -19,7 +21,7 @@ module AmazingPrint
|
|
19
21
|
object.respond_to?(property) ? :accessor : :writer
|
20
22
|
else
|
21
23
|
object.respond_to?(property) ? :reader : nil
|
22
|
-
|
24
|
+
end
|
23
25
|
if accessor
|
24
26
|
["attr_#{accessor} :#{property}", var]
|
25
27
|
else
|
@@ -33,15 +35,15 @@ module AmazingPrint
|
|
33
35
|
end
|
34
36
|
|
35
37
|
unless options[:plain]
|
36
|
-
if key =~ /(@\w+)/
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
key = if key =~ /(@\w+)/
|
39
|
+
key.sub(Regexp.last_match(1), colorize(Regexp.last_match(1), :variable))
|
40
|
+
else
|
41
|
+
key.sub(/(attr_\w+)\s(\:\w+)/, "#{colorize('\\1', :keyword)} #{colorize('\\2', :method)}")
|
42
|
+
end
|
41
43
|
end
|
42
44
|
|
43
45
|
indented do
|
44
|
-
key
|
46
|
+
key + colorize(' = ', :hash) + inspector.awesome(object.instance_variable_get(var))
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
@@ -60,14 +62,13 @@ module AmazingPrint
|
|
60
62
|
|
61
63
|
def awesome_instance
|
62
64
|
str = object.send(options[:class_name]).to_s
|
63
|
-
|
64
|
-
|
65
|
+
return str unless options[:object_id]
|
66
|
+
|
67
|
+
# We need to ensure that the original Kernel#format is used here instead of the one
|
68
|
+
# defined above.
|
65
69
|
# rubocop:disable Style/ColonMethodCall
|
66
|
-
|
67
|
-
str << Kernel::format(':0x%08x', (object.__id__ * 2))
|
68
|
-
end
|
70
|
+
str + Kernel::format(':0x%08x', (object.__id__ * 2))
|
69
71
|
# rubocop:enable Style/ColonMethodCall
|
70
|
-
str
|
71
72
|
end
|
72
73
|
|
73
74
|
def left_aligned
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'base_formatter'
|
2
4
|
|
3
5
|
module AmazingPrint
|
@@ -19,7 +21,7 @@ module AmazingPrint
|
|
19
21
|
struct.respond_to?(property) ? :accessor : :writer
|
20
22
|
else
|
21
23
|
struct.respond_to?(property) ? :reader : nil
|
22
|
-
|
24
|
+
end
|
23
25
|
if accessor
|
24
26
|
["attr_#{accessor} :#{property}", var]
|
25
27
|
else
|
@@ -33,15 +35,15 @@ module AmazingPrint
|
|
33
35
|
end
|
34
36
|
|
35
37
|
unless options[:plain]
|
36
|
-
if key =~ /(@\w+)/
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
key = if key =~ /(@\w+)/
|
39
|
+
key.sub(Regexp.last_match(1), colorize(Regexp.last_match(1), :variable))
|
40
|
+
else
|
41
|
+
key.sub(/(attr_\w+)\s(\:\w+)/, "#{colorize('\\1', :keyword)} #{colorize('\\2', :method)}")
|
42
|
+
end
|
41
43
|
end
|
42
44
|
|
43
45
|
indented do
|
44
|
-
key
|
46
|
+
key + colorize(' = ', :hash) + inspector.awesome(struct.send(var))
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Copyright (c) 2010-2016 Michael Dvorkin and contributors
|
2
4
|
#
|
3
5
|
# AmazingPrint is freely distributable under the terms of MIT license.
|
@@ -26,7 +28,7 @@ module AmazingPrint
|
|
26
28
|
class_name: :class, # Method used to get Instance class name.
|
27
29
|
object_id: true, # Show object_id.
|
28
30
|
color: {
|
29
|
-
args: :
|
31
|
+
args: :whiteish,
|
30
32
|
array: :white,
|
31
33
|
bigdecimal: :blue,
|
32
34
|
class: :yellow,
|
@@ -35,13 +37,13 @@ module AmazingPrint
|
|
35
37
|
fixnum: :blue,
|
36
38
|
integer: :blue,
|
37
39
|
float: :blue,
|
38
|
-
hash: :
|
40
|
+
hash: :whiteish,
|
39
41
|
keyword: :cyan,
|
40
42
|
method: :purpleish,
|
41
43
|
nilclass: :red,
|
42
44
|
rational: :blue,
|
43
45
|
string: :yellowish,
|
44
|
-
struct: :
|
46
|
+
struct: :whiteish,
|
45
47
|
symbol: :cyanish,
|
46
48
|
time: :greenish,
|
47
49
|
trueclass: :green,
|
@@ -86,10 +88,10 @@ module AmazingPrint
|
|
86
88
|
def colorize?
|
87
89
|
AmazingPrint.force_colors ||= false
|
88
90
|
AmazingPrint.force_colors || (
|
89
|
-
if defined? @
|
90
|
-
@
|
91
|
+
if defined? @colorize_stdout
|
92
|
+
@colorize_stdout
|
91
93
|
else
|
92
|
-
@
|
94
|
+
@colorize_stdout = STDOUT.tty? && (
|
93
95
|
(
|
94
96
|
ENV['TERM'] &&
|
95
97
|
ENV['TERM'] != 'dumb'
|
@@ -165,9 +167,7 @@ module AmazingPrint
|
|
165
167
|
#---------------------------------------------------------------------------
|
166
168
|
def merge_custom_defaults!
|
167
169
|
load_dotfile
|
168
|
-
if AmazingPrint.defaults.is_a?(Hash)
|
169
|
-
merge_options!(AmazingPrint.defaults)
|
170
|
-
end
|
170
|
+
merge_options!(AmazingPrint.defaults) if AmazingPrint.defaults.is_a?(Hash)
|
171
171
|
rescue StandardError => e
|
172
172
|
warn "Could not load '.aprc' from ENV['HOME']: #{e}"
|
173
173
|
end
|