74 lines
2.1 KiB
Ruby
74 lines
2.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Nokogiri
|
|
module XML
|
|
# :nodoc: all
|
|
module PP
|
|
module Node
|
|
COLLECTIONS = [:attribute_nodes, :children]
|
|
|
|
def inspect
|
|
# handle the case where an exception is thrown during object construction
|
|
if respond_to?(:data_ptr?) && !data_ptr?
|
|
return "#<#{self.class}:#{format("0x%x", object_id)} (no data)>"
|
|
end
|
|
|
|
attributes = inspect_attributes.reject do |x|
|
|
attribute = send(x)
|
|
!attribute || (attribute.respond_to?(:empty?) && attribute.empty?)
|
|
rescue NoMethodError
|
|
true
|
|
end
|
|
attributes = if inspect_attributes.length == 1
|
|
send(attributes.first).inspect
|
|
else
|
|
attributes.map do |attribute|
|
|
"#{attribute}=#{send(attribute).inspect}"
|
|
end.join(" ")
|
|
end
|
|
"#<#{self.class}:#{format("0x%x", object_id)} #{attributes}>"
|
|
end
|
|
|
|
def pretty_print(pp)
|
|
nice_name = self.class.name.split("::").last
|
|
pp.group(2, "#(#{nice_name}:#{format("0x%x", object_id)} {", "})") do
|
|
pp.breakable
|
|
|
|
attrs = inspect_attributes.filter_map do |t|
|
|
[t, send(t)] if respond_to?(t)
|
|
end.find_all do |x|
|
|
if x.last
|
|
if COLLECTIONS.include?(x.first)
|
|
!x.last.empty?
|
|
else
|
|
true
|
|
end
|
|
end
|
|
end
|
|
|
|
if inspect_attributes.length == 1
|
|
pp.pp(attrs.first.last)
|
|
else
|
|
pp.seplist(attrs) do |v|
|
|
if COLLECTIONS.include?(v.first)
|
|
pp.group(2, "#{v.first} = [", "]") do
|
|
pp.breakable
|
|
pp.seplist(v.last) do |item|
|
|
pp.pp(item)
|
|
end
|
|
end
|
|
else
|
|
pp.text("#{v.first} = ")
|
|
pp.pp(v.last)
|
|
end
|
|
end
|
|
end
|
|
|
|
pp.breakable
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|