lib/scim/kit/v2/attribute.rb in scim-kit-0.2.6 vs lib/scim/kit/v2/attribute.rb in scim-kit-0.2.7
- old
+ new
@@ -3,28 +3,51 @@
module Scim
module Kit
module V2
# Represents a SCIM Attribute
class Attribute
+ include ::ActiveModel::Validations
include Attributable
include Templatable
attr_reader :type
attr_reader :_value
+ validate :presence_of_value, if: proc { |x| x.type.required }
+ validate :inclusion_of_value, if: proc { |x| x.type.canonical_values }
+ validate :validate_type
+
def initialize(type:, value: nil)
@type = type
@_value = value
define_attributes_for(type.attributes)
end
+ def _assign(new_value, coerce: true)
+ @_value = coerce ? type.coerce(new_value) : new_value
+ end
+
def _value=(new_value)
- @_value = type.coerce(new_value)
+ _assign(new_value, coerce: true)
+ end
- if type.canonical_values &&
- !type.canonical_values.empty? &&
- !type.canonical_values.include?(new_value)
- raise ArgumentError, new_value
- end
+ private
+
+ def presence_of_value
+ return unless type.required && _value.blank?
+
+ errors.add(type.name, I18n.t('errors.messages.blank'))
+ end
+
+ def inclusion_of_value
+ return if type.canonical_values.include?(_value)
+
+ errors.add(type.name, I18n.t('errors.messages.inclusion'))
+ end
+
+ def validate_type
+ return if type.valid?(_value)
+
+ errors.add(type.name, I18n.t('errors.messages.invalid'))
end
end
end
end
end