feat: implement 5-step validation pipeline #315

Merged
freemo merged 2 commits from feature/m1-validation-pipeline into master 2026-03-16 19:52:36 +00:00
Owner

Summary

Implement a 5-step validation pipeline for processing raw player input as specified in issue #293.

Changes

New Files

  • lib/aethyr/core/input_handlers/validation/validation_pipeline.rb - Main pipeline orchestrator
  • lib/aethyr/core/input_handlers/validation/tokenizer.rb - Step 1: Split input respecting quoted strings
  • lib/aethyr/core/input_handlers/validation/param_matcher.rb - Step 2: Map tokens to params by position
  • lib/aethyr/core/input_handlers/validation/type_checker.rb - Step 3: Validate types (primitives + mark refs)
  • lib/aethyr/core/input_handlers/validation/reference_resolver.rb - Step 4: Resolve game object references
  • lib/aethyr/core/input_handlers/validation/result_builder.rb - Step 5: Build ValidatedParams or ErrorList
  • lib/aethyr/core/input_handlers/validation/validated_params.rb - Hash-like validated params result
  • lib/aethyr/core/input_handlers/validation/error_list.rb - Collection of validation errors

Testing

  • tests/unit/validation_pipeline.feature - 54 scenarios covering all pipeline components
  • tests/integration/validation_pipeline_integration.feature - 15 scenarios for end-to-end validation

Key Features

  • Multi-error collection: Pipeline collects all errors, not short-circuiting on first
  • Quoted string support: Tokenizer handles double and single quoted strings
  • Default values: Missing optional params get their declared defaults
  • Type validation: Primitives (string, integer, float, boolean), special (direction, enum), and reference types (object, player, mobile, room, area, item)
  • Clean API: ValidationPipeline.run(command_class, raw_input, context) returns ValidatedParams or ErrorList

Testing Results

  • 54 unit test scenarios pass
  • 15 integration test scenarios pass
  • All rubocop checks pass

Dependencies

This PR builds on #292 (Parameter DSL) which provides ParamDefinition and ParameterDSL.

Closes #293

## Summary Implement a 5-step validation pipeline for processing raw player input as specified in issue #293. ## Changes ### New Files - `lib/aethyr/core/input_handlers/validation/validation_pipeline.rb` - Main pipeline orchestrator - `lib/aethyr/core/input_handlers/validation/tokenizer.rb` - Step 1: Split input respecting quoted strings - `lib/aethyr/core/input_handlers/validation/param_matcher.rb` - Step 2: Map tokens to params by position - `lib/aethyr/core/input_handlers/validation/type_checker.rb` - Step 3: Validate types (primitives + mark refs) - `lib/aethyr/core/input_handlers/validation/reference_resolver.rb` - Step 4: Resolve game object references - `lib/aethyr/core/input_handlers/validation/result_builder.rb` - Step 5: Build ValidatedParams or ErrorList - `lib/aethyr/core/input_handlers/validation/validated_params.rb` - Hash-like validated params result - `lib/aethyr/core/input_handlers/validation/error_list.rb` - Collection of validation errors ### Testing - `tests/unit/validation_pipeline.feature` - 54 scenarios covering all pipeline components - `tests/integration/validation_pipeline_integration.feature` - 15 scenarios for end-to-end validation ## Key Features - **Multi-error collection**: Pipeline collects all errors, not short-circuiting on first - **Quoted string support**: Tokenizer handles double and single quoted strings - **Default values**: Missing optional params get their declared defaults - **Type validation**: Primitives (string, integer, float, boolean), special (direction, enum), and reference types (object, player, mobile, room, area, item) - **Clean API**: `ValidationPipeline.run(command_class, raw_input, context)` returns `ValidatedParams` or `ErrorList` ## Testing Results - 54 unit test scenarios pass - 15 integration test scenarios pass - All rubocop checks pass ## Dependencies This PR builds on #292 (Parameter DSL) which provides `ParamDefinition` and `ParameterDSL`. Closes #293
freemo force-pushed feature/m1-validation-pipeline from 7036d7885b to cc0d68e133 2026-03-16 16:55:10 +00:00 Compare
freemo force-pushed feature/m1-validation-pipeline from cc0d68e133 to b0a2c07905 2026-03-16 17:30:25 +00:00 Compare
freemo force-pushed feature/m1-validation-pipeline from b0a2c07905 to 6d0877eecc 2026-03-16 19:52:26 +00:00 Compare
freemo merged commit 6d0877eecc into master 2026-03-16 19:52:36 +00:00
freemo deleted branch feature/m1-validation-pipeline 2026-03-16 19:52:37 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: aethyr/Aethyr#315
No description provided.