Commit bdca426
Changed files (2)
lib
scim
kit
v2
spec
scim
kit
lib/scim/kit/v2/attribute.rb
@@ -3,6 +3,24 @@
module Scim
module Kit
module V2
+ class UnknownAttribute
+ include ::ActiveModel::Validations
+ validate :unknown
+ attr_reader :name
+
+ def initialize(name)
+ @name = name
+ end
+
+ def _assign(*args)
+ valid?
+ end
+
+ def unknown
+ errors.add(name, I18n.t('errors.messages.invalid'))
+ end
+ end
+
# Represents a SCIM Attribute
class Attribute
include ::ActiveModel::Validations
@@ -75,11 +93,27 @@ module Scim
end
def validate_complex
- each do |attribute|
- errors.copy!(attribute.errors) unless attribute.valid?
+ if _type.multi_valued
+ each_value do |hash|
+ hash.each do |key, value|
+ attribute = attribute_for(key) || UnknownAttribute.new(key)
+ attribute._assign(value)
+ errors.copy!(attribute.errors) unless attribute.valid?
+ end
+ end
+ else
+ each do |attribute|
+ errors.copy!(attribute.errors) unless attribute.valid?
+ end
end
end
+ def each_value(&block)
+ return unless _type.multi_valued
+
+ _value.each(&block)
+ end
+
def validate_multiple
return unless _value.respond_to?(:to_a)
spec/scim/kit/v2/attribute_spec.rb
@@ -270,6 +270,7 @@ RSpec.describe Scim::Kit::V2::Attribute do
end
specify { expect(subject).not_to be_valid }
+ specify { expect(subject.errors[:blah]).to be_present }
specify { expect(subject.errors[:emails]).to be_present }
end
end