File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -355,10 +355,11 @@ def errors
355355 end
356356
357357 class ValidationErrors < Error
358- attr_reader :error_messages , :resource_relationships
358+ attr_reader :error_messages , :error_metadata , : resource_relationships
359359
360360 def initialize ( resource )
361361 @error_messages = resource . model_error_messages
362+ @error_metadata = resource . validation_error_metadata
362363 @resource_relationships = resource . class . _relationships . keys
363364 @key_formatter = JSONAPI . configuration . key_formatter
364365 end
@@ -380,7 +381,13 @@ def json_api_error(attr_key, message)
380381 status : :unprocessable_entity ,
381382 title : message ,
382383 detail : "#{ format_key ( attr_key ) } - #{ message } " ,
383- source : { pointer : pointer ( attr_key ) } )
384+ source : { pointer : pointer ( attr_key ) } ,
385+ meta : metadata_for ( attr_key , message ) )
386+ end
387+
388+ def metadata_for ( attr_key , message )
389+ return if error_metadata . nil?
390+ error_metadata [ attr_key ] ? error_metadata [ attr_key ] [ message ] : nil
384391 end
385392
386393 def pointer ( attr_or_relationship_name )
Original file line number Diff line number Diff line change @@ -120,6 +120,29 @@ def model_error_messages
120120 _model . errors . messages
121121 end
122122
123+ # Add metadata to validation error objects.
124+ #
125+ # Suppose `model_error_messages` returned the following error messages
126+ # hash:
127+ #
128+ # {password: ["too_short", "format"]}
129+ #
130+ # Then to add data to the validation error `validation_error_metadata`
131+ # could return:
132+ #
133+ # {
134+ # password: {
135+ # "too_short": {"minimum_length" => 6},
136+ # "format": {"requirement" => "must contain letters and numbers"}
137+ # }
138+ # }
139+ #
140+ # The specified metadata is then be merged into the validation error
141+ # object.
142+ def validation_error_metadata
143+ { }
144+ end
145+
123146 # Override this to return resource level meta data
124147 # must return a hash, and if the hash is empty the meta section will not be serialized with the resource
125148 # meta keys will be not be formatted with the key formatter for the serializer by default. They can however use the
You can’t perform that action at this time.
0 commit comments