feat: implement Parameter DSL with 12 parameter types #313

Merged
freemo merged 1 commit from feature/m1-param-dsl into master 2026-03-16 19:51:33 +00:00
Owner

Summary

  • Implement declarative Parameter DSL for command handlers with 12 parameter types
  • Add TypeRegistry, ParamDefinition value object, and ParameterDSL module with inheritance support
  • Include 32 unit test scenarios and 6 integration test scenarios

Implementation Details

Files Created

  1. lib/aethyr/core/input_handlers/validation/type_registry.rb - Registry of all 12 parameter types with metadata
  2. lib/aethyr/core/input_handlers/validation/param_definition.rb - Immutable value object for parameter declarations
  3. lib/aethyr/core/input_handlers/validation/parameter_dsl.rb - DSL module with param class method and declared_params accessor

Parameter Types

:string, :integer, :float, :direction, :object, :player, :mobile, :room, :area, :item, :boolean, :enum

DSL Options

  • type - Required parameter type
  • required - Whether parameter is required (default: false)
  • default - Default value if not provided
  • in - Scope for object resolution (:room, :inventory, etc.)
  • values - Allowed values for enum type
  • description - Human-readable description

Example Usage

class GiveCommand
  include Aethyr::Core::InputHandlers::Validation::ParameterDSL

  param :item, type: :item, required: true, in: :inventory
  param :target, type: :player, required: true, in: :room
  param :amount, type: :integer, default: 1
end

GiveCommand.declared_params  # => [ParamDefinition(:item), ParamDefinition(:target), ParamDefinition(:amount)]

Test Results

  • 32 unit scenarios: All passing
  • 6 integration scenarios: All passing
  • Rubocop: No offenses

Closes #292

## Summary - Implement declarative Parameter DSL for command handlers with 12 parameter types - Add TypeRegistry, ParamDefinition value object, and ParameterDSL module with inheritance support - Include 32 unit test scenarios and 6 integration test scenarios ## Implementation Details ### Files Created 1. **`lib/aethyr/core/input_handlers/validation/type_registry.rb`** - Registry of all 12 parameter types with metadata 2. **`lib/aethyr/core/input_handlers/validation/param_definition.rb`** - Immutable value object for parameter declarations 3. **`lib/aethyr/core/input_handlers/validation/parameter_dsl.rb`** - DSL module with `param` class method and `declared_params` accessor ### Parameter Types `:string`, `:integer`, `:float`, `:direction`, `:object`, `:player`, `:mobile`, `:room`, `:area`, `:item`, `:boolean`, `:enum` ### DSL Options - `type` - Required parameter type - `required` - Whether parameter is required (default: false) - `default` - Default value if not provided - `in` - Scope for object resolution (:room, :inventory, etc.) - `values` - Allowed values for enum type - `description` - Human-readable description ### Example Usage ```ruby class GiveCommand include Aethyr::Core::InputHandlers::Validation::ParameterDSL param :item, type: :item, required: true, in: :inventory param :target, type: :player, required: true, in: :room param :amount, type: :integer, default: 1 end GiveCommand.declared_params # => [ParamDefinition(:item), ParamDefinition(:target), ParamDefinition(:amount)] ``` ## Test Results - 32 unit scenarios: All passing - 6 integration scenarios: All passing - Rubocop: No offenses Closes #292
freemo force-pushed feature/m1-param-dsl from 4ebcdda99c to 10ea070a14 2026-03-16 16:53:19 +00:00 Compare
freemo force-pushed feature/m1-param-dsl from 10ea070a14 to 63e4eccc9c 2026-03-16 17:06:41 +00:00 Compare
freemo force-pushed feature/m1-param-dsl from 63e4eccc9c to b75e79d80b 2026-03-16 17:10:50 +00:00 Compare
freemo scheduled this pull request to auto merge when all checks succeed 2026-03-16 19:50:38 +00:00
freemo merged commit b75e79d80b into master 2026-03-16 19:51:33 +00:00
freemo deleted branch feature/m1-param-dsl 2026-03-16 19:51:33 +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#313
No description provided.