Class: Expressir::Model::RepositoryValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/expressir/model/repository_validator.rb

Overview

Validator for repository consistency checks Handles schema reference validation, interface item validation, circular dependency detection, and unused schema warnings Coordinates with InterfaceValidator for detailed interface validation

Instance Method Summary collapse

Constructor Details

#initialize(schemas, reference_index) ⇒ RepositoryValidator

Initialize validator with schemas and reference index

Parameters:



15
16
17
18
# File 'lib/expressir/model/repository_validator.rb', line 15

def initialize(schemas, reference_index)
  @schemas = schemas
  @reference_index = reference_index
end

Instance Method Details

#validate(strict: false, check_interfaces: false, check_completeness: false, detailed: false, check_duplicates: false, check_self_references: false) ⇒ Hash

Validate repository consistency

Parameters:

  • strict (Boolean) (defaults to: false)

    Enable strict validation (unused schemas)

  • check_interfaces (Boolean) (defaults to: false)

    Enable detailed interface validation

  • check_completeness (Boolean) (defaults to: false)

    Check for schema completeness

  • detailed (Boolean) (defaults to: false)

    Generate detailed reports

  • check_duplicates (Boolean) (defaults to: false)

    Check for duplicate interface aliases

  • check_self_references (Boolean) (defaults to: false)

    Check for self-referencing interfaces

Returns:

  • (Hash)

    Validation results with :valid?, :errors, :warnings



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/expressir/model/repository_validator.rb', line 28

def validate(
  strict: false,
  check_interfaces: false,
  check_completeness: false,
  detailed: false,
  check_duplicates: false,
  check_self_references: false
)
  errors = []
  warnings = []

  # Existing basic validations (always run)
  validate_schema_references(errors)
  validate_interface_items(errors)
  detect_circular_dependencies(warnings)

  if strict
    detect_unused_schemas(warnings)
  end

  # NEW: Detailed interface validation
  interface_result = nil
  if check_interfaces
    begin
      interface_result = run_interface_validation(
        detailed: detailed,
        check_duplicates: check_duplicates,
        check_self_references: check_self_references,
      )

      # Merge results, avoiding duplicates
      merge_validation_results(errors, warnings, interface_result)
    rescue StandardError => e
      # If interface validation fails, add a warning instead of crashing
      warnings << {
        type: :interface_validation_error,
        message: "Could not perform detailed interface validation: #{e.message}",
      }
    end
  end

  # NEW: Completeness checks
  if check_completeness
    check_schema_completeness(warnings)
  end

  result = {
    valid?: errors.empty?,
    errors: errors,
    warnings: warnings,
  }

  # Include detailed report if requested and available
  if detailed && interface_result && interface_result[:interface_report]
    result[:interface_report] = interface_result[:interface_report]
  end

  result
end