wandersonwhcr / laminas-romans
Laminas Project Romans Integration
Requires
- php: >=7.4
- laminas/laminas-filter: 2.11.*
- laminas/laminas-hydrator: 4.1.*
- laminas/laminas-validator: 2.14.*
- laminas/laminas-view: 2.12.*
- wandersonwhcr/romans: 1.3.*
Requires (Dev)
- laminas/laminas-modulemanager: 2.10.*
- laminas/laminas-mvc: 3.2.*
- laminas/laminas-servicemanager: 3.6.*
- php-parallel-lint/php-parallel-lint: 1.2.*
- phpmd/phpmd: 2.9.*
- phpunit/phpunit: 9.5.*
- sebastian/phpcpd: 6.0.*
- squizlabs/php_codesniffer: 3.5.*
Suggests
- laminas/laminas-modulemanager: Needed to load this package as Laminas module
- laminas/laminas-servicemanager: Allows the use of service factories into Laminas
README
Laminas Project Romans Integration
Description
This package provides a Laminas Project integration for
Romans library, providing tools to
filter a string
with a Roman number to int
and vice-versa, validate a
string
that contains this type of number and, finally, hydrate the content to
int
.
Installation
This package uses Composer as default repository. You can install it adding the
name of package in require
attribute of composer.json
, pointing to the last
stable version.
{ "require": { "wandersonwhcr/laminas-romans": "^1.0" } }
Usage
This package provide filters, validators and hydrators to use with Laminas projects. Also, this package is provided as a Laminas module, automatically configuring services inside application, but this action is not required.
Filters
Laminas Romans provides a couple of filters to convert a string
with Roman
number to int
and a Integer to a string
that represents the input as Roman
number.
use Laminas\Romans\Filter\RomanToInt as RomanToIntFilter; use Laminas\Romans\Filter\IntToRoman as IntToRomanFilter; $value = 'MCMXCIX'; $filter = new RomanToIntFilter(); $value = $filter->filter($value); // 1999 $filter = new IntToRomanFilter(); $value = $filter->filter($value); // MCMXCIX
Validator
Also, this package include a validator to verify if a string
contains a valid
Roman number.
use Laminas\Romans\Validator\Roman as RomanValidator; $validator = new RomanValidator(); $result = $validator->isValid('MCMXCIX'); // true $result = $validator->isValid('IAI'); // false $messages = $validator->getMessages(); /* $messages = [ 'unknownToken' => 'Unknown token "A" at position 1', ]; */ $result = $validator->isValid('XIIIX'); // false $messages = $validator->getMessages(); /* $messages = [ 'invalidRoman' => 'Invalid Roman number "XIIX"', ]; */
Hydrator
There is a hydrator strategy, responsible to handle Roman numbers. Like any other Laminas strategy, exceptions will be throw for errors.
use InvalidArgumentException; use Laminas\Romans\Hydrator\Strategy\Roman as RomanHydratorStrategy; $value = 'MCMXCIX'; $strategy = new RomanHydratorStrategy(); try { $value = $strategy->hydrate($value); // 1999 $value = $strategy->extract($value); // MCMXCIX } catch (InvalidArgumentException $e) { // unable to convert }
ViewHelper
Finally, there is a view helper to convert int
to Roman numbers directly,
using an internal filter for this job.
use Laminas\Romans\View\Helper\Roman as RomanViewHelper; $helper = new RomanViewHelper(); // Simple Access echo $helper(1999); // MCMXCIX // ... or Inside ViewRenderer echo $this->roman(1999); // MCMXCIX
Module
This package is provided as a Laminas module. To initialize this module, add the package namespace into application loaded modules configuration.
<?php return [ 'modules' => [ // ... 'Laminas\Romans', // ... ], ];
Using this feature you must require Laminas ModuleManager and ServiceManager in
your composer.json
file.
{ "require": { "laminas/laminas-modulemanager": "2.10.*", "laminas/laminas-servicemanager": "3.6.*" } }
Services Available
If you configure this package as a Laminas module, there is a lot of services
configured. The list below shows all services available with Laminas\Romans
module. Items with double-arrow represents services aliases.
Romans\Grammar\Grammar
Romans\Lexer\Lexer
Romans\Parser\Parser
Romans\Filter\IntToRoman
Romans\Filter\RomanToInt
Laminas\Romans\Hydrator\Strategy\Roman
FilterManager
Laminas\Romans\Filter\IntToRoman
Laminas\Romans\Filter\RomanToInt
IntToRoman
=>Laminas\Romans\Filter\IntToRoman
intToRoman
=>Laminas\Romans\Filter\IntToRoman
inttoroman
=>Laminas\Romans\Filter\IntToRoman
RomanToInt
=>Laminas\Romans\Filter\RomanToInt
romanToInt
=>Laminas\Romans\Filter\RomanToInt
romantoint
=>Laminas\Romans\Filter\RomanToInt
ValidatorManager
Laminas\Romans\Validator\Roman
Roman
=>Laminas\Romans\Validator\Roman
roman
=>Laminas\Romans\Validator\Roman
ViewHelperManager
Laminas\Romans\View\Helper\Roman
Roman
=>Laminas\Romans\View\Helper\Roman
roman
=>Laminas\Romans\View\Helper\Roman
Development
You can use Docker Compose to build an image and run a container to develop and test this package.
docker-compose build
docker-compose run romans composer install
docker-compose run romans composer test
License
This package is opensource and available under license MIT described in LICENSE.