awesome_print 1.9.2 → 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.
- 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
|
+
|