Class: Lutaml::Model::Validation::Profile

Inherits:
Object
  • Object
show all
Defined in:
lib/lutaml/model/validation/profile.rb

Overview

Composable validation profile loaded from YAML. Selects which rules run during validation. Profiles can import other profiles for rule reuse across validation levels (e.g., basic → strict).

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, description: nil, rule_names: [], imports: []) ⇒ Profile

Returns a new instance of Profile.



14
15
16
17
18
19
# File 'lib/lutaml/model/validation/profile.rb', line 14

def initialize(name:, description: nil, rule_names: [], imports: [])
  @name = name
  @description = description
  @rule_names = rule_names
  @imports = imports
end

Instance Attribute Details

#descriptionObject (readonly)

Returns the value of attribute description.



12
13
14
# File 'lib/lutaml/model/validation/profile.rb', line 12

def description
  @description
end

#importsObject (readonly)

Returns the value of attribute imports.



12
13
14
# File 'lib/lutaml/model/validation/profile.rb', line 12

def imports
  @imports
end

#nameObject (readonly)

Returns the value of attribute name.



12
13
14
# File 'lib/lutaml/model/validation/profile.rb', line 12

def name
  @name
end

#rule_namesObject (readonly)

Returns the value of attribute rule_names.



12
13
14
# File 'lib/lutaml/model/validation/profile.rb', line 12

def rule_names
  @rule_names
end

Class Method Details

.load(path) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/lutaml/model/validation/profile.rb', line 21

def self.load(path)
  data = YAML.safe_load_file(path, symbolize_names: false)
  unless data.is_a?(::Hash) && data["name"].is_a?(String)
    raise ArgumentError,
          "Profile YAML must contain a 'name' string key: #{path}"
  end

  new(
    name: data["name"],
    description: data["description"],
    rule_names: data["rules"] || [],
    imports: data["import"] || [],
  )
end

Instance Method Details

#resolve(registry, profiles_by_name = {}, visited: Set.new) ⇒ Object



36
37
38
39
40
41
42
43
44
45
# File 'lib/lutaml/model/validation/profile.rb', line 36

def resolve(registry, profiles_by_name = {}, visited: Set.new)
  if visited.include?(name)
    raise ArgumentError,
          "Circular profile import detected: #{name}"
  end

  resolved = resolve_imports(registry, profiles_by_name,
                             visited: visited + [name])
  resolved | resolve_names(registry)
end