module Mongoid::Token::Collisions

Public Instance Methods

is_duplicate_token_error?(err, document, field_name) click to toggle source
# File lib/mongoid/token/collisions.rb, line 26
def is_duplicate_token_error?(err, document, field_name)
  err.message =~ /(11000|11001)/ &&
    err.message =~ /dup key/ &&
    err.message =~ /"#{document.send(field_name)}"/
end
raise_collision_retries_exceeded_error(field_name, retry_count) click to toggle source
# File lib/mongoid/token/collisions.rb, line 21
def raise_collision_retries_exceeded_error(field_name, retry_count)
  Rails.logger.warn "[Mongoid::Token] Warning: Maximum token generation retries (#{retry_count}) exceeded on `#{field_name}'." if defined?(Rails)
  raise Mongoid::Token::CollisionRetriesExceeded.new(self, retry_count)
end
resolve_token_collisions(resolver) { || ... } click to toggle source
# File lib/mongoid/token/collisions.rb, line 4
def resolve_token_collisions(resolver)
  retries = resolver.retry_count
  begin
    yield
  rescue Mongo::Error::OperationFailure => e
    if is_duplicate_token_error?(e, self, resolver.field_name)
      if (retries -= 1) >= 0
        resolver.create_new_token_for(self)
        retry
      end
      raise_collision_retries_exceeded_error resolver.field_name, resolver.retry_count
    else
      raise e
    end
  end
end