Class: Phronomy::Persistence::InMemory::WorkflowStates
- Inherits:
-
Object
- Object
- Phronomy::Persistence::InMemory::WorkflowStates
- Defined in:
- lib/phronomy/persistence/in_memory.rb
Instance Method Summary collapse
- #delete(thread_id, expected_revision:) ⇒ Object
-
#initialize(owner) ⇒ WorkflowStates
constructor
A new instance of WorkflowStates.
- #load(thread_id) ⇒ Object
- #save(thread_id, expected_revision:, snapshot:) ⇒ Object
Constructor Details
#initialize(owner) ⇒ WorkflowStates
Returns a new instance of WorkflowStates.
213 |
# File 'lib/phronomy/persistence/in_memory.rb', line 213 def initialize(owner) = @owner = owner |
Instance Method Details
#delete(thread_id, expected_revision:) ⇒ Object
247 248 249 250 251 252 253 254 255 256 257 258 259 260 |
# File 'lib/phronomy/persistence/in_memory.rb', line 247 def delete(thread_id, expected_revision:) @owner.synchronize do key = thread_id.to_s current = @owner.workflow_state_data[key] actual_revision = current&.fetch(:revision) unless actual_revision == expected_revision raise ConflictError, "workflow state revision conflict for #{key}: " \ "expected #{expected_revision.inspect}, actual #{actual_revision.inspect}" end @owner.workflow_state_data.delete(key) end nil end |
#load(thread_id) ⇒ Object
215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/phronomy/persistence/in_memory.rb', line 215 def load(thread_id) @owner.synchronize do record = @owner.workflow_state_data[thread_id.to_s] next nil unless record { snapshot: @owner.deep_dup_workflow_value(record.fetch(:snapshot)), revision: record.fetch(:revision) }.freeze end end |
#save(thread_id, expected_revision:, snapshot:) ⇒ Object
227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 |
# File 'lib/phronomy/persistence/in_memory.rb', line 227 def save(thread_id, expected_revision:, snapshot:) @owner.synchronize do key = thread_id.to_s current = @owner.workflow_state_data[key] actual_revision = current&.fetch(:revision) unless actual_revision == expected_revision raise ConflictError, "workflow state revision conflict for #{key}: " \ "expected #{expected_revision.inspect}, actual #{actual_revision.inspect}" end next_revision = actual_revision ? actual_revision + 1 : 1 @owner.workflow_state_data[key] = { snapshot: @owner.deep_dup_workflow_value(snapshot), revision: next_revision } next_revision end end |