Class: LcpRuby::Workflow::Registry
- Inherits:
-
Object
- Object
- LcpRuby::Workflow::Registry
- Defined in:
- lib/lcp_ruby/workflow/registry.rb
Class Method Summary collapse
-
.available? ⇒ Boolean
Whether the workflow subsystem is configured and ready.
-
.clear! ⇒ Object
Full reset — called from LcpRuby.reset!.
-
.mark_available! ⇒ Object
Mark registry as available (called after setup completes).
-
.readonly_fields_for(record, model_name:) ⇒ Array<String>
Returns readonly field names for a record based on its current workflow state.
-
.reload! ⇒ Object
Clears the cached data, forcing a reload on next access.
-
.set_loader(loader_instance) ⇒ Object
Sets the loader that backs this registry.
-
.workflow_by_name(name) ⇒ WorkflowDefinition?
Returns a workflow definition by name.
-
.workflow_for_model(model_name) ⇒ WorkflowDefinition?
Returns the workflow definition for the given model.
Class Method Details
.available? ⇒ Boolean
Whether the workflow subsystem is configured and ready.
92 93 94 |
# File 'lib/lcp_ruby/workflow/registry.rb', line 92 def available? @available == true end |
.clear! ⇒ Object
Full reset — called from LcpRuby.reset!
58 59 60 61 62 63 64 |
# File 'lib/lcp_ruby/workflow/registry.rb', line 58 def clear! monitor.synchronize do @available = false @loader = nil @model_cache = nil end end |
.mark_available! ⇒ Object
Mark registry as available (called after setup completes).
97 98 99 |
# File 'lib/lcp_ruby/workflow/registry.rb', line 97 def mark_available! @available = true end |
.readonly_fields_for(record, model_name:) ⇒ Array<String>
Returns readonly field names for a record based on its current workflow state.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/lcp_ruby/workflow/registry.rb', line 70 def readonly_fields_for(record, model_name:) return [] unless available? workflow = workflow_for_model(model_name) return [] unless workflow current_state = record.send(workflow.field)&.to_s return [] unless current_state state_def = workflow.state(current_state) return [] unless state_def if state_def.all_readonly? model_def = LcpRuby.loader.model_definitions[model_name] return [] unless model_def model_def.fields.map(&:name) else state_def.readonly_fields end end |
.reload! ⇒ Object
Clears the cached data, forcing a reload on next access.
51 52 53 54 55 |
# File 'lib/lcp_ruby/workflow/registry.rb', line 51 def reload! monitor.synchronize do @model_cache = nil end end |
.set_loader(loader_instance) ⇒ Object
Sets the loader that backs this registry.
43 44 45 46 47 48 |
# File 'lib/lcp_ruby/workflow/registry.rb', line 43 def set_loader(loader_instance) monitor.synchronize do @loader = loader_instance @model_cache = nil end end |
.workflow_by_name(name) ⇒ WorkflowDefinition?
Returns a workflow definition by name.
35 36 37 38 39 |
# File 'lib/lcp_ruby/workflow/registry.rb', line 35 def workflow_by_name(name) return nil unless available? loader.workflow_by_name(name.to_s) end |
.workflow_for_model(model_name) ⇒ WorkflowDefinition?
Returns the workflow definition for the given model.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/lcp_ruby/workflow/registry.rb', line 12 def workflow_for_model(model_name) return nil unless available? monitor.synchronize do @model_cache ||= {} @model_cache[model_name.to_s] ||= begin wf = loader.workflows_for(model_name.to_s).first if wf.nil? # STI child fallback: try parent model's workflow model_def = LcpRuby.loader.model_definitions[model_name.to_s] if (parent_name = model_def&.sti_parent_name) loader.workflows_for(parent_name).first end else wf end end end end |