Files
michaelschiemer/src/Framework/Svg/ValueObjects/Text/TextContent.php
Michael Schiemer fc3d7e6357 feat(Production): Complete production deployment infrastructure
- Add comprehensive health check system with multiple endpoints
- Add Prometheus metrics endpoint
- Add production logging configurations (5 strategies)
- Add complete deployment documentation suite:
  * QUICKSTART.md - 30-minute deployment guide
  * DEPLOYMENT_CHECKLIST.md - Printable verification checklist
  * DEPLOYMENT_WORKFLOW.md - Complete deployment lifecycle
  * PRODUCTION_DEPLOYMENT.md - Comprehensive technical reference
  * production-logging.md - Logging configuration guide
  * ANSIBLE_DEPLOYMENT.md - Infrastructure as Code automation
  * README.md - Navigation hub
  * DEPLOYMENT_SUMMARY.md - Executive summary
- Add deployment scripts and automation
- Add DEPLOYMENT_PLAN.md - Concrete plan for immediate deployment
- Update README with production-ready features

All production infrastructure is now complete and ready for deployment.
2025-10-25 19:18:37 +02:00

75 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Framework\Svg\ValueObjects\Text;
use App\Framework\Exception\ErrorCode;
use App\Framework\Exception\FrameworkException;
/**
* Value Object representing text content in SVG
* Handles escaping and validation
*/
final readonly class TextContent
{
public function __construct(
public string $value
) {
if ($value === '') {
throw FrameworkException::create(
ErrorCode::VAL_INVALID_FORMAT,
'Text content cannot be empty'
);
}
}
public static function fromString(string $text): self
{
return new self($text);
}
/**
* Get escaped text for SVG output
*/
public function toSvgSafeString(): string
{
return htmlspecialchars($this->value, ENT_XML1 | ENT_QUOTES, 'UTF-8');
}
/**
* Get length of text
*/
public function getLength(): int
{
return mb_strlen($this->value);
}
/**
* Truncate text to maximum length
*/
public function truncate(int $maxLength, string $suffix = '...'): self
{
if ($this->getLength() <= $maxLength) {
return $this;
}
$truncated = mb_substr($this->value, 0, $maxLength - mb_strlen($suffix));
return new self($truncated . $suffix);
}
/**
* Check if text is empty
*/
public function isEmpty(): bool
{
return trim($this->value) === '';
}
public function __toString(): string
{
return $this->value;
}
}