nekland/tools
Small, dependency-free PHP utility library (semver) with high-quality helpers: StringTools (camelize, starts/endsWith, contains, multibyte ucfirst), ArrayTools, equality interface, DateTimeComparator, and temporary file/directory management.
StringTools for naming conventions, TemporaryFile for file operations). It avoids Laravel-specific dependencies, ensuring portability across PHP projects.DateTimeComparator and EqualableInterface can be abstracted into Laravel services (e.g., for model comparisons or scheduling logic) without tight integration.TemporaryFile/TemporaryDirectory classes directly address Laravel’s testing pain points (e.g., isolated file uploads, cache simulations) by automating cleanup and reducing flakiness.\Nekland\Tools\StringTools).camelize normalization) reduce migration risks. Laravel’s Str helper overlaps with StringTools, but the latter offers additional features (e.g., mb_ucfirst, removeStart/End).camelize’s default normalization (v2.6.0) may break existing code. Mitigation: Override defaults or wrap the utility in a Laravel service layer.DateTimeComparator’s variable arguments could introduce unexpected behavior if non-DateTimeInterface objects are passed. Mitigation: Validate inputs or use type hints in Laravel services.ArrayTools::removeValue may be slower than Laravel’s collect() for large arrays. Mitigation: Benchmark and replace if critical.TemporaryFile/Directory. Mitigation: Add Laravel-specific error handling (e.g., Storage facade fallbacks).StringTools replace Laravel’s Str helper, or coexist for extended functionality (e.g., mb_ucfirst)?TemporaryFile integrate with Laravel’s test cleanup (e.g., RefreshDatabase traits)?str_contains) outperform StringTools?TemporaryFile integration with Storage disk)?TemporaryDirectory in feature tests)?StringTools can standardize naming conventions (e.g., camelize for API responses) or sanitize inputs (e.g., removeStart for route parameters).TemporaryFile/TemporaryDirectory replace manual tmpfile() or sys_get_temp_dir() calls in unit/feature tests, ensuring isolated filesystem operations./tmp.TemporaryFile::remove() in finally blocks).DateTimeComparator::greatest for job retries) or audit logging (e.g., comparing timestamps).mb_ucfirst for Unicode support).StringTools for API responses, TemporaryFile in tests).camelize functions) with nekland/tools.TemporaryFile integration with Storage).camelize normalization).class StringService {
public function camelize(string $str): string {
return StringTools::camelize($str, from: '-', normalize: false);
}
}
tmpfile() or hardcoded paths in tests with TemporaryDirectory:
public function test_file_upload() {
$tempDir = new TemporaryDirectory();
$file = $tempDir->getTemporaryFile();
// Test logic...
$tempDir->remove(); // Auto-cleanup
}
ArrayTools::removeValue vs. collect()->reject()).mbstring for mb_ucfirst).EqualableInterface could extend Laravel model comparisons (e.g., equals() for Eloquent).TemporaryFile can manage job payloads or failed job storage with auto-cleanup.| Phase | Focus Area | Utilities | Risk |
|---|---|---|---|
| Phase 1 | Testing & String Manipulation | TemporaryFile, StringTools |
Low (isolated, high ROI) |
| Phase 2 | File Processing & API Responses | TemporaryDirectory, ArrayTools |
Medium (performance review) |
| Phase 3 | Date/Time Logic & Legacy Migration | DateTimeComparator, EqualableInterface |
High (BC breaks, edge cases) |
camelize) may need wrapper services for backward compatibility.StringService) in the codebase.TemporaryFile) decrease flaky test failures.DateTimeComparator with invalid inputs) may require internal runbooks.TemporaryFile with Storage").How can I help you explore Laravel packages today?