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.
- checksums.yaml +5 -5
- data/.gitignore +1 -1
- data/Appraisals +2 -33
- data/CHANGELOG.md +6 -15
- data/CONTRIBUTING.md +0 -1
- data/README.md +7 -49
- data/lib/ap.rb +1 -5
- data/lib/awesome_print.rb +7 -29
- data/lib/awesome_print/colorize.rb +2 -0
- data/lib/awesome_print/core_ext/active_support.rb +7 -0
- data/lib/awesome_print/core_ext/awesome_method_array.rb +0 -6
- data/lib/awesome_print/core_ext/class.rb +0 -5
- data/lib/awesome_print/core_ext/kernel.rb +0 -5
- data/lib/awesome_print/core_ext/logger.rb +0 -5
- data/lib/awesome_print/core_ext/object.rb +0 -5
- data/lib/awesome_print/core_ext/string.rb +0 -5
- data/lib/awesome_print/custom_defaults.rb +1 -1
- data/lib/awesome_print/formatter.rb +38 -106
- data/lib/awesome_print/formatters/array_formatter.rb +11 -8
- data/lib/awesome_print/formatters/base_formatter.rb +20 -53
- data/lib/awesome_print/formatters/bigdecimal_formatter.rb +20 -0
- data/lib/awesome_print/formatters/class_formatter.rb +5 -6
- data/lib/awesome_print/formatters/dir_formatter.rb +4 -6
- data/lib/awesome_print/formatters/ext/active_model_error_formatter.rb +44 -0
- data/lib/awesome_print/formatters/ext/active_record_attributeset_formatter.rb +27 -0
- data/lib/awesome_print/formatters/ext/active_record_class_formatter.rb +43 -0
- data/lib/awesome_print/formatters/ext/active_record_instance_formatter.rb +48 -0
- data/lib/awesome_print/formatters/ext/active_record_relation_formatter.rb +19 -0
- data/lib/awesome_print/formatters/ext/bson_objectid_formatter.rb +20 -0
- data/lib/awesome_print/formatters/ext/hash_with_indifferent_access_formatter.rb +20 -0
- data/lib/awesome_print/formatters/ext/mongoid_document_formatter.rb +59 -0
- data/lib/awesome_print/formatters/ext/nokogiri_document_formatter.rb +30 -0
- data/lib/awesome_print/formatters/ext/nokogiri_node_formatter.rb +29 -0
- data/lib/awesome_print/formatters/ext/nokogiri_nodeset_formatter.rb +32 -0
- data/lib/awesome_print/formatters/ext/sequel_dataset_formatter.rb +20 -0
- data/lib/awesome_print/formatters/ext/sequel_model_class_formatter.rb +25 -0
- data/lib/awesome_print/formatters/ext/sequel_model_formatter.rb +26 -0
- data/lib/awesome_print/formatters/ext/time_with_zone_formatter.rb +24 -0
- data/lib/awesome_print/formatters/fallback_formatter.rb +55 -0
- data/lib/awesome_print/formatters/false_class_formatter.rb +15 -0
- data/lib/awesome_print/formatters/file_formatter.rb +4 -6
- data/lib/awesome_print/formatters/hash_formatter.rb +12 -7
- data/lib/awesome_print/formatters/integer_formatter.rb +11 -0
- data/lib/awesome_print/formatters/method_formatter.rb +8 -6
- data/lib/awesome_print/formatters/module_formatter.rb +18 -0
- data/lib/awesome_print/formatters/nil_class_formatter.rb +19 -0
- data/lib/awesome_print/formatters/object_formatter.rb +19 -9
- data/lib/awesome_print/formatters/open_struct.rb +19 -0
- data/lib/awesome_print/formatters/range_formatter.rb +11 -0
- data/lib/awesome_print/formatters/rational_formatter.rb +15 -0
- data/lib/awesome_print/formatters/set_formatter.rb +19 -0
- data/lib/awesome_print/formatters/simple_formatter.rb +10 -8
- data/lib/awesome_print/formatters/string_formatter.rb +14 -0
- data/lib/awesome_print/formatters/struct_formatter.rb +8 -6
- data/lib/awesome_print/formatters/symbol_formatter.rb +18 -0
- data/lib/awesome_print/formatters/true_class_formatter.rb +15 -0
- data/lib/awesome_print/formatters/unbound_method_formatter.rb +15 -0
- data/lib/awesome_print/inspector.rb +18 -17
- data/lib/awesome_print/limiter.rb +63 -0
- data/lib/awesome_print/registrar.rb +20 -0
- data/lib/awesome_print/version.rb +6 -6
- data/spec/formatters/array_spec.rb +251 -0
- data/spec/formatters/big_decimal_spec.rb +28 -0
- data/spec/formatters/class_spec.rb +91 -0
- data/spec/formatters/dir_file_spec.rb +43 -0
- data/spec/{ext → formatters/ext}/active_record_spec.rb +14 -58
- data/spec/{ext → formatters/ext}/active_support_spec.rb +7 -11
- data/spec/{ext → formatters/ext}/mongoid_spec.rb +2 -2
- data/spec/{ext → formatters/ext}/nokogiri_spec.rb +0 -0
- data/spec/formatters/hash_spec.rb +284 -0
- data/spec/{methods_spec.rb → formatters/methods_spec.rb} +3 -5
- data/spec/{objects_spec.rb → formatters/objects_spec.rb} +0 -0
- data/spec/{ext → formatters}/ostruct_spec.rb +1 -0
- data/spec/formatters/set_spec.rb +49 -0
- data/spec/formatters/struct_spec.rb +61 -0
- data/spec/merge_options_spec.rb +13 -0
- data/spec/misc_spec.rb +3 -10
- data/spec/spec_helper.rb +2 -9
- data/spec/support/ext_verifier.rb +0 -15
- data/spec/support/mongoid_versions.rb +4 -8
- data/spec/support/rails_versions.rb +2 -32
- metadata +100 -78
- data/awesome_print.gemspec +0 -33
- data/init.rb +0 -1
- data/lib/awesome_print/core_ext/method.rb +0 -21
- data/lib/awesome_print/ext/action_view.rb +0 -22
- data/lib/awesome_print/ext/active_record.rb +0 -103
- data/lib/awesome_print/ext/active_support.rb +0 -47
- data/lib/awesome_print/ext/mongo_mapper.rb +0 -124
- data/lib/awesome_print/ext/mongoid.rb +0 -67
- data/lib/awesome_print/ext/nobrainer.rb +0 -52
- data/lib/awesome_print/ext/nokogiri.rb +0 -45
- data/lib/awesome_print/ext/ostruct.rb +0 -27
- data/lib/awesome_print/ext/ripple.rb +0 -71
- data/lib/awesome_print/ext/sequel.rb +0 -58
- data/spec/ext/action_view_spec.rb +0 -21
- data/spec/ext/mongo_mapper_spec.rb +0 -261
- data/spec/ext/nobrainer_spec.rb +0 -59
- data/spec/ext/ripple_spec.rb +0 -48
- data/spec/formats_spec.rb +0 -779
- data/spec/support/active_record_data/3_2_diana.txt +0 -24
- data/spec/support/active_record_data/3_2_diana_legacy.txt +0 -24
- data/spec/support/active_record_data/3_2_multi.txt +0 -50
- data/spec/support/active_record_data/3_2_multi_legacy.txt +0 -50
- data/spec/support/active_record_data/4_0_diana.txt +0 -98
- data/spec/support/active_record_data/4_0_multi.txt +0 -198
- data/spec/support/active_record_data/4_1_diana.txt +0 -97
- data/spec/support/active_record_data/4_1_multi.txt +0 -196
- data/spec/support/active_record_data/4_2_diana.txt +0 -109
- data/spec/support/active_record_data/4_2_diana_legacy.txt +0 -109
- data/spec/support/active_record_data/4_2_multi.txt +0 -220
- data/spec/support/active_record_data/4_2_multi_legacy.txt +0 -220
- data/spec/support/active_record_data/6_0_diana.txt +0 -104
- data/spec/support/active_record_data/6_0_multi.txt +0 -210
- data/spec/support/active_record_data/6_1_diana.txt +0 -109
- data/spec/support/active_record_data/6_1_multi.txt +0 -220
@@ -3,16 +3,19 @@ require_relative 'base_formatter'
|
|
3
3
|
module AwesomePrint
|
4
4
|
module Formatters
|
5
5
|
class ArrayFormatter < BaseFormatter
|
6
|
-
attr_reader :array, :inspector, :options
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
formatter_for :array
|
8
|
+
|
9
|
+
def self.formattable?(object)
|
10
|
+
object.is_a?(Array)
|
12
11
|
end
|
13
12
|
|
14
|
-
|
15
|
-
|
13
|
+
attr_reader :array
|
14
|
+
|
15
|
+
def format(object)
|
16
|
+
@array = object
|
17
|
+
|
18
|
+
if object.length.zero?
|
16
19
|
'[]'
|
17
20
|
elsif methods_array?
|
18
21
|
methods_array
|
@@ -31,7 +34,7 @@ module AwesomePrint
|
|
31
34
|
if options[:multiline]
|
32
35
|
multiline_array
|
33
36
|
else
|
34
|
-
|
37
|
+
'[ ' << array.map { |item| inspector.awesome(item) }.join(', ') << ' ]'
|
35
38
|
end
|
36
39
|
end
|
37
40
|
|
@@ -1,67 +1,33 @@
|
|
1
1
|
require_relative '../colorize'
|
2
|
+
require_relative '../limiter'
|
3
|
+
require_relative '../registrar'
|
2
4
|
|
3
5
|
module AwesomePrint
|
4
6
|
module Formatters
|
5
7
|
class BaseFormatter
|
8
|
+
|
6
9
|
include Colorize
|
10
|
+
include Registrar
|
11
|
+
include Limiter
|
7
12
|
|
8
|
-
|
13
|
+
attr_reader :object, :inspector, :options
|
9
14
|
|
10
|
-
|
11
|
-
|
12
|
-
# ap ('a'..'z').to_a, :limit => 3
|
13
|
-
# [
|
14
|
-
# [ 0] "a",
|
15
|
-
# [ 1] .. [24],
|
16
|
-
# [25] "z"
|
17
|
-
# ]
|
18
|
-
#
|
19
|
-
# ap (1..100).to_a, :limit => true # Default limit is 7.
|
20
|
-
# [
|
21
|
-
# [ 0] 1,
|
22
|
-
# [ 1] 2,
|
23
|
-
# [ 2] 3,
|
24
|
-
# [ 3] .. [96],
|
25
|
-
# [97] 98,
|
26
|
-
# [98] 99,
|
27
|
-
# [99] 100
|
28
|
-
# ]
|
29
|
-
#------------------------------------------------------------------------------
|
30
|
-
def should_be_limited?
|
31
|
-
options[:limit] or (options[:limit].is_a?(Integer) and options[:limit] > 0)
|
15
|
+
def self.formattable?(obj)
|
16
|
+
false
|
32
17
|
end
|
33
18
|
|
34
|
-
def
|
35
|
-
|
36
|
-
when true
|
37
|
-
DEFAULT_LIMIT_SIZE
|
38
|
-
else
|
39
|
-
options[:limit]
|
40
|
-
end
|
19
|
+
def self.core?
|
20
|
+
false
|
41
21
|
end
|
42
22
|
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
data
|
47
|
-
else
|
48
|
-
# Calculate how many elements to be displayed above and below the separator.
|
49
|
-
head = limit / 2
|
50
|
-
tail = head - (limit - 1) % 2
|
51
|
-
|
52
|
-
# Add the proper elements to the temp array and format the separator.
|
53
|
-
temp = data[0, head] + [nil] + data[-tail, tail]
|
54
|
-
|
55
|
-
temp[head] = if is_hash
|
56
|
-
"#{indent}#{data[head].strip} .. #{data[data.length - tail - 1].strip}"
|
57
|
-
else
|
58
|
-
"#{indent}[#{head.to_s.rjust(width)}] .. [#{data.length - tail - 1}]"
|
59
|
-
end
|
60
|
-
|
61
|
-
temp
|
62
|
-
end
|
23
|
+
def initialize(inspector)
|
24
|
+
@inspector = inspector
|
25
|
+
@options = inspector.options
|
63
26
|
end
|
64
27
|
|
28
|
+
def format(object)
|
29
|
+
raise NotImplementedError
|
30
|
+
end
|
65
31
|
|
66
32
|
def method_tuple(method)
|
67
33
|
if method.respond_to?(:parameters) # Ruby 1.9.2+
|
@@ -90,7 +56,7 @@ module AwesomePrint
|
|
90
56
|
# #<Method: User(id: integer, username: string)(ActiveRecord::Base).current>
|
91
57
|
# #<UnboundMethod: Hello#world>
|
92
58
|
#
|
93
|
-
if method.to_s =~ /(Unbound)*Method: (
|
59
|
+
if method.to_s =~ /(Unbound)*Method: (.*)[#\.]/
|
94
60
|
unbound = $1 && '(unbound)'
|
95
61
|
klass = $2
|
96
62
|
if klass && klass =~ /(\(\w+:\s.*?\))/ # Is this ActiveRecord-style class?
|
@@ -104,13 +70,14 @@ module AwesomePrint
|
|
104
70
|
|
105
71
|
#
|
106
72
|
# Indentation related methods
|
73
|
+
# FIXME: move to Indentator?...
|
107
74
|
#-----------------------------------------
|
108
75
|
def indentation
|
109
76
|
inspector.current_indentation
|
110
77
|
end
|
111
78
|
|
112
|
-
def indented
|
113
|
-
inspector.increase_indentation(&
|
79
|
+
def indented
|
80
|
+
inspector.increase_indentation(&Proc.new)
|
114
81
|
end
|
115
82
|
|
116
83
|
def indent
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative 'base_formatter'
|
2
|
+
require 'bigdecimal'
|
3
|
+
|
4
|
+
module AwesomePrint
|
5
|
+
module Formatters
|
6
|
+
class BigdecimalFormatter < BaseFormatter
|
7
|
+
|
8
|
+
formatter_for :bigdecimal
|
9
|
+
|
10
|
+
def self.formattable?(object)
|
11
|
+
object.is_a?(BigDecimal)
|
12
|
+
end
|
13
|
+
|
14
|
+
def format(object)
|
15
|
+
colorize(object.to_s('F'), self.class.formatted_object_type)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -4,16 +4,15 @@ module AwesomePrint
|
|
4
4
|
module Formatters
|
5
5
|
class ClassFormatter < BaseFormatter
|
6
6
|
|
7
|
-
|
7
|
+
formatter_for :class
|
8
8
|
|
9
|
-
def
|
10
|
-
|
11
|
-
@inspector = inspector
|
12
|
-
@options = inspector.options
|
9
|
+
def self.formattable?(object)
|
10
|
+
object.is_a?(Class)
|
13
11
|
end
|
14
12
|
|
15
|
-
def format
|
13
|
+
def format(klass)
|
16
14
|
superclass = klass.superclass
|
15
|
+
|
17
16
|
if superclass
|
18
17
|
colorize("#{klass.inspect} < #{superclass}", :class)
|
19
18
|
else
|
@@ -5,15 +5,13 @@ module AwesomePrint
|
|
5
5
|
module Formatters
|
6
6
|
class DirFormatter < BaseFormatter
|
7
7
|
|
8
|
-
|
8
|
+
formatter_for :dir
|
9
9
|
|
10
|
-
def
|
11
|
-
|
12
|
-
@inspector = inspector
|
13
|
-
@options = inspector.options
|
10
|
+
def self.formattable?(object)
|
11
|
+
object.kind_of?(Dir)
|
14
12
|
end
|
15
13
|
|
16
|
-
def format
|
14
|
+
def format(dir)
|
17
15
|
ls = `ls -alF #{dir.path.shellescape}`
|
18
16
|
colorize(ls.empty? ? dir.inspect : "#{dir.inspect}\n#{ls.chop}", :dir)
|
19
17
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative '../base_formatter'
|
2
|
+
|
3
|
+
module AwesomePrint
|
4
|
+
module Formatters
|
5
|
+
class ActiveModelErrorFormatter < BaseFormatter
|
6
|
+
|
7
|
+
formatter_for :active_model_error
|
8
|
+
|
9
|
+
def self.formattable?(object)
|
10
|
+
defined?(::ActiveModel) && object.is_a?(::ActiveModel::Errors)
|
11
|
+
end
|
12
|
+
|
13
|
+
def format(object)
|
14
|
+
if @options[:raw]
|
15
|
+
return Formatters::ObjectFormatter.new(@inspector).format(object)
|
16
|
+
end
|
17
|
+
|
18
|
+
if !defined?(::ActiveSupport::OrderedHash)
|
19
|
+
return Formatters::SimpleFormatter.new(@inspector).format(object.inspect)
|
20
|
+
end
|
21
|
+
|
22
|
+
object_dump = object.marshal_dump.first
|
23
|
+
|
24
|
+
if object_dump.class.column_names != object_dump.attributes.keys
|
25
|
+
data = object_dump.attributes
|
26
|
+
else
|
27
|
+
data = object_dump.class.column_names.inject(::ActiveSupport::OrderedHash.new) do |hash, name|
|
28
|
+
|
29
|
+
if object_dump.has_attribute?(name) || object_dump.new_record?
|
30
|
+
value = object_dump.respond_to?(name) ? object_dump.send(name) : object_dump.read_attribute(name)
|
31
|
+
hash[name.to_sym] = value
|
32
|
+
end
|
33
|
+
hash
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
data.merge!({details: object.details, messages: object.messages})
|
38
|
+
|
39
|
+
"#{object} " << Formatters::HashFormatter.new(@inspector).format(data)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../base_formatter'
|
2
|
+
|
3
|
+
module AwesomePrint
|
4
|
+
module Formatters
|
5
|
+
class ActiveRecordAttributesetFormatter < BaseFormatter
|
6
|
+
|
7
|
+
formatter_for :active_record_attributeset
|
8
|
+
|
9
|
+
def self.core?
|
10
|
+
false
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.formattable?(object)
|
14
|
+
defined?(::ActiveRecord) &&
|
15
|
+
defined?(::ActiveRecord::AttributeSet) &&
|
16
|
+
object.is_a?(ActiveRecord::AttributeSet)
|
17
|
+
end
|
18
|
+
|
19
|
+
def format(object)
|
20
|
+
# simple formatter for now
|
21
|
+
Formatters::ObjectFormatter.new(@inspector).format(object)
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative '../base_formatter'
|
2
|
+
|
3
|
+
module AwesomePrint
|
4
|
+
module Formatters
|
5
|
+
class ActiveRecordClassFormatter < BaseFormatter
|
6
|
+
|
7
|
+
formatter_for :activerecord_base_class
|
8
|
+
|
9
|
+
def self.formattable?(object)
|
10
|
+
defined?(::ActiveRecord) && object.is_a?(Class) &&
|
11
|
+
(object.superclass == ::ActiveRecord::Base ||
|
12
|
+
object.ancestors.include?(::ActiveRecord::Base))
|
13
|
+
end
|
14
|
+
|
15
|
+
def format(object)
|
16
|
+
if @options[:raw] || object.to_s == "ActiveRecord::Base"
|
17
|
+
return Formatters::ObjectFormatter.new(@inspector).format(object)
|
18
|
+
end
|
19
|
+
|
20
|
+
if object.respond_to?(:abstract_class?) && object.abstract_class?
|
21
|
+
return Formatters::ClassFormatter.new(@inspector).format(object)
|
22
|
+
end
|
23
|
+
|
24
|
+
if !defined?(::ActiveSupport::OrderedHash) || !object.respond_to?(:columns)
|
25
|
+
return Formatters::SimpleFormatter.new(@inspector).format(object.inspect)
|
26
|
+
end
|
27
|
+
|
28
|
+
data = object.columns.inject(::ActiveSupport::OrderedHash.new) do |hash, c|
|
29
|
+
hash[c.name.to_sym] = c.type
|
30
|
+
hash
|
31
|
+
end
|
32
|
+
|
33
|
+
[
|
34
|
+
"class #{colorize(object.to_s, :class)}",
|
35
|
+
"< #{colorize(object.superclass.to_s, :class)}",
|
36
|
+
Formatters::HashFormatter.new(@inspector).format(data)
|
37
|
+
].join(' ')
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative '../base_formatter'
|
2
|
+
|
3
|
+
module AwesomePrint
|
4
|
+
module Formatters
|
5
|
+
class ActiveRecordInstanceFormatter < BaseFormatter
|
6
|
+
|
7
|
+
formatter_for :active_record_instance
|
8
|
+
|
9
|
+
def self.formattable?(object)
|
10
|
+
defined?(::ActiveRecord) && object.is_a?(::ActiveRecord::Base)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Format ActiveRecord instance object.
|
14
|
+
#
|
15
|
+
# NOTE: by default only instance attributes (i.e. columns) are shown. To format
|
16
|
+
# ActiveRecord instance as regular object showing its instance variables and
|
17
|
+
# accessors use :raw => true option:
|
18
|
+
#
|
19
|
+
# ap record, :raw => true
|
20
|
+
#
|
21
|
+
#------------------------------------------------------------------------------
|
22
|
+
def format(object)
|
23
|
+
if @options[:raw]
|
24
|
+
return Formatters::ObjectFormatter.new(@inspector).format(object)
|
25
|
+
end
|
26
|
+
|
27
|
+
if !defined?(::ActiveSupport::OrderedHash)
|
28
|
+
return Formatters::SimpleFormatter.new(@inspector).format(object.inspect)
|
29
|
+
end
|
30
|
+
|
31
|
+
if object.class.column_names != object.attributes.keys
|
32
|
+
data = object.attributes
|
33
|
+
else
|
34
|
+
data = object.class.column_names.inject(::ActiveSupport::OrderedHash.new) do |hash, name|
|
35
|
+
if object.has_attribute?(name) || object.new_record?
|
36
|
+
value = object.respond_to?(name) ? object.send(name) : object.read_attribute(name)
|
37
|
+
hash[name.to_sym] = value
|
38
|
+
end
|
39
|
+
hash
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
"#{object} " << Formatters::HashFormatter.new(@inspector).format(data)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative '../array_formatter'
|
2
|
+
|
3
|
+
module AwesomePrint
|
4
|
+
module Formatters
|
5
|
+
class ActiveRecordRelationFormatter < ArrayFormatter
|
6
|
+
|
7
|
+
formatter_for :active_record_relation
|
8
|
+
|
9
|
+
def self.core?
|
10
|
+
false
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.formattable?(object)
|
14
|
+
defined?(::ActiveRecord) && object.class.ancestors.include?(::ActiveRecord::Relation)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../base_formatter'
|
2
|
+
|
3
|
+
module AwesomePrint
|
4
|
+
module Formatters
|
5
|
+
class BsonObjectidFormatter < BaseFormatter
|
6
|
+
|
7
|
+
formatter_for :bson_objectid
|
8
|
+
|
9
|
+
def self.formattable?(object)
|
10
|
+
(defined?(::BSON) && object.is_a?(::BSON::ObjectId)) ||
|
11
|
+
(defined?(::Moped::BSON) && object.is_a?(::Moped::BSON::ObjectId))
|
12
|
+
end
|
13
|
+
|
14
|
+
def format(object)
|
15
|
+
colorize(object.inspect, self.class.formatted_object_type)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../hash_formatter'
|
2
|
+
|
3
|
+
module AwesomePrint
|
4
|
+
module Formatters
|
5
|
+
class HashWithIndifferentAccessFormatter < HashFormatter
|
6
|
+
|
7
|
+
formatter_for :hash_with_indifferent_access
|
8
|
+
|
9
|
+
def self.core?
|
10
|
+
false
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.formattable?(object)
|
14
|
+
defined?(::HashWithIndifferentAccess) &&
|
15
|
+
object.is_a?(::HashWithIndifferentAccess)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require_relative '../base_formatter'
|
2
|
+
|
3
|
+
module AwesomePrint
|
4
|
+
module Formatters
|
5
|
+
class MongoidDocument < BaseFormatter
|
6
|
+
|
7
|
+
formatter_for :mongoid_document
|
8
|
+
|
9
|
+
def self.formattable?(object)
|
10
|
+
defined?(::Mongoid::Document) &&
|
11
|
+
(object.class.ancestors.include?(::Mongoid::Document) ||
|
12
|
+
(object.respond_to?(:ancestors) && object.ancestors.include?(::Mongoid::Document)))
|
13
|
+
end
|
14
|
+
|
15
|
+
def format(object)
|
16
|
+
unless defined?(::ActiveSupport::OrderedHash)
|
17
|
+
return Formatters::SimpleFormatter.new(@inspector).format(object.inspect)
|
18
|
+
end
|
19
|
+
|
20
|
+
if object.is_a?(Class)
|
21
|
+
puts "[MGD] formatting #{object} as class..." if AwesomePrint.debug
|
22
|
+
# mongoid class
|
23
|
+
format_as_class(object)
|
24
|
+
else
|
25
|
+
puts "[MGD] formatting #{object} as instance..." if AwesomePrint.debug
|
26
|
+
format_as_instance(object)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def format_as_class(object)
|
33
|
+
data = object.fields.sort_by { |key| key }.inject(::ActiveSupport::OrderedHash.new) do |hash, c|
|
34
|
+
hash[c[1].name.to_sym] = (c[1].type || 'undefined').to_s.underscore.to_sym
|
35
|
+
hash
|
36
|
+
end
|
37
|
+
|
38
|
+
[
|
39
|
+
"class #{colorize(object.to_s, :class)}",
|
40
|
+
"< #{colorize(object.superclass.to_s, :class)}",
|
41
|
+
Formatters::HashFormatter.new(@inspector).format(data)
|
42
|
+
].join(' ')
|
43
|
+
end
|
44
|
+
|
45
|
+
def format_as_instance(object)
|
46
|
+
data = (object.attributes || {}).sort_by { |key| key }.inject(::ActiveSupport::OrderedHash.new) do |hash, c|
|
47
|
+
hash[c[0].to_sym] = c[1]
|
48
|
+
hash
|
49
|
+
end
|
50
|
+
|
51
|
+
data = { errors: object.errors, attributes: data } if !object.errors.empty?
|
52
|
+
|
53
|
+
"#{object} #{Formatters::HashFormatter.new(@inspector).format(data)}"
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|