Module: Smith::Doctor::Checks::PersistenceCapabilities
- Defined in:
- lib/smith/doctor/checks/persistence_capabilities.rb
Overview
Reports which optional capabilities the configured persistence adapter supports. Hosts who depend on optimistic locking but configure a cache-backed adapter (CacheStore / RailsCache) need to know up front that store_versioned silently falls back to plain store. Workflow#persist! warns once per adapter class per Smith boot, but doctor surfaces it eagerly.
Constant Summary collapse
- OPTIONAL_CAPABILITIES =
Smith::PersistenceAdapters::OPTIONAL_METHODS
Class Method Summary collapse
- .report_missing_adapter(report) ⇒ Object
- .report_missing_capabilities(report, adapter, missing) ⇒ Object
- .report_supported_capabilities(report, adapter) ⇒ Object
- .resolve_adapter ⇒ Object
- .run(report) ⇒ Object
Class Method Details
.report_missing_adapter(report) ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'lib/smith/doctor/checks/persistence_capabilities.rb', line 35 def report_missing_adapter(report) report.add( name: "persistence.capabilities", status: :warn, message: "No persistence adapter configured", detail: "Smith.config.persistence_adapter is nil and Smith.config.test_mode is false. " \ "Hosts using durable workflows must set persistence_adapter." ) end |
.report_missing_capabilities(report, adapter, missing) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/smith/doctor/checks/persistence_capabilities.rb', line 54 def report_missing_capabilities(report, adapter, missing) report.add( name: "persistence.capabilities", status: :warn, message: "#{adapter.class.name} missing optional capabilities: #{missing.join(", ")}", detail: "Smith will fall back where possible: non-versioned writes when store_versioned " \ "is missing, and payload updated_at parsing when heartbeat methods are missing. " \ "Use RedisStore or Memory for full versioning and heartbeat coverage; " \ "ActiveRecordStore currently covers optimistic locking when lock_version is present." ) end |
.report_supported_capabilities(report, adapter) ⇒ Object
45 46 47 48 49 50 51 52 |
# File 'lib/smith/doctor/checks/persistence_capabilities.rb', line 45 def report_supported_capabilities(report, adapter) report.add( name: "persistence.capabilities", status: :pass, message: "#{adapter.class.name} supports all optional persistence capabilities", detail: "Supported: #{OPTIONAL_CAPABILITIES.join(", ")}" ) end |
.resolve_adapter ⇒ Object
29 30 31 32 33 |
# File 'lib/smith/doctor/checks/persistence_capabilities.rb', line 29 def resolve_adapter Smith.persistence_adapter rescue StandardError nil end |
.run(report) ⇒ Object
19 20 21 22 23 24 25 26 27 |
# File 'lib/smith/doctor/checks/persistence_capabilities.rb', line 19 def run(report) adapter = resolve_adapter return report_missing_adapter(report) if adapter.nil? missing = OPTIONAL_CAPABILITIES.reject { |cap| Smith::PersistenceAdapters.supports?(adapter, cap) } return report_supported_capabilities(report, adapter) if missing.empty? report_missing_capabilities(report, adapter, missing) end |