From a2c7588255c1ea4ab50dcad1eba229152de95626 Mon Sep 17 00:00:00 2001 From: Daniel Shin Date: Sun, 26 Feb 2017 15:02:51 -0700 Subject: [PATCH] add active model error casting --- lib/awesome_print/ext/active_record.rb | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/awesome_print/ext/active_record.rb b/lib/awesome_print/ext/active_record.rb index 1516c0b..2a4a362 100644 --- a/lib/awesome_print/ext/active_record.rb +++ b/lib/awesome_print/ext/active_record.rb @@ -19,6 +19,8 @@ module AwesomePrint if object.is_a?(::ActiveRecord::Base) cast = :active_record_instance + elsif object.is_a?(::ActiveModel::Errors) + cast = :active_model_error elsif object.is_a?(Class) && object.ancestors.include?(::ActiveRecord::Base) cast = :active_record_class elsif type == :activerecord_relation || object.class.ancestors.include?(::ActiveRecord::Relation) @@ -72,6 +74,29 @@ module AwesomePrint [name, base, awesome_hash(data)].join(' ') end + + # Format ActiveModel error object. + #------------------------------------------------------------------------------ + def awesome_active_model_error(object) + return object.inspect if !defined?(::ActiveSupport::OrderedHash) + return awesome_object(object) if @options[:raw] + + object_dump = object.marshal_dump.first + data = if object_dump.class.column_names != object_dump.attributes.keys + object_dump.attributes + else + object_dump.class.column_names.inject(::ActiveSupport::OrderedHash.new) do |hash, name| + if object_dump.has_attribute?(name) || object_dump.new_record? + value = object_dump.respond_to?(name) ? object_dump.send(name) : object_dump.read_attribute(name) + hash[name.to_sym] = value + end + hash + end + end + + data.merge!({details: object.details, messages: object.messages}) + "#{object} " << awesome_hash(data) + end end end