Class: LcpRuby::DynamicReferences::Validator

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/dynamic_references/validator.rb

Overview

Boot-time validator for dynamic-reference tokens used in YAML/DSL.

Catches typos in ‘current_user.<method>` against the configured `LcpRuby.configuration.user_class`, and `record.<field>` against a known model class (when one is provided in context).

The Validator never raises — it returns ‘[errors, warnings]` so callers in `ConfigurationValidator` can append messages to their result aggregator.

Class Method Summary collapse

Class Method Details

.validate_token(token, descriptor:, user_class: nil, model_class: nil) ⇒ Array(Array<String>, Array<String>)

Returns [errors, warnings].

Parameters:

  • token (Object)

    the value being validated (only Strings get checked)

  • descriptor (String)

    location for error messages (e.g. “permissions/foo.yml#scope.value”)

  • user_class (String, Class, nil) (defaults to: nil)

    resolved user class (defaults to LcpRuby.configuration.user_class)

  • model_class (Class, nil) (defaults to: nil)

    target model for ‘record.<field>` validation (skip if nil)

Returns:

  • (Array(Array<String>, Array<String>))
    errors, warnings


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/lcp_ruby/dynamic_references/validator.rb', line 20

def validate_token(token, descriptor:, user_class: nil, model_class: nil)
  errors = []
  warnings = []
  return [ errors, warnings ] unless token.is_a?(String)

  parsed =
    begin
      Resolver.parse(token)
    rescue Resolver::ParseError => e
      errors << "#{descriptor}: #{e.message}"
      return [ errors, warnings ]
    end

  case parsed[:root]
  when "current_user"
    validate_user_method(parsed[:method], descriptor, user_class, errors, warnings)
  when "record"
    validate_record_field(parsed[:method], descriptor, model_class, errors, warnings)
  end

  [ errors, warnings ]
end