File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -301,10 +301,11 @@ def errors
301301 end
302302
303303 class ValidationErrors < Error
304- attr_reader :error_messages , :resource_relationships
304+ attr_reader :error_messages , :error_metadata , : resource_relationships
305305
306306 def initialize ( resource )
307307 @error_messages = resource . model_error_messages
308+ @error_metadata = resource . validation_error_metadata
308309 @resource_relationships = resource . class . _relationships . keys
309310 @key_formatter = JSONAPI . configuration . key_formatter
310311 end
@@ -326,7 +327,13 @@ def json_api_error(attr_key, message)
326327 status : :unprocessable_entity ,
327328 title : message ,
328329 detail : "#{ format_key ( attr_key ) } - #{ message } " ,
329- source : { pointer : pointer ( attr_key ) } )
330+ source : { pointer : pointer ( attr_key ) } ,
331+ meta : metadata_for ( attr_key , message ) )
332+ end
333+
334+ def metadata_for ( attr_key , message )
335+ return if error_metadata . nil?
336+ error_metadata [ attr_key ] ? error_metadata [ attr_key ] [ message ] : nil
330337 end
331338
332339 def pointer ( attr_or_relationship_name )
Original file line number Diff line number Diff line change @@ -121,6 +121,29 @@ def model_error_messages
121121 _model . errors . messages
122122 end
123123
124+ # Add metadata to validation error objects.
125+ #
126+ # Suppose `model_error_messages` returned the following error messages
127+ # hash:
128+ #
129+ # {password: ["too_short", "format"]}
130+ #
131+ # Then to add data to the validation error `validation_error_metadata`
132+ # could return:
133+ #
134+ # {
135+ # password: {
136+ # "too_short": {"minimum_length" => 6},
137+ # "format": {"requirement" => "must contain letters and numbers"}
138+ # }
139+ # }
140+ #
141+ # The specified metadata is then be merged into the validation error
142+ # object.
143+ def validation_error_metadata
144+ { }
145+ end
146+
124147 # Override this to return resource level meta data
125148 # must return a hash, and if the hash is empty the meta section will not be serialized with the resource
126149 # 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