Class: Alchemy::PageMutex
- Inherits:
-
BaseRecord
- Object
- ActiveRecord::Base
- BaseRecord
- Alchemy::PageMutex
- Defined in:
- app/models/alchemy/page_mutex.rb
Defined Under Namespace
Classes: LockFailed
Constant Summary collapse
- MAX_AGE =
seconds
300
Constants included from SearchableResource
SearchableResource::SEARCHABLE_COLUMN_TYPES
Class Method Summary collapse
Methods included from SearchableResource
#ransackable_associations, #ransackable_attributes, #ransortable_attributes
Class Method Details
.with_lock!(page) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'app/models/alchemy/page_mutex.rb', line 13 def self.with_lock!(page) raise ArgumentError, "A page is necessary to lock it" if page.nil? # remove old expired page if it wasn't deleted before expired.where(page: page).delete_all begin page_mutex = create!(page: page) rescue ActiveRecord::RecordNotUnique error = LockFailed.new("Can't lock page #{page.id} twice!") logger.error error.inspect raise error end yield ensure page_mutex&.destroy end |