Sha256: 6bb68493ae4ca355d6275c7bd36e3847adb6c660cde727c428f06e53bec074ac

Contents?: true

Size: 929 Bytes

Versions: 2

Compression:

Stored size: 929 Bytes

Contents

# frozen_string_literal: true

# Parse PATCH request
class ScimPatch
  attr_accessor :operations

  def initialize(params, mutable_attributes_schema)
    # FIXME: raise proper error.
    unless params['schemas'] == ['urn:ietf:params:scim:api:messages:2.0:PatchOp']
      raise StandardError
    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

2 entries across 2 versions & 1 rubygems

Version Path
scimaenaga-0.6.2 app/libraries/scim_patch.rb
scimaenaga-0.6.1 app/libraries/scim_patch.rb