Sha256: caf28b77f1965f1c921c85509cbc404ca387786fb6cfe203a8e8718987735ae7

Contents?: true

Size: 935 Bytes

Versions: 1

Compression:

Stored size: 935 Bytes

Contents

# frozen_string_literal: true

# Parse PATCH request
class ScimPatch
  attr_accessor :operations

  def initialize(params, mutable_attributes_schema)
    unless params['schemas'] == ['urn:ietf:params:scim:api:messages:2.0:PatchOp']
      raise ScimRails::ExceptionHandler::UnsupportedPatchRequest
    end
    if params['Operations'].nil?
      raise ScimRails::ExceptionHandler::UnsupportedPatchRequest
    end

    @operations = params['Operations'].map do |operation|
      ScimPatchOperation.new(operation['op'], operation['path'], operation['value'],
                             mutable_attributes_schema)
    end
  end

  def save(model)
    model.transaction do
      @operations.each do |operation|
        operation.save(model)
      end
      model.save! if model.changed?
    end
  rescue ActiveRecord::RecordNotFound
    raise
  rescue StandardError
    raise ScimRails::ExceptionHandler::UnsupportedPatchRequest
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
scimaenaga-0.7.0 app/libraries/scim_patch.rb