Sha256: 6ca3ae1f3b84d885cc5a64e3e1b0292c67eb35e73a253d47949891eeb84daee3

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 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
        attr_reader :raw_attributes

        validate :schema_validations

        def initialize(schemas:, location: nil, attributes: {})
          @meta = Meta.new(schemas[0].name, location)
          @meta.disable_timestamps
          @schemas = schemas
          @raw_attributes = attributes
          schemas.each do |schema|
            define_attributes_for(self, schema.attributes)
          end
          assign_attributes(attributes)
          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

1 entries across 1 versions & 1 rubygems

Version Path
scim-kit-0.2.14 lib/scim/kit/v2/resource.rb