Module: Mongoid::Token::Collisions
- Defined in:
- lib/mongoid/token/collisions.rb
Instance Method Summary collapse
- #is_duplicate_token_error?(err, document, field_name) ⇒ Boolean
- #raise_collision_retries_exceeded_error(field_name, retry_count) ⇒ Object
- #resolve_token_collisions(resolver) ⇒ Object
Instance Method Details
#is_duplicate_token_error?(err, document, field_name) ⇒ Boolean
26 27 28 29 30 |
# File 'lib/mongoid/token/collisions.rb', line 26 def is_duplicate_token_error?(err, document, field_name) err. =~ /(11000|11001)/ && err. =~ /dup key/ && err. =~ /"#{document.send(field_name)}"/ end |
#raise_collision_retries_exceeded_error(field_name, retry_count) ⇒ Object
21 22 23 24 |
# 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) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 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 |