class Zendesk2::UpdateUser

Public Instance Methods

mock() click to toggle source
# File lib/zendesk2/update_user.rb, line 17
def mock
  update_params = user_params

  email = update_params['email']

  other_users = cistern.data[:users].dup
  other_users.delete(user_id)

  external_id = update_params['external_id']

  if external_id && other_users.values.find { |o| o['external_id'].to_s.casecmp(external_id.to_s.downcase).zero? }
    error!(:invalid, details: { 'name' => [{ 'description' => 'External has already been taken' }] })
  end

  existing_identity = cistern.data[:identities].values.find { |i| i['type'] == 'email' && i['value'] == email }

  if !email
    # nvm
  elsif existing_identity
    # email not allowed to conflict across users
    existing_identity['user_id'] != user_id &&
      error!(:invalid, details: { 'email' => [{
               'description' => "Email #{params['email']} is already being used by another user",
             },], })
  else
    add_user_identity(email)
  end

  mock_response('user' => find!(:users, user_id).merge!(update_params))
end
user_id() click to toggle source
# File lib/zendesk2/update_user.rb, line 13
def user_id
  @_user_id ||= params.fetch('user').fetch('id').to_i
end
user_params() click to toggle source
# File lib/zendesk2/update_user.rb, line 9
def user_params
  Cistern::Hash.slice(params.fetch('user'), *Zendesk2::CreateUser.accepted_attributes)
end

Private Instance Methods

add_user_identity(email) click to toggle source
# File lib/zendesk2/update_user.rb, line 50
def add_user_identity(email)
  # add a new identity
  user_identity_id = cistern.serial_id

  user_identity = {
    'id'         => user_identity_id,
    'url'        => url_for("/users/#{user_id}/identities/#{user_identity_id}.json"),
    'created_at' => timestamp,
    'updated_at' => timestamp,
    'type'       => 'email',
    'value'      => email,
    'verified'   => false,
    'primary'    => false,
    'user_id'    => user_id,
  }

  cistern.data[:identities][user_identity_id] = user_identity
end