Sha256: 228ff134836809167629eceda3f2240de4d21ebd8ecb8647395102c9a982ce5c

Contents?: true

Size: 1.26 KB

Versions: 3

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

module Scim
  module Kit
    module V2
      # Represents a SCIM Resource
      class Resource
        include ::ActiveModel::Validations
        include Attributable
        include Templatable

        attr_accessor :id, :external_id
        attr_reader :meta
        attr_reader :schemas

        validates_presence_of :id
        validate :schema_validations

        def initialize(schemas:, location: nil)
          @meta = Meta.new(schemas[0].name, location)
          @meta.disable_timestamps
          @schemas = schemas
          schemas.each do |schema|
            define_attributes_for(self, schema.attributes)
          end
          yield self if block_given?
        end

        def mode?(type)
          case type.to_sym
          when :server
            meta&.location
          else
            meta&.location.nil?
          end
        end

        private

        def schema_validations
          schemas.each do |schema|
            schema.attributes.each do |type|
              validate_attribute(type)
            end
          end
        end

        def validate_attribute(type)
          attribute = attribute_for(type.name)
          errors.copy!(attribute.errors) unless attribute.valid?
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
scim-kit-0.2.12 lib/scim/kit/v2/resource.rb
scim-kit-0.2.11 lib/scim/kit/v2/resource.rb
scim-kit-0.2.10 lib/scim/kit/v2/resource.rb