Commit 4640818

mo <mo.khan@gmail.com>
2018-12-24 20:03:23
generate a simple schema.
1 parent b924d28
Changed files (2)
lib
scim
spec
scim
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