Class: Expressir::Model::InterfaceValidator

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

Overview

Validates EXPRESS interface statements (USE FROM, REFERENCE FROM) Single responsibility: Interface-specific validation only Handles schema reference validation, interface item validation, and type compatibility checks

Constant Summary collapse

ERROR_TYPES =

Error types returned by validation

{
  missing_schema: :missing_schema_reference,
  missing_item: :missing_interface_item,
  type_mismatch: :interface_type_mismatch,
  duplicate_alias: :duplicate_interface_alias,
  self_reference: :self_reference_interface,
  empty_items: :empty_interface_items,
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(repository) ⇒ InterfaceValidator

Initialize validator with a repository

Parameters:

  • repository (Repository)

    Repository containing schemas to validate



23
24
25
26
# File 'lib/expressir/model/interface_validator.rb', line 23

def initialize(repository)
  @repository = repository
  @schemas = repository.schemas
end

Instance Attribute Details

#repositoryObject (readonly)

Returns the value of attribute repository.



19
20
21
# File 'lib/expressir/model/interface_validator.rb', line 19

def repository
  @repository
end

#schemasObject (readonly)

Returns the value of attribute schemas.



19
20
21
# File 'lib/expressir/model/interface_validator.rb', line 19

def schemas
  @schemas
end

Instance Method Details

#validate(options = {}) ⇒ Hash

Main validation entry point

Parameters:

  • options (Hash) (defaults to: {})

    Validation options

Options Hash (options):

  • :detailed (Boolean)

    Show detailed reports with fix suggestions

  • :check_duplicates (Boolean)

    Check for duplicate aliases

  • :check_self_references (Boolean)

    Check for self-referencing interfaces

  • :strict (Boolean)

    Enable strict validation (warnings become errors)

Returns:

  • (Hash)

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



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/expressir/model/interface_validator.rb', line 35

def validate(options = {})
  errors = []
  warnings = []
  stats = { use_from: 0, reference_from: 0, total_items: 0 }

  schemas.each do |schema|
    validate_schema_interfaces(schema, errors, warnings, stats, options)
  end

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

  if options[:detailed]
    result[:interface_report] =
      build_detailed_report(errors, warnings, stats)
  end

  result
end

#validate_schema(schema_name, options = {}) ⇒ Hash

Validate interfaces in a specific schema

Parameters:

  • schema_name (String)

    Schema name

  • options (Hash) (defaults to: {})

    Validation options

Returns:

  • (Hash)

    Validation results for the schema



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/expressir/model/interface_validator.rb', line 63

def validate_schema(schema_name, options = {})
  schema = find_schema(schema_name)
  unless schema
    return { valid?: false,
             errors: [{ type: :schema_not_found,
                        message: "Schema '#{schema_name}' not found" }] }
  end

  errors = []
  warnings = []
  stats = { use_from: 0, reference_from: 0, total_items: 0 }

  validate_schema_interfaces(schema, errors, warnings, stats, options)

  {
    valid?: errors.empty?,
    errors: errors,
    warnings: warnings,
    stats: stats,
  }
end