module RetryOnDuplicate::ClassMethods
Public Instance Methods
retry_on_duplicate() { || ... }
click to toggle source
# File lib/retry_on_duplicate.rb, line 10 def retry_on_duplicate retried = false begin yield rescue *retry_on_duplicate_rescue_messages => err if retry_on_duplicate_on_retry?(err, retried) retried = true retry else raise err end end end
Private Instance Methods
extra_retry_on_duplicate_rescue_messages()
click to toggle source
# File lib/retry_on_duplicate.rb, line 31 def extra_retry_on_duplicate_rescue_messages arr = [] arr << PG::UniqueViolation if defined?(PG::UniqueViolation) arr << Mysql2::Error if defined?(Mysql2::Error) arr end
retry_on_duplicate_on_retry?(err, retried)
click to toggle source
# File lib/retry_on_duplicate.rb, line 38 def retry_on_duplicate_on_retry?(err, retried) !retried && (err.message.include?("Duplicate entry") || err.message.include?("PG::UniqueViolation") || err.message.include?("has already been taken")) end
retry_on_duplicate_rescue_messages()
click to toggle source
# File lib/retry_on_duplicate.rb, line 26 def retry_on_duplicate_rescue_messages @retry_on_duplicate_rescue_messages ||= [ ActiveRecord::RecordNotUnique ] | extra_retry_on_duplicate_rescue_messages end