Comparing changes
v0.2.4
→
v0.2.5
7 commits
9 files changed
Commits
Changed files (9)
lib
spec
scim
kit
lib/scim/kit/v2/templates/resource.json.jbuilder
@@ -1,12 +1,12 @@
# frozen_string_literal: true
json.key_format! camelize: :lower
-json.schemas schemas.map(&:id)
-json.id id
-json.external_id external_id
json.meta do
render meta, json: json
end
+json.schemas schemas.map(&:id)
+json.id id
+json.external_id external_id
schemas.each do |schema|
if schema.core?
schema.attributes.each do |type|
lib/scim/kit/v2/templates/schema.json.jbuilder
@@ -1,13 +1,12 @@
# frozen_string_literal: true
json.key_format! camelize: :lower
+json.meta do
+ render meta, json: json
+end
json.id id
json.name name
json.description description
-json.meta do
- json.resource_type 'Schema'
- json.location location
-end
json.attributes attributes do |attribute|
render attribute, json: json
end
lib/scim/kit/v2/templates/service_provider_configuration.json.jbuilder
@@ -1,6 +1,9 @@
# frozen_string_literal: true
json.key_format! camelize: :lower
+json.meta do
+ render meta, json: json
+end
json.schemas [Scim::Kit::V2::Schemas::SERVICE_PROVIDER_CONFIGURATION]
json.documentation_uri documentation_uri
json.patch do
@@ -24,6 +27,3 @@ end
json.authentication_schemes authentication_schemes do |authentication_scheme|
render authentication_scheme, json: json
end
-json.meta do
- render meta, json: json
-end
lib/scim/kit/v2/configuration.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+module Scim
+ module Kit
+ module V2
+ # Represents an application SCIM configuration.
+ class Configuration
+ # @private
+ class Builder
+ def initialize
+ @resource_types = {}
+ @schemas = {}
+ end
+
+ def service_provider_configuration(location:)
+ @sp_config = ServiceProviderConfiguration.new(location: location)
+ yield @sp_config
+ end
+
+ def resource_type(id:, location:)
+ @resource_types[id] ||= ResourceType.new(location: location)
+ @resource_types[id].id = id
+ yield @resource_types[id]
+ end
+
+ def schema(id:, name:, location:)
+ @schemas[id] ||= Schema.new(id: id, name: name, location: location)
+ yield @schemas[id]
+ end
+
+ def apply_to(configuration)
+ configuration.service_provider_configuration = @sp_config
+ configuration.resource_types = @resource_types
+ configuration.schemas = @schemas
+ end
+ end
+
+ attr_accessor :service_provider_configuration
+ attr_accessor :resource_types
+ attr_accessor :schemas
+
+ def initialize
+ builder = Builder.new
+ yield builder if block_given?
+ builder.apply_to(self)
+ end
+ end
+ end
+ end
+end
lib/scim/kit/v2/schema.rb
@@ -7,13 +7,14 @@ module Scim
class Schema
include Templatable
- attr_reader :id, :name, :location, :attributes
+ attr_reader :id, :name, :attributes, :meta
attr_accessor :description
def initialize(id:, name:, location:)
@id = id
@name = name
- @location = location
+ @meta = Meta.new('Schema', location)
+ @meta.created = @meta.last_modified = @meta.version = nil
@attributes = []
end
lib/scim/kit/v2.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+require 'scim/kit/v2/attributable'
+require 'scim/kit/v2/attribute'
+require 'scim/kit/v2/attribute_type'
+require 'scim/kit/v2/authentication_scheme'
+require 'scim/kit/v2/configuration'
+require 'scim/kit/v2/messages'
+require 'scim/kit/v2/meta'
+require 'scim/kit/v2/mutability'
+require 'scim/kit/v2/resource'
+require 'scim/kit/v2/resource_type'
+require 'scim/kit/v2/returned'
+require 'scim/kit/v2/schema'
+require 'scim/kit/v2/schemas'
+require 'scim/kit/v2/service_provider_configuration'
+require 'scim/kit/v2/supportable'
+require 'scim/kit/v2/uniqueness'
+
+module Scim
+ module Kit
+ # Version 2 of the SCIM RFC https://tools.ietf.org/html/rfc7644
+ module V2
+ class << self
+ def configuration
+ @configuration ||= ::Scim::Kit::V2::Configuration.new
+ end
+
+ def configure
+ builder = ::Scim::Kit::V2::Configuration::Builder.new
+ yield builder
+ builder.apply_to(configuration)
+ end
+ end
+ end
+ end
+end
lib/scim/kit/version.rb
@@ -2,6 +2,6 @@
module Scim
module Kit
- VERSION = '0.2.4'
+ VERSION = '0.2.5'
end
end
lib/scim/kit.rb
@@ -7,24 +7,9 @@ require 'active_support/core_ext/hash/indifferent_access'
require 'scim/kit/dynamic_attributes'
require 'scim/kit/templatable'
require 'scim/kit/template'
+require 'scim/kit/v2'
require 'scim/kit/version'
-require 'scim/kit/v2/attributable'
-require 'scim/kit/v2/attribute'
-require 'scim/kit/v2/attribute_type'
-require 'scim/kit/v2/authentication_scheme'
-require 'scim/kit/v2/messages'
-require 'scim/kit/v2/meta'
-require 'scim/kit/v2/mutability'
-require 'scim/kit/v2/resource'
-require 'scim/kit/v2/resource_type'
-require 'scim/kit/v2/returned'
-require 'scim/kit/v2/schema'
-require 'scim/kit/v2/schemas'
-require 'scim/kit/v2/service_provider_configuration'
-require 'scim/kit/v2/supportable'
-require 'scim/kit/v2/uniqueness'
-
module Scim
module Kit
class Error < StandardError; end
spec/scim/kit/v2/configuration_spec.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+RSpec.describe Scim::Kit::V2::Configuration do
+ subject do
+ described_class.new do |x|
+ x.service_provider_configuration(location: sp_location) do |y|
+ y.add_authentication(:oauthbearertoken)
+ y.change_password.supported = true
+ end
+ x.resource_type(id: 'User', location: user_type_location) do |y|
+ y.schema = Scim::Kit::V2::Schemas::USER
+ end
+ x.resource_type(id: 'Group', location: group_type_location) do |y|
+ y.schema = Scim::Kit::V2::Schemas::GROUP
+ end
+ x.schema(id: 'User', name: 'User', location: user_schema_location) do |y|
+ y.add_attribute(name: 'userName')
+ end
+ end
+ end
+
+ let(:sp_location) { FFaker::Internet.uri('https') }
+ let(:user_type_location) { FFaker::Internet.uri('https') }
+ let(:group_type_location) { FFaker::Internet.uri('https') }
+ let(:user_schema_location) { FFaker::Internet.uri('https') }
+
+ specify { expect(subject.service_provider_configuration.meta.location).to eql(sp_location) }
+ specify { expect(subject.service_provider_configuration.authentication_schemes[0].type).to be(:oauthbearertoken) }
+ specify { expect(subject.service_provider_configuration.change_password.supported).to be(true) }
+
+ specify { expect(subject.resource_types['User'].schema).to eql(Scim::Kit::V2::Schemas::USER) }
+ specify { expect(subject.resource_types['User'].id).to eql('User') }
+ specify { expect(subject.resource_types['Group'].schema).to eql(Scim::Kit::V2::Schemas::GROUP) }
+ specify { expect(subject.resource_types['Group'].id).to eql('Group') }
+
+ specify { expect(subject.schemas['User'].id).to eql('User') }
+ specify { expect(subject.schemas['User'].name).to eql('User') }
+ specify { expect(subject.schemas['User'].meta.location).to eql(user_schema_location) }
+ specify { expect(subject.schemas['User'].attributes[0].name).to eql('user_name') }
+end