diff options
author | Rafael França <rafaelmfranca@gmail.com> | 2019-04-24 16:16:00 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-24 16:16:00 -0400 |
commit | d4d145a6795ee7f461ef86a07e73a1f13fdb8574 (patch) | |
tree | ed4780a32c4e78d9890db43e02499e1b2e25d907 /activemodel/lib/active_model/nested_error.rb | |
parent | 9834be65655e8552d25633b7376ab0654a23875d (diff) | |
parent | 5e24c333505c3bab3c85d834ac985281f141709f (diff) | |
download | rails-d4d145a6795ee7f461ef86a07e73a1f13fdb8574.tar.gz rails-d4d145a6795ee7f461ef86a07e73a1f13fdb8574.tar.bz2 rails-d4d145a6795ee7f461ef86a07e73a1f13fdb8574.zip |
Merge pull request #32313 from lulalala/model_error_as_object
Model error as object
Diffstat (limited to 'activemodel/lib/active_model/nested_error.rb')
-rw-r--r-- | activemodel/lib/active_model/nested_error.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/activemodel/lib/active_model/nested_error.rb b/activemodel/lib/active_model/nested_error.rb new file mode 100644 index 0000000000..93348c7771 --- /dev/null +++ b/activemodel/lib/active_model/nested_error.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require "active_model/error" +require "forwardable" + +module ActiveModel + # Represents one single error + # @!attribute [r] base + # @return [ActiveModel::Base] the object which the error belongs to + # @!attribute [r] attribute + # @return [Symbol] attribute of the object which the error belongs to + # @!attribute [r] type + # @return [Symbol] error's type + # @!attribute [r] options + # @return [Hash] additional options + # @!attribute [r] inner_error + # @return [Error] inner error + class NestedError < Error + def initialize(base, inner_error, override_options = {}) + @base = base + @inner_error = inner_error + @attribute = override_options.fetch(:attribute) { inner_error.attribute } + @type = override_options.fetch(:type) { inner_error.type } + @raw_type = inner_error.raw_type + @options = inner_error.options + end + + attr_reader :inner_error + + extend Forwardable + def_delegators :@inner_error, :message + end +end |