Class: RescueUniqueConstraint::Adapter::SqliteAdapter
- Inherits:
-
Object
- Object
- RescueUniqueConstraint::Adapter::SqliteAdapter
- Defined in:
- lib/rescue_unique_constraint/adapter/sqlite_adapter.rb
Instance Method Summary collapse
-
#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 (?, ?, ?, ?)’.
-
#initialize(table_name) ⇒ SqliteAdapter
constructor
A new instance of SqliteAdapter.
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.
13 14 15 16 |
# File 'lib/rescue_unique_constraint/adapter/sqlite_adapter.rb', line 13 def index_error?(index, ) column_names = .scan(%r{(?<=#{@table_name}\.)\w+}) column_names.include?(index.field) end |