Class: Kabk::Concurrency
- Inherits:
-
Object
- Object
- Kabk::Concurrency
- Defined in:
- lib/kabk/concurrency.rb
Overview
Handles Optimistic Concurrency Control (OCC)
Class Method Summary collapse
-
.check!(resource, current_record, submitted_params) ⇒ Object
Check if the provided version matches the database state.
Class Method Details
.check!(resource, current_record, submitted_params) ⇒ Object
Check if the provided version matches the database state
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/kabk/concurrency.rb', line 13 def self.check!(resource, current_record, submitted_params) return unless resource.concurrency_field field = resource.concurrency_field.to_sym return unless submitted_params.key?(field) || submitted_params.key?(field.to_s) client_version = submitted_params[field] || submitted_params[field.to_s] db_version = current_record.send(field) # Handle Time object comparison by converting DB to ISO8601 (which is what the client sends) db_version_str = db_version.is_a?(Time) || db_version.respond_to?(:iso8601) ? db_version.iso8601 : db_version.to_s if client_version.to_s != db_version_str raise ConcurrencyConflictError, "Record has been updated by another user." end end |