Class: LcpRuby::Workflow::ValueResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/workflow/value_resolver.rb

Class Method Summary collapse

Class Method Details

.resolve(expression, record:, user:) ⇒ Object

Resolves a set_fields value expression to a concrete value.

Supported shapes:

"current_user.id" / "record.title" / "current_date" / "current_datetime"
  → routed through DynamicReferences::Resolver
{ "value" => "literal" }   → string literal
{ "value" => "null" }      → nil
{ "value" => 42 }          → 42
:now / :today (symbol)     → migrated to "current_datetime" / "current_date"
anything else (string, number, true/false, nil) → itself

Legacy hash forms (date:, current_user:, field_ref:) are no longer accepted — callers should use the dotted-string form.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/lcp_ruby/workflow/value_resolver.rb', line 17

def self.resolve(expression, record:, user:)
  if expression.is_a?(Symbol) && %i[now today].include?(expression)
    raise WorkflowError,
      "set_fields: bare symbol :#{expression} is no longer supported. " \
      "Use 'current_datetime' (for :now) or 'current_date' (for :today)."
  end

  if expression.is_a?(String) && DynamicReferences::Resolver.recognized?(expression)
    return DynamicReferences::Resolver.resolve(
      expression,
      context: { user: user, record: record }
    )
  end

  return expression unless expression.is_a?(Hash)

  normalized = expression.transform_keys(&:to_s)

  if normalized.key?("value")
    resolve_literal(normalized["value"])
  elsif normalized.key?("date") || normalized.key?("current_user") || normalized.key?("field_ref")
    raise WorkflowError,
      "set_fields: hash-form dynamic references ({date:}, {current_user:}, {field_ref:}) " \
      "are no longer supported. Use the dotted string form — " \
      "e.g. 'current_datetime', 'current_user.id', 'record.<field>'. Got: #{expression.inspect}"
  else
    expression
  end
end