austinw / selection-procedures
Selection procedures package for Laravel.
Requires
- php: ^8.1
- illuminate/config: *
- illuminate/contracts: ^10.0 || ^11.0 || ^12.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- laravel/pint: ^1.14
- nunomaduro/collision: ^7.9 || ^8.1
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.12 || ^9.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^10.5
README
This package provides a flexible and powerful system for implementing selection procedures in Laravel applications. It enables developers to create, manage, and execute sophisticated selection processes with ease.
Overview
Selection Procedures is designed to help manage athlete ranking and selection processes for various sporting competitions. The package includes:
- Flexible configuration system for defining selection criteria
- Multiple pre-built calculation strategies for different types of competitions
- Support for various apparatus and divisions
- Comprehensive ranking algorithms
- Easy integration with existing Laravel applications
Installation
You can install the package via composer:
composer require austinw/selection-procedures
After installation, publish the configuration file:
php artisan vendor:publish --tag="selection-procedures-config"
Usage
Basic Example
use AustinW\SelectionProcedures\RankingService; use Illuminate\Support\Collection; // Get your results collection (must implement ResultContract) $results = new Collection([/* your result objects */]); // Inject or resolve the ranking service $rankingService = app(RankingService::class); // Get ranked athletes $rankedAthletes = $rankingService->rank( 'world_championships', // procedure key as defined in config 'trampoline', // apparatus 'senior_elite', // division $results // collection of results ); // Process ranked athletes foreach ($rankedAthletes as $rankedAthlete) { echo $rankedAthlete->getAthlete()->getName() . ': ' . $rankedAthlete->getTotalPoints(); }
Implementing Contracts
Your athlete and result classes should implement the provided interfaces:
use AustinW\SelectionProcedures\Contracts\AthleteContract; use AustinW\SelectionProcedures\Contracts\ResultContract; class Athlete implements AthleteContract { // Implement required methods public function getId(): string { // Return unique athlete identifier } public function getName(): string { // Return athlete name } } class Result implements ResultContract { // Implement required methods public function getAthlete(): AthleteContract { // Return the athlete object } public function getCompetitionId(): string { // Return unique competition identifier } public function getScore(): float { // Return the score } // Additional required methods... }
Available Calculators
The package comes with several pre-built calculators for different competition types:
WorldChampionshipsCalculator
: Selection procedures for World ChampionshipsWorldGamesCalculator
: Selection procedures for World GamesWagcCalculator
: Selection procedures for World Age Group CompetitionsJuniorPanAmCalculator
: Selection procedures for Junior Pan American GamesEDPCalculator
: Elite Development Program selection proceduresJumpStartCalculator
: Jump Start program selection procedures
Each calculator implements specialized ranking algorithms based on the requirements of the specific competition.
Extending the Package
Creating Custom Calculators
You can create your own calculator by implementing the ProcedureCalculatorContract
interface:
use AustinW\SelectionProcedures\Contracts\ProcedureCalculatorContract; class MyCustomCalculator implements ProcedureCalculatorContract { public function calculateRanking(string $apparatus, string $division, Collection $results, array $config): Collection { // Your custom ranking logic here return new Collection([/* ranked athletes */]); } }
Then register your calculator in the config file:
// config/selection-procedures.php 'procedures' => [ 'my_custom_procedure' => [ 'name' => 'My Custom Selection Procedure', 'calculator' => \App\Calculators\MyCustomCalculator::class, 'divisions' => [ 'senior_elite' => [ // Division-specific configuration ], ], ], ],
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.