Class: RescueUniqueConstraint::Adapter::SqliteAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/rescue_unique_constraint/adapter/sqlite_adapter.rb

Instance Method Summary collapse

Constructor Details

#initialize(table_name) ⇒ SqliteAdapter

Returns a new instance of SqliteAdapter.



4
5
6
# File 'lib/rescue_unique_constraint/adapter/sqlite_adapter.rb', line 4

def initialize(table_name)
  @table_name = table_name
end

Instance Method Details

#index_error?(index, error_message) ⇒ Boolean

Sample error message returned by ActiveRecord for Sqlite Unique exception: ‘SQLite3::ConstraintException: UNIQUE constraint failed: things.code, things.score: INSERT INTO “things” (“name”, “test”, “code”, “score”) VALUES (?, ?, ?, ?)’

Step1: extract column names from above message on which unique constraint failed. Step2: Check if this index’s field is among those columns.

Returns:

  • (Boolean)


13
14
15
16
# File 'lib/rescue_unique_constraint/adapter/sqlite_adapter.rb', line 13

def index_error?(index, error_message)
  column_names = error_message.scan(%r{(?<=#{@table_name}\.)\w+})
  column_names.include?(index.field)
end