Sha256: b00554c68525e229c0889ff3b4a63ccc484320c261f268de109d65d0c6a7aa3d

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true

class ScimPatchOperationUser < ScimPatchOperation

  def save(model)
    case @op
    when 'add', 'replace'
      model.attributes = { @path_sp => @value }
    when 'remove'
      model.attributes = { @path_sp => nil }
    end
  end

  private

    def validate(_op, _path, value)
      if value.instance_of? Array
        raise ScimRails::ExceptionHandler::UnsupportedPatchRequest
      end

      return
    end

    def path_scim_to_path_sp(path_scim)
      # path_scim example1:
      # {
      #   attribute: 'emails',
      #   filter: {
      #     attribute: 'type',
      #     operator: 'eq',
      #     parameter: 'work'
      #   },
      #   rest_path: ['value']
      # }
      #
      # path_scim example2:
      # {
      #   attribute: 'name',
      #   filter: nil,
      #   rest_path: ['givenName']
      # }
      dig_keys = [path_scim[:attribute].to_sym]

      # Library ignores filter conditions ([type eq "work"])
      dig_keys << 0 if path_scim[:attribute] == 'emails'

      dig_keys.concat(path_scim[:rest_path].map(&:to_sym))

      # *dig_keys example: emails, 0, value
      ScimRails.config.mutable_user_attributes_schema.dig(*dig_keys)
    end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
scimaenaga-0.9.0 app/libraries/scim_patch_operation_user.rb
scimaenaga-0.8.0 app/libraries/scim_patch_operation_user.rb