amazing_print 1.0.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|