class RescueUniqueConstraint::RescueHandler
Handles storing and matching [index, field] pairs to exceptions
Attributes
indexes_to_rescue_on[R]
model[R]
Public Class Methods
new(model)
click to toggle source
# File lib/rescue_unique_constraint/rescue_handler.rb, line 4 def initialize(model) @model = model @indexes_to_rescue_on = [] end
Public Instance Methods
add_index(index, field)
click to toggle source
# File lib/rescue_unique_constraint/rescue_handler.rb, line 9 def add_index(index, field) indexes_to_rescue_on << Index.new(index, field) end
matching_indexes(e)
click to toggle source
# File lib/rescue_unique_constraint/rescue_handler.rb, line 13 def matching_indexes(e) indexes = indexes_to_rescue_on.select do |index| database_adapter.index_error?(index, e.message) end raise e unless indexes.any? indexes end
Private Instance Methods
database_adapter()
click to toggle source
# File lib/rescue_unique_constraint/rescue_handler.rb, line 25 def database_adapter @_database_adapter ||= ( case database_name when :mysql2 Adapter::MysqlAdapter.new when :postgresql Adapter::PostgresqlAdapter.new when :sqlite Adapter::SqliteAdapter.new(@model.table_name) else raise "Database (#{database_name}) not supported" end ) end
database_name()
click to toggle source
# File lib/rescue_unique_constraint/rescue_handler.rb, line 40 def database_name model.connection.adapter_name.downcase.to_sym end