Comparing changes
v0.2.10
→
v0.2.11
4 commits
6 files changed
Commits
Changed files (6)
lib
scim
spec
scim
lib/scim/kit/v2/attributable.rb
@@ -8,7 +8,7 @@ module Scim
attr_reader :dynamic_attributes
def define_attributes_for(resource, types)
- @dynamic_attributes = {}.with_indifferent_access
+ @dynamic_attributes ||= {}.with_indifferent_access
types.each { |x| attribute(x, resource) }
end
@@ -26,7 +26,8 @@ module Scim
end
def write_attribute(name, value)
- attribute_for(name)._value = value
+ attribute = attribute_for(name)
+ attribute._value = value
end
def create_module_for(type)
lib/scim/kit/v2/attribute.rb
@@ -32,15 +32,27 @@ module Scim
end
def renderable?
- return false if read_only? && _resource.mode?(:client)
- return false if write_only? &&
- (_resource.mode?(:server) || _value.blank?)
+ return false if server_only?
+ return false if client_only?
+ return false if restricted?
true
end
private
+ def server_only?
+ read_only? && _resource.mode?(:client)
+ end
+
+ def client_only?
+ write_only? && (_resource.mode?(:server) || _value.blank?)
+ end
+
+ def restricted?
+ _resource.mode?(:server) && type.returned == Returned::NEVER
+ end
+
def presence_of_value
return unless type.required && _value.blank?
lib/scim/kit/version.rb
@@ -2,6 +2,6 @@
module Scim
module Kit
- VERSION = '0.2.10'
+ VERSION = '0.2.11'
end
end
spec/scim/kit/v2/attribute_spec.rb
@@ -278,6 +278,12 @@ RSpec.describe Scim::Kit::V2::Attribute do
specify { expect(subject).not_to be_renderable }
end
+
+ context 'when returned type is `never`' do
+ before { type.returned = :never }
+
+ specify { expect(subject).not_to be_renderable }
+ end
end
context 'when the resource is in client mode' do
spec/scim/kit/v2/resource_spec.rb
@@ -109,12 +109,16 @@ RSpec.describe Scim::Kit::V2::Resource do
let(:extension_id) { 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User' }
before do
- extension.add_attribute(name: :department)
- subject.department = 'voltron'
+ schema.add_attribute(name: :country)
+ extension.add_attribute(name: :province)
+ subject.country = 'canada'
+ subject.province = 'alberta'
end
- specify { expect(subject.department).to eql('voltron') }
- specify { expect(subject.as_json[extension_id][:department]).to eql('voltron') }
+ specify { expect(subject.country).to eql('canada') }
+ specify { expect(subject.province).to eql('alberta') }
+ specify { expect(subject.as_json[:country]).to eql('canada') }
+ specify { expect(subject.as_json[extension_id][:province]).to eql('alberta') }
end
describe '#valid?' do
scim-kit.gemspec
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
File.basename(file)
end
spec.require_paths = ['lib']
+ spec.required_ruby_version = '>= 2.5.0'
spec.add_dependency 'activemodel', '>= 5.2.0'
spec.add_dependency 'tilt', '~> 2.0'