Commit 4640818
Changed files (2)
lib
scim
kit
v2
spec
scim
kit
lib/scim/kit/v2/schema.rb
@@ -3,11 +3,37 @@
module Scim
module Kit
module V2
- module Schema
+ # Represents a SCIM Schema
+ class Schema
ERROR = 'urn:ietf:params:scim:api:messages:2.0:Error'
GROUP = 'urn:ietf:params:scim:schemas:core:2.0:Group'
RESOURCE_TYPE = 'urn:ietf:params:scim:schemas:core:2.0:ResourceType'
USER = 'urn:ietf:params:scim:schemas:core:2.0:User'
+
+ attr_reader :id, :name, :location
+ attr_accessor :description
+
+ def initialize(id:, name:, location:)
+ @id = id
+ @name = name
+ @location = location
+ end
+
+ def to_json
+ JSON.generate(to_h)
+ end
+
+ def to_h
+ {
+ id: id,
+ name: name,
+ description: description,
+ meta: {
+ location: location,
+ resourceType: 'Schema'
+ }
+ }
+ end
end
end
end
spec/scim/kit/v2/schema_spec.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+RSpec.describe Scim::Kit::V2::Schema do
+ subject { described_class.new(id: id, name: name, location: location) }
+
+ let(:id) { 'Group' }
+ let(:name) { 'Group' }
+ let(:location) { FFaker::Internet.uri('https') }
+ let(:description) { FFaker::Name.name }
+ let(:result) { JSON.parse(subject.to_json, symbolize_names: true) }
+
+ before do
+ subject.description = description
+ end
+
+ specify { expect(result[:id]).to eql(id) }
+ specify { expect(result[:name]).to eql(name) }
+ specify { expect(result[:description]).to eql(description) }
+ specify { expect(result[:meta][:resourceType]).to eql('Schema') }
+ specify { expect(result[:meta][:location]).to eql(location) }
+end