mirror of
https://github.com/wiosna-dev/common-library.git
synced 2026-03-12 17:41:50 +01:00
Compare commits
74 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a021870ebd | ||
|
|
d88ead92fe | ||
|
|
5ebde80646 | ||
|
|
fe40d9caee | ||
|
|
ba6c185ed9 | ||
|
|
c175fcd126 | ||
|
|
2247000a8a | ||
|
|
924e492e11 | ||
|
|
ede9a182b4 | ||
|
|
fad0aa607a | ||
|
|
3a38c09ce2 | ||
|
|
07a04d86f0 | ||
|
|
0c7e27b884 | ||
|
|
421d336498 | ||
|
|
292c5e6d4f | ||
|
|
79c09a26a6 | ||
|
|
d46548d102 | ||
|
|
651c4f2259 | ||
|
|
8c3c85608a | ||
|
|
22c96f0a18 | ||
|
|
aa93cd8e25 | ||
|
|
4391baed3d | ||
|
|
b879dbd803 | ||
|
|
7233fdac52 | ||
|
|
ec5129ad6b | ||
|
|
39ede292d6 | ||
|
|
8e9dcb3206 | ||
|
|
06fbf63e09 | ||
|
|
4e600ec599 | ||
|
|
b4ccbbac11 | ||
|
|
c82f53219e | ||
|
|
c8fc0b14ff | ||
|
|
3c3d1b997e | ||
|
|
61209e3f67 | ||
|
|
822dbf6830 | ||
|
|
870bfe48a2 | ||
|
|
ff416fda69 | ||
|
|
61676a445e | ||
|
|
1f5106bcf0 | ||
|
|
971224b2e6 | ||
|
|
7e4b14a92f | ||
|
|
38c68b0952 | ||
|
|
ca9c3bd8f1 | ||
|
|
97c6112919 | ||
|
|
26b136d676 | ||
|
|
4db631223f | ||
|
|
5d6b559108 | ||
|
|
575bb344cd | ||
|
|
35b70f53e7 | ||
|
|
51ff110101 | ||
|
|
2f9138d093 | ||
|
|
75707a3f76 | ||
|
|
8ecbefbba6 | ||
|
|
e850375c19 | ||
|
|
0bd1e1e158 | ||
|
|
535ae65e5e | ||
|
|
60d7b03cd7 | ||
|
|
c20fa5941f | ||
|
|
a448d592d2 | ||
|
|
e53273fb32 | ||
|
|
cc30ad8d9e | ||
|
|
9f08a2aaaf | ||
|
|
b49605a26c | ||
|
|
8441c82356 | ||
|
|
55dde2e898 | ||
|
|
a32e0c4cca | ||
|
|
834b24f348 | ||
|
|
9342f0e87e | ||
|
|
72fd87e165 | ||
|
|
64499b49d3 | ||
|
|
848adef015 | ||
|
|
1431fd9935 | ||
|
|
3bb7a182c2 | ||
|
|
5c9436e4e2 |
48
.gitignore
vendored
48
.gitignore
vendored
@@ -1,5 +1,5 @@
|
|||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# Environment-related parameters
|
### Environment-related parameters
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
.env
|
.env
|
||||||
|
|
||||||
@@ -51,42 +51,15 @@
|
|||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
### Compiled source
|
### JetBrains template
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
*.com
|
|
||||||
*.class
|
|
||||||
*.dll
|
|
||||||
*.exe
|
|
||||||
*.o
|
|
||||||
*.so
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
### Shell scripts
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
/*.sh
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
### JetBrains
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
/.idea
|
/.idea
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
### NetBeans template
|
### macOS template
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
nbproject/private/
|
|
||||||
nbbuild/
|
|
||||||
dist/
|
|
||||||
nbdist/
|
|
||||||
nbactions.xml
|
|
||||||
.nb-gradle/
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
|
||||||
### OSX template
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
# General
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.AppleDouble
|
.AppleDouble
|
||||||
.LSOverride
|
.LSOverride
|
||||||
@@ -104,6 +77,7 @@ Icon
|
|||||||
.TemporaryItems
|
.TemporaryItems
|
||||||
.Trashes
|
.Trashes
|
||||||
.VolumeIcon.icns
|
.VolumeIcon.icns
|
||||||
|
.com.apple.timemachine.donotpresent
|
||||||
|
|
||||||
# Directories potentially created on remote AFP share
|
# Directories potentially created on remote AFP share
|
||||||
.AppleDB
|
.AppleDB
|
||||||
@@ -127,16 +101,23 @@ Temporary Items
|
|||||||
# Linux trash folder which might appear on any partition or disk
|
# Linux trash folder which might appear on any partition or disk
|
||||||
.Trash-*
|
.Trash-*
|
||||||
|
|
||||||
|
# .nfs files are created when an open file is removed but is still being accessed
|
||||||
|
.nfs*
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
### Windows template
|
### Windows template
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# Windows image file caches
|
# Windows thumbnail cache files
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
ehthumbs.db
|
ehthumbs.db
|
||||||
|
ehthumbs_vista.db
|
||||||
|
|
||||||
|
# Dump file
|
||||||
|
*.stackdump
|
||||||
|
|
||||||
# Folder config file
|
# Folder config file
|
||||||
Desktop.ini
|
[Dd]esktop.ini
|
||||||
|
|
||||||
# Recycle Bin used on file shares
|
# Recycle Bin used on file shares
|
||||||
$RECYCLE.BIN/
|
$RECYCLE.BIN/
|
||||||
@@ -144,6 +125,7 @@ $RECYCLE.BIN/
|
|||||||
# Windows Installer files
|
# Windows Installer files
|
||||||
*.cab
|
*.cab
|
||||||
*.msi
|
*.msi
|
||||||
|
*.msix
|
||||||
*.msm
|
*.msm
|
||||||
*.msp
|
*.msp
|
||||||
|
|
||||||
|
|||||||
@@ -4,13 +4,14 @@ php:
|
|||||||
- 5.6
|
- 5.6
|
||||||
- 7.0
|
- 7.0
|
||||||
- 7.1
|
- 7.1
|
||||||
|
- 7.2
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- sudo locale-gen de_DE.UTF-8 es_ES.UTF-8 en_GB.UTF-8 en_US.UTF-8 fr_FR.UTF-8 it_IT.UTF-8 pl_PL.UTF-8 ru_RU.UTF-8
|
- sudo locale-gen de_DE.UTF-8 es_ES.UTF-8 en_GB.UTF-8 en_US.UTF-8 fr_FR.UTF-8 it_IT.UTF-8 pl_PL.UTF-8 ru_RU.UTF-8
|
||||||
- composer global require hirak/prestissimo
|
- composer global require hirak/prestissimo
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- travis_wait 30 composer install -vvv
|
- travis_wait 30 composer install -v
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- php ./vendor/bin/phpunit
|
- php ./vendor/bin/phpunit
|
||||||
|
|||||||
64
CHANGELOG.md
64
CHANGELOG.md
@@ -1,7 +1,69 @@
|
|||||||
# Meritoo Common Library
|
# Meritoo Common Library
|
||||||
|
|
||||||
Common and useful classes, methods, exceptions etc.
|
Common and useful classes, methods, exceptions etc.
|
||||||
|
|
||||||
## 0.0.19
|
# 0.1.6
|
||||||
|
|
||||||
|
1. Arrays > refactoring & more tests
|
||||||
|
2. ValueObject > Human > represents a human
|
||||||
|
3. Tests > use `Meritoo\Test\Common` namespace (instead of `Meritoo\Common\Test`)
|
||||||
|
4. Tests > use @dataProvider
|
||||||
|
|
||||||
|
# 0.1.5
|
||||||
|
|
||||||
|
1. Tests > Date > one more test case
|
||||||
|
2. Phing > update configuration
|
||||||
|
3. Miscellaneous > variableDump() method > remove, because unnecessary
|
||||||
|
4. Regex > createSlug() method > returns slug for given value
|
||||||
|
5. Arrays > getNonEmptyValues() method > returns non-empty values, e.g. without "" (empty string), null or []
|
||||||
|
6. Arrays > getNonEmptyValuesAsString() method > returns non-empty values concatenated by given separator
|
||||||
|
7. ValueObject > Company > represents a company
|
||||||
|
8. ValueObject > BankAccount > represents bank account
|
||||||
|
9. ValueObject > Address > represents address of company, institution, user etc.
|
||||||
|
|
||||||
|
# 0.1.4
|
||||||
|
|
||||||
|
1. Phing > update configuration
|
||||||
|
2. Utilities > Date > update descriptions of methods
|
||||||
|
3. Docker > docker-compose.yml > add "phpunit" service > used to run PHPUnit's tests
|
||||||
|
4. Reflection > setPropertiesValues() method > sets values of properties in given object
|
||||||
|
|
||||||
|
# 0.1.3
|
||||||
|
|
||||||
|
1. Tests > refactoring & minor improvements
|
||||||
|
2. Utilities > CssSelector > useful methods related to CSS selectors
|
||||||
|
3. Utilities > Bootstrap4CssSelector > useful methods related to CSS selectors and the Bootstrap4 (front-end component library)
|
||||||
|
|
||||||
|
# 0.1.2
|
||||||
|
|
||||||
|
1. Documentation > Value Objects
|
||||||
|
2. Docker > improve performance
|
||||||
|
3. Utilities > Reflection > setPropertyValue() method > sets value of given property
|
||||||
|
|
||||||
|
# 0.1.1
|
||||||
|
|
||||||
|
1. TravisCI > run using PHP 7.2 too
|
||||||
|
2. ValueObject > class Version > represents version of software
|
||||||
|
3. Move version of this package to `VERSION` file (from `composer.json` file)
|
||||||
|
|
||||||
|
# 0.1.0
|
||||||
|
|
||||||
|
1. Composer > support/require PHP 5.6+ (instead of 5.5.9+)
|
||||||
|
2. Docker > rename `php-cli` service to `php`
|
||||||
|
3. Exceptions > create instance of exception using static `create()` method (instead of constructor)
|
||||||
|
4. Documentation > Exceptions
|
||||||
|
|
||||||
|
# 0.0.21
|
||||||
|
|
||||||
|
1. Composer > require ext-pcre
|
||||||
|
2. Arrays > minor refactoring
|
||||||
|
3. Update @author and @copyright in classes' descriptions
|
||||||
|
|
||||||
|
# 0.0.20
|
||||||
|
|
||||||
|
1. Collection > add() method > treat empty string as not provided index (same as null)
|
||||||
|
|
||||||
|
# 0.0.19
|
||||||
|
|
||||||
1. Add this changelog
|
1. Add this changelog
|
||||||
2. Reorganize documentation & update [Readme](README.md)
|
2. Reorganize documentation & update [Readme](README.md)
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
# Meritoo Common Library
|
# Meritoo Common Library
|
||||||
|
|
||||||
Common and useful classes, methods, exceptions etc.
|
Common and useful classes, methods, exceptions etc.
|
||||||
|
|
||||||
[](https://travis-ci.org/meritoo/common-library) [](https://packagist.org/packages/meritoo/common-library) [](https://github.com/meritoo/common-library) [](https://github.com/meritoo/common-library) [](https://coveralls.io/github/meritoo/common-library?branch=master)
|
[](https://img.shields.io/badge/php-%3E%3D5.6-blue.svg) [](https://travis-ci.org/meritoo/common-library) [](https://packagist.org/packages/meritoo/common-library) [](https://github.com/meritoo/common-library) [](https://github.com/meritoo/common-library) [](https://coveralls.io/github/meritoo/common-library?branch=master)
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
@@ -17,7 +18,11 @@ composer require meritoo/common-library
|
|||||||
|
|
||||||
1. [Base test case (with common methods and data providers)](docs/Base-test-case.md)
|
1. [Base test case (with common methods and data providers)](docs/Base-test-case.md)
|
||||||
2. [Collection of elements](docs/Collection-of-elements.md)
|
2. [Collection of elements](docs/Collection-of-elements.md)
|
||||||
3. [Static methods](docs/Static-methods.md)
|
3. [Exceptions](docs/Static-methods.md)
|
||||||
|
4. [Static methods](docs/Static-methods.md)
|
||||||
|
1. [Arrays](docs/Static-methods/Arrays.md)
|
||||||
|
2. [Regex](docs/Static-methods/Regex.md)
|
||||||
|
5. [Value Objects](docs/Value-Objects.md)
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
|
|
||||||
|
|||||||
38
build.xml
38
build.xml
@@ -1,46 +1,30 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0">
|
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0">
|
||||||
<!-- Properties -->
|
<!-- Properties -->
|
||||||
<if>
|
<if>
|
||||||
<available file="phing/properties" property="custom.properties.available"/>
|
<available file="${project.basedir}/phing/properties" property="custom.properties.available"/>
|
||||||
<then>
|
<then>
|
||||||
<property file="phing/properties"/>
|
<property file="${project.basedir}/phing/properties"/>
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
<property file="phing/properties.dist"/>
|
<property file="${project.basedir}/phing/properties.dist"/>
|
||||||
</else>
|
</else>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
<!-- Default / main target -->
|
<!-- Default / main target -->
|
||||||
<target name="build:main"
|
<target name="build:main"
|
||||||
depends="build:app, build:tests"
|
depends="build:app,
|
||||||
description="Builds everything and runs all tests" />
|
build:tests"
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- Build app -->
|
<!-- Build app -->
|
||||||
<target name="build:app" description="Prepares app to build and tests">
|
<target name="build:app">
|
||||||
<phing phingfile="phing/app.xml" haltonfailure="true"/>
|
<phing phingfile="${project.basedir}/phing/app.xml" haltonfailure="true"/>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Build tests -->
|
<!-- Build tests -->
|
||||||
<target name="build:tests" description="Runs all tests, checks and creates docs">
|
<target name="build:tests">
|
||||||
<phing phingfile="phing/tests.xml" haltonfailure="true"/>
|
<phing phingfile="${project.basedir}/phing/tests.xml" haltonfailure="true"/>
|
||||||
|
|
||||||
<!--
|
|
||||||
Conditional running of tests.
|
|
||||||
Disabled, because not required.
|
|
||||||
|
|
||||||
Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
2017-02-22
|
|
||||||
|
|
||||||
<if>
|
|
||||||
<equals arg1="${env}" arg2="test" />
|
|
||||||
<then>
|
|
||||||
<phing phingfile="phing/tests.xml" haltonfailure="true" />
|
|
||||||
</then>
|
|
||||||
<else>
|
|
||||||
<echo message="[Skipped] Running tests, checks and creating docs, because it's a not 'test' environment..." />
|
|
||||||
</else>
|
|
||||||
</if>
|
|
||||||
-->
|
|
||||||
</target>
|
</target>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
"name": "meritoo/common-library",
|
"name": "meritoo/common-library",
|
||||||
"description": "Useful classes, methods, extensions etc.",
|
"description": "Useful classes, methods, extensions etc.",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"version": "0.0.19",
|
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Meritoo.pl",
|
"name": "Meritoo.pl",
|
||||||
@@ -11,7 +10,13 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.5.9",
|
"ext-dom": "*",
|
||||||
|
"ext-fileinfo": "*",
|
||||||
|
"ext-json": "*",
|
||||||
|
"ext-simplexml": "*",
|
||||||
|
"php": ">=5.6",
|
||||||
|
"ext-intl": "*",
|
||||||
|
"ext-pcre": "*",
|
||||||
"doctrine/orm": "^2.5",
|
"doctrine/orm": "^2.5",
|
||||||
"gedmo/doctrine-extensions": "^2.4"
|
"gedmo/doctrine-extensions": "^2.4"
|
||||||
},
|
},
|
||||||
@@ -31,7 +36,7 @@
|
|||||||
},
|
},
|
||||||
"autoload-dev": {
|
"autoload-dev": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Meritoo\\Common\\Test\\": "tests/"
|
"Meritoo\\Test\\Common\\": "tests/"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
|
|||||||
@@ -1,20 +1,33 @@
|
|||||||
version: '3'
|
version: '3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
php-cli:
|
#
|
||||||
image: ${DOCKER_CONTAINER_OWNER}/${DOCKER_CONTAINER_PROJECT}-php-cli
|
# Required to run project
|
||||||
container_name: ${DOCKER_CONTAINER_OWNER}-${DOCKER_CONTAINER_PROJECT}-php-cli
|
#
|
||||||
|
php:
|
||||||
|
image: ${DOCKER_CONTAINER_OWNER}/${DOCKER_CONTAINER_PROJECT}-php
|
||||||
|
container_name: ${DOCKER_CONTAINER_OWNER}-${DOCKER_CONTAINER_PROJECT}-php
|
||||||
entrypoint: php
|
entrypoint: php
|
||||||
command: -S 0.0.0.0:9999
|
command: -S 0.0.0.0:9999
|
||||||
build:
|
build:
|
||||||
context: ./docker/config
|
context: ./docker/config
|
||||||
args:
|
args:
|
||||||
- TIMEZONE=$TIMEZONE
|
- TIMEZONE=${TIMEZONE}
|
||||||
volumes:
|
volumes:
|
||||||
- .:/project
|
- .:/project:cached
|
||||||
composer:
|
composer:
|
||||||
image: ${DOCKER_CONTAINER_OWNER}/${DOCKER_CONTAINER_PROJECT}-php-cli
|
image: ${DOCKER_CONTAINER_OWNER}/${DOCKER_CONTAINER_PROJECT}-php
|
||||||
container_name: ${DOCKER_CONTAINER_OWNER}-${DOCKER_CONTAINER_PROJECT}-composer
|
container_name: ${DOCKER_CONTAINER_OWNER}-${DOCKER_CONTAINER_PROJECT}-composer
|
||||||
entrypoint: composer
|
entrypoint: php -d memory_limit=-1 /usr/local/bin/composer
|
||||||
volumes:
|
volumes:
|
||||||
- .:/project
|
- .:/project:cached
|
||||||
|
#
|
||||||
|
# Required to run PHPUnit's tests
|
||||||
|
#
|
||||||
|
phpunit:
|
||||||
|
image: ${DOCKER_CONTAINER_OWNER}/${DOCKER_CONTAINER_PROJECT}-php
|
||||||
|
container_name: ${DOCKER_CONTAINER_OWNER}-${DOCKER_CONTAINER_PROJECT}-phpunit
|
||||||
|
entrypoint: ./vendor/bin/phpunit
|
||||||
|
command: --version
|
||||||
|
volumes:
|
||||||
|
- .:/project:cached
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM php:5.5-cli
|
FROM php:5.6-cli
|
||||||
MAINTAINER Meritoo <github@meritoo.pl>
|
MAINTAINER Meritoo <github@meritoo.pl>
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -98,7 +98,7 @@ ENV COMPOSER_ALLOW_SUPERUSER 1
|
|||||||
#
|
#
|
||||||
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
|
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
|
||||||
&& php -r "if (hash_file('SHA384', 'composer-setup.php') === \
|
&& php -r "if (hash_file('SHA384', 'composer-setup.php') === \
|
||||||
'544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo \
|
'93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo \
|
||||||
'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
|
'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
|
||||||
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
|
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
|
||||||
&& php -r "unlink('composer-setup.php');" \
|
&& php -r "unlink('composer-setup.php');" \
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# Meritoo Common Library
|
# Meritoo Common Library
|
||||||
|
|
||||||
Common and useful classes, methods, exceptions etc.
|
Common and useful classes, methods, exceptions etc.
|
||||||
|
|
||||||
# Base test case (with common methods and data providers)
|
# Base test case (with common methods and data providers)
|
||||||
@@ -45,6 +46,10 @@ class MimeTypesTest extends BaseTestCase
|
|||||||
|
|
||||||
1. [**Base test case (with common methods and data providers)**](Base-test-case.md)
|
1. [**Base test case (with common methods and data providers)**](Base-test-case.md)
|
||||||
2. [Collection of elements](Collection-of-elements.md)
|
2. [Collection of elements](Collection-of-elements.md)
|
||||||
3. [Static methods](Static-methods.md)
|
3. [Exceptions](Exceptions.md)
|
||||||
|
4. [Static methods](Static-methods.md)
|
||||||
|
1. [Arrays](Static-methods/Arrays.md)
|
||||||
|
2. [Regex](Static-methods/Regex.md)
|
||||||
|
5. [Value Objects](Value-Objects.md)
|
||||||
|
|
||||||
[‹ Back to `Readme`](../README.md)
|
[‹ Back to `Readme`](../README.md)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# Meritoo Common Library
|
# Meritoo Common Library
|
||||||
|
|
||||||
Common and useful classes, methods, exceptions etc.
|
Common and useful classes, methods, exceptions etc.
|
||||||
|
|
||||||
# Collection of elements
|
# Collection of elements
|
||||||
@@ -43,6 +44,10 @@ var_dump($simpleCollection->has('dolor')); // bool(true)
|
|||||||
|
|
||||||
1. [Base test case (with common methods and data providers)](Base-test-case.md)
|
1. [Base test case (with common methods and data providers)](Base-test-case.md)
|
||||||
2. [**Collection of elements**](Collection-of-elements.md)
|
2. [**Collection of elements**](Collection-of-elements.md)
|
||||||
3. [Static methods](Static-methods.md)
|
3. [Exceptions](Exceptions.md)
|
||||||
|
4. [Static methods](Static-methods.md)
|
||||||
|
1. [Arrays](Static-methods/Arrays.md)
|
||||||
|
2. [Regex](Static-methods/Regex.md)
|
||||||
|
5. [Value Objects](Value-Objects.md)
|
||||||
|
|
||||||
[‹ Back to `Readme`](../README.md)
|
[‹ Back to `Readme`](../README.md)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# Meritoo Common Library
|
# Meritoo Common Library
|
||||||
|
|
||||||
Development-related information
|
Development-related information
|
||||||
|
|
||||||
# Requirements
|
# Requirements
|
||||||
@@ -14,10 +15,10 @@ Development-related information
|
|||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Install packages by running command:
|
2. Rebuild project by running command (installs packages, prepares required directories and runs tests):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose run composer install
|
docker-compose exec php phing
|
||||||
```
|
```
|
||||||
|
|
||||||
> [What is Docker?](https://www.docker.com/what-docker)
|
> [What is Docker?](https://www.docker.com/what-docker)
|
||||||
@@ -27,7 +28,7 @@ Development-related information
|
|||||||
Available as `composer` service. You can run any Composer's command using the `composer` service:
|
Available as `composer` service. You can run any Composer's command using the `composer` service:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose run composer <command>
|
docker-compose run --rm composer [command]
|
||||||
```
|
```
|
||||||
|
|
||||||
Examples below.
|
Examples below.
|
||||||
@@ -35,25 +36,25 @@ Examples below.
|
|||||||
##### Install packages
|
##### Install packages
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose run composer install
|
docker-compose run --rm composer install
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Update packages
|
##### Update packages
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose run composer update
|
docker-compose run --rm composer update
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Add package
|
##### Add package
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose run composer require <vendor>/<package>
|
docker-compose run --rm composer require [vendor]/[package]
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Remove package
|
##### Remove package
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose run composer remove <vendor>/<package>
|
docker-compose run --rm composer remove [vendor]/[package]
|
||||||
```
|
```
|
||||||
|
|
||||||
# Coding Standards Fixer
|
# Coding Standards Fixer
|
||||||
@@ -61,13 +62,19 @@ docker-compose run composer remove <vendor>/<package>
|
|||||||
Fix coding standard by running command:
|
Fix coding standard by running command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose exec php-cli php-cs-fixer fix
|
docker-compose exec php php-cs-fixer fix
|
||||||
|
```
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose exec php phing -f phing/tests.xml build:fix-coding-standards
|
||||||
```
|
```
|
||||||
|
|
||||||
Omit cache and run the Fixer from scratch by running command:
|
Omit cache and run the Fixer from scratch by running command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose exec php-cli rm .php_cs.cache && docker-compose exec php-cli php-cs-fixer fix
|
docker-compose exec php rm .php_cs.cache && docker-compose exec php php-cs-fixer fix
|
||||||
```
|
```
|
||||||
|
|
||||||
> [Want more?](https://cs.sensiolabs.org)
|
> [Want more?](https://cs.sensiolabs.org)
|
||||||
@@ -76,43 +83,41 @@ docker-compose exec php-cli rm .php_cs.cache && docker-compose exec php-cli php-
|
|||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
Install required packages by running command: `docker-compose run composer install`.
|
Install required packages by running command: `docker-compose run --rm composer install`.
|
||||||
|
|
||||||
### Running tests
|
### Running [PHPUnit](https://phpunit.de) tests
|
||||||
|
|
||||||
#### Simply & quick, without code coverage
|
##### Easy (with code coverage)
|
||||||
|
|
||||||
Tests are running using Docker and `php-cli` service defined in `docker-compose.yml`. Example:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose exec php-cli phpunit --no-coverage
|
docker-compose run --rm phpunit --verbose
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also run them in container. In this case you have to run 2 commands:
|
or
|
||||||
1. Enter container:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose exec php-cli bash
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Run tests:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
phpunit --no-coverage
|
|
||||||
```
|
|
||||||
|
|
||||||
#### With code coverage
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose exec php-cli phpunit
|
docker-compose exec php phing -f phing/tests.xml test:phpunit
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### Quick (without code coverage)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose run --rm phpunit --verbose --no-coverage
|
||||||
|
```
|
||||||
|
|
||||||
|
# Versions of packages
|
||||||
|
|
||||||
|
### squizlabs/php_codesniffer
|
||||||
|
|
||||||
|
I have to use [squizlabs/php_codesniffer](https://packagist.org/packages/squizlabs/php_codesniffer) `^2.9` instead of
|
||||||
|
`^3.3`, because [Phing doesn't support 3.x PHP_CodeSniffer](https://github.com/phingofficial/phing/issues/716).
|
||||||
|
|
||||||
# Other
|
# Other
|
||||||
|
|
||||||
Rebuild project and run tests by running command:
|
Rebuild project and run tests by running command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose exec php-cli phing
|
docker-compose exec php phing
|
||||||
```
|
```
|
||||||
|
|
||||||
[‹ Back to `Readme`](../README.md)
|
[‹ Back to `Readme`](../README.md)
|
||||||
|
|||||||
64
docs/Exceptions.md
Normal file
64
docs/Exceptions.md
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# Meritoo Common Library
|
||||||
|
|
||||||
|
Common and useful classes, methods, exceptions etc.
|
||||||
|
|
||||||
|
# Exceptions
|
||||||
|
|
||||||
|
### Create instance of exception
|
||||||
|
|
||||||
|
This package contains a lot of exceptions. Each of them contains static method `create()` with proper arguments that is used to create instance of the exception. Example:
|
||||||
|
|
||||||
|
```php
|
||||||
|
use Meritoo\Common\Exception\Bundle\IncorrectBundleNameException;
|
||||||
|
throw IncorrectBundleNameException::create('RisusIpsum');
|
||||||
|
```
|
||||||
|
|
||||||
|
### Base exception for unknown type of something
|
||||||
|
|
||||||
|
##### Short description
|
||||||
|
|
||||||
|
It's a `Meritoo\Common\Exception\Base\UnknownTypeException` class. Related to `Meritoo\Common\Type\Base\BaseType` class that represents type of something, e.g. type of button, order.
|
||||||
|
|
||||||
|
##### Usage
|
||||||
|
|
||||||
|
You can extend `Meritoo\Common\Exception\Base\UnknownTypeException` class and create your own static method, e.g. `createException()`, which will be used create instance of the exception. Inside the `createException()` method you can call `parent::create()` method.
|
||||||
|
|
||||||
|
##### Example
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Your\Package\Exception\Type;
|
||||||
|
|
||||||
|
use Meritoo\Common\Exception\Base\UnknownTypeException;
|
||||||
|
use Your\Package\Type\SimpleType;
|
||||||
|
|
||||||
|
class UnknownSimpleTypeException extends UnknownTypeException
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Creates exception
|
||||||
|
*
|
||||||
|
* @param string $unknownType Unknown and simple type
|
||||||
|
* @return UnknownSimpleTypeException
|
||||||
|
*/
|
||||||
|
public static function createException($unknownType)
|
||||||
|
{
|
||||||
|
/* @var UnknownSimpleTypeException $exception */
|
||||||
|
$exception = parent::create($unknownType, new SimpleType(), 'my simple type of something');
|
||||||
|
|
||||||
|
return $exception;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# More
|
||||||
|
|
||||||
|
1. [Base test case (with common methods and data providers)](Base-test-case.md)
|
||||||
|
2. [Collection of elements](Collection-of-elements.md)
|
||||||
|
3. [**Exceptions**](Exceptions.md)
|
||||||
|
4. [Static methods](Static-methods.md)
|
||||||
|
1. [Arrays](Static-methods/Arrays.md)
|
||||||
|
2. [Regex](Static-methods/Regex.md)
|
||||||
|
5. [Value Objects](Value-Objects.md)
|
||||||
|
|
||||||
|
[‹ Back to `Readme`](../README.md)
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
# Meritoo Common Library
|
# Meritoo Common Library
|
||||||
|
|
||||||
Common and useful classes, methods, exceptions etc.
|
Common and useful classes, methods, exceptions etc.
|
||||||
|
|
||||||
# Static methods
|
# Static methods
|
||||||
@@ -16,6 +17,10 @@ var_dump($firstElement); // string(5) "lorem"
|
|||||||
|
|
||||||
1. [Base test case (with common methods and data providers)](Base-test-case.md)
|
1. [Base test case (with common methods and data providers)](Base-test-case.md)
|
||||||
2. [Collection of elements](Collection-of-elements.md)
|
2. [Collection of elements](Collection-of-elements.md)
|
||||||
3. [**Static methods**](Static-methods.md)
|
3. [Exceptions](Exceptions.md)
|
||||||
|
4. [**Static methods**](Static-methods.md)
|
||||||
|
1. [Arrays](Static-methods/Arrays.md)
|
||||||
|
2. [Regex](Static-methods/Regex.md)
|
||||||
|
5. [Value Objects](Value-Objects.md)
|
||||||
|
|
||||||
[‹ Back to `Readme`](../README.md)
|
[‹ Back to `Readme`](../README.md)
|
||||||
|
|||||||
78
docs/Static-methods/Arrays.md
Normal file
78
docs/Static-methods/Arrays.md
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
# Meritoo Common Library
|
||||||
|
|
||||||
|
Common and useful classes, methods, exceptions etc.
|
||||||
|
|
||||||
|
# Arrays
|
||||||
|
|
||||||
|
> Useful methods related to arrays
|
||||||
|
|
||||||
|
Class: `Meritoo\Common\Utilities\Arrays`
|
||||||
|
File: `src/Utilities/Arrays.php`
|
||||||
|
|
||||||
|
### getNonEmptyValues(array $values)
|
||||||
|
|
||||||
|
> Returns non-empty values, e.g. without "" (empty string), null or []
|
||||||
|
|
||||||
|
##### Arguments
|
||||||
|
|
||||||
|
- `array $values` - The values to filter
|
||||||
|
|
||||||
|
##### Example 1
|
||||||
|
|
||||||
|
- values: `[]` (no values)
|
||||||
|
- result: `[]` (an empty array)
|
||||||
|
|
||||||
|
##### Example 2
|
||||||
|
|
||||||
|
- values: `[null, ""]` (all empty values)
|
||||||
|
- result: `[]` (an empty array)
|
||||||
|
|
||||||
|
##### Example 3
|
||||||
|
|
||||||
|
- values: `["test 1", "", 123, null, 0]`
|
||||||
|
- result: `["test 1", 123, 0]`
|
||||||
|
|
||||||
|
### getNonEmptyValuesAsString(array $values, $separator = ', ')
|
||||||
|
|
||||||
|
> Returns non-empty values concatenated by given separator
|
||||||
|
|
||||||
|
##### Arguments
|
||||||
|
|
||||||
|
- `array $values` - The values to filter
|
||||||
|
- `[string $separator]` - (optional) Separator used to implode the values. Default: ", ".
|
||||||
|
|
||||||
|
##### Example 1
|
||||||
|
|
||||||
|
- values: `[]` (no values)
|
||||||
|
- separator: default or any other string
|
||||||
|
- result: `""` (an empty string)
|
||||||
|
|
||||||
|
##### Example 2
|
||||||
|
|
||||||
|
- values: `[null, ""]` (all empty values)
|
||||||
|
- separator: default or any other string
|
||||||
|
- result: `""` (an empty string)
|
||||||
|
|
||||||
|
##### Example 3
|
||||||
|
|
||||||
|
- values: `["test 1", "", 123, null, 0]`
|
||||||
|
- separator: `", "` (default)
|
||||||
|
- result: `"test 1, 123, 0"`
|
||||||
|
|
||||||
|
##### Example 4
|
||||||
|
|
||||||
|
- values: `["test 1", "", 123, null, 0]`
|
||||||
|
- separator: `" | "`
|
||||||
|
- result: `"test 1 | 123 | 0"`
|
||||||
|
|
||||||
|
# More
|
||||||
|
|
||||||
|
1. [Base test case (with common methods and data providers)](../Base-test-case.md)
|
||||||
|
2. [Collection of elements](../Collection-of-elements.md)
|
||||||
|
3. [Exceptions](../Exceptions.md)
|
||||||
|
4. [Static methods](../Static-methods.md)
|
||||||
|
1. [**Arrays**](Arrays.md)
|
||||||
|
2. [Regex](Regex.md)
|
||||||
|
5. [Value Objects](../Value-Objects.md)
|
||||||
|
|
||||||
|
[‹ Back to `Readme`](../../README.md)
|
||||||
45
docs/Static-methods/Regex.md
Normal file
45
docs/Static-methods/Regex.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Meritoo Common Library
|
||||||
|
|
||||||
|
Common and useful classes, methods, exceptions etc.
|
||||||
|
|
||||||
|
# Regex
|
||||||
|
|
||||||
|
> Useful methods related to regular expressions
|
||||||
|
|
||||||
|
Class: `Meritoo\Common\Utilities\Regex`
|
||||||
|
File: `src/Utilities/Regex.php`
|
||||||
|
|
||||||
|
### createSlug($value)
|
||||||
|
|
||||||
|
> Returns slug for given value
|
||||||
|
|
||||||
|
##### Arguments
|
||||||
|
|
||||||
|
- `string $value` - Value that should be transformed to slug
|
||||||
|
|
||||||
|
##### Example 1
|
||||||
|
|
||||||
|
- value: non-scalar or `null`
|
||||||
|
- result: `false`
|
||||||
|
|
||||||
|
##### Example 2
|
||||||
|
|
||||||
|
- value: `""` (an empty string)
|
||||||
|
- result: `""` (an empty string)
|
||||||
|
|
||||||
|
##### Example 3
|
||||||
|
|
||||||
|
- value: `"Lorem ipsum. Dolor sit 12.34 amet."`
|
||||||
|
- result: `"lorem-ipsum-dolor-sit-1234-amet"`
|
||||||
|
|
||||||
|
# More
|
||||||
|
|
||||||
|
1. [Base test case (with common methods and data providers)](../Base-test-case.md)
|
||||||
|
2. [Collection of elements](../Collection-of-elements.md)
|
||||||
|
3. [Exceptions](../Exceptions.md)
|
||||||
|
4. [Static methods](../Static-methods.md)
|
||||||
|
1. [Arrays](../Static-methods/Arrays.md)
|
||||||
|
2. [**Regex**](Regex.md)
|
||||||
|
5. [Value Objects](../Value-Objects.md)
|
||||||
|
|
||||||
|
[‹ Back to `Readme`](../../README.md)
|
||||||
237
docs/Value-Objects.md
Normal file
237
docs/Value-Objects.md
Normal file
@@ -0,0 +1,237 @@
|
|||||||
|
# Meritoo Common Library
|
||||||
|
|
||||||
|
Common and useful classes, methods, exceptions etc.
|
||||||
|
|
||||||
|
# Value Objects
|
||||||
|
|
||||||
|
Located in `Meritoo\Common\ValueObject` namespace and in `src/ValueObject/` directory.
|
||||||
|
|
||||||
|
### Address
|
||||||
|
|
||||||
|
##### Namespace
|
||||||
|
|
||||||
|
`Meritoo\Common\ValueObject\Address`
|
||||||
|
|
||||||
|
##### Info
|
||||||
|
|
||||||
|
Represents address of company, institution, user etc. Contains properties:
|
||||||
|
1. `$street` - the street
|
||||||
|
2. `$buildingNumber` - the number of building
|
||||||
|
3. `$flatNumber` - the number of flat
|
||||||
|
4. `$zipCode` - the zip code
|
||||||
|
5. `$city` - the city, location
|
||||||
|
|
||||||
|
##### New instance
|
||||||
|
|
||||||
|
New instance can be created using constructor
|
||||||
|
|
||||||
|
```php
|
||||||
|
new Address('New York', '00123', '4th Avenue', '10', '200');
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Methods
|
||||||
|
|
||||||
|
Has getters for each property, e.g. `getFlatNumber()` or `getZipCode()`, and 1 extra method:
|
||||||
|
|
||||||
|
```php
|
||||||
|
getFullStreet()
|
||||||
|
```
|
||||||
|
|
||||||
|
that returns name of street with related numbers (building & flat number).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$address = new Address('New York', '00123', '4th Avenue', '10', '200');
|
||||||
|
$fullStreet = $address->getFullStreet(); // "4th Avenue 10/200"
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Conversion to string (the `__toString()` method)
|
||||||
|
|
||||||
|
Instance of `Address` may be represented as string that contains all non-empty properties separated by `, `.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$address = new Address('New York', '00123', '4th Avenue', '10', '200');
|
||||||
|
$asString = (string)$address; // "4th Avenue 10/200, 00123, New York"
|
||||||
|
```
|
||||||
|
|
||||||
|
### BankAccount
|
||||||
|
|
||||||
|
##### Namespace
|
||||||
|
|
||||||
|
`Meritoo\Common\ValueObject\BankAccount`
|
||||||
|
|
||||||
|
##### Info
|
||||||
|
|
||||||
|
Represents bank account. Contains properties:
|
||||||
|
1. `$bankName` - name of bank
|
||||||
|
2. `$accountNumber` - number of bank's account
|
||||||
|
|
||||||
|
##### New instance
|
||||||
|
|
||||||
|
New instance can be created using constructor
|
||||||
|
|
||||||
|
```php
|
||||||
|
new BankAccount('Bank of America', '1234567890')
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Methods
|
||||||
|
|
||||||
|
Has getters for each property `getBankName()` and `getAccountNumber()`.
|
||||||
|
|
||||||
|
##### Conversion to string (the `__toString()` method)
|
||||||
|
|
||||||
|
Instance of `BankAccount` may be represented as string that contains all non-empty properties separated by `, `.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$bank = new BankAccount('Bank of America', '1234567890');
|
||||||
|
$asString = (string)$bank; // "Bank of America, 1234567890"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Company
|
||||||
|
|
||||||
|
##### Namespace
|
||||||
|
|
||||||
|
`Meritoo\Common\ValueObject\Company`
|
||||||
|
|
||||||
|
##### Info
|
||||||
|
|
||||||
|
Represents a company. Contains properties:
|
||||||
|
1. `$name` - name of company
|
||||||
|
2. `$address` - address of company
|
||||||
|
3. `$bankAccount` - bank account of company
|
||||||
|
|
||||||
|
##### New instance
|
||||||
|
|
||||||
|
New instance can be created using constructor:
|
||||||
|
|
||||||
|
```php
|
||||||
|
new Company(
|
||||||
|
'Test 1',
|
||||||
|
new Address('New York', '00123', '4th Avenue', '10', '200'),
|
||||||
|
new BankAccount('Bank 1', '12345')
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Methods
|
||||||
|
|
||||||
|
Has getters for each property `getName()`, `getAddress()` and `getBankAccount()`.
|
||||||
|
|
||||||
|
##### Conversion to string (the `__toString()` method)
|
||||||
|
|
||||||
|
Instance of `Company` may be represented as string that contains all non-empty properties separated by `, `.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$company = new Company(
|
||||||
|
'Test 1',
|
||||||
|
new Address('New York', '00123', '4th Avenue', '10', '200'),
|
||||||
|
new BankAccount('Bank 1', '12345')
|
||||||
|
);
|
||||||
|
|
||||||
|
$asString = (string)$company; // "Test 1, 4th Avenue 10/200, 00123, New York, Bank 1, 12345"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Human
|
||||||
|
|
||||||
|
##### Namespace
|
||||||
|
|
||||||
|
`Meritoo\Common\ValueObject\Human`
|
||||||
|
|
||||||
|
##### Info
|
||||||
|
|
||||||
|
Represents human. Based on `\Meritoo\Common\Traits\ValueObject\HumanTrait` trait. Contains properties same as `HumanTrait` trait:
|
||||||
|
1. `$firstName` - first name
|
||||||
|
2. `$lastName` - last name
|
||||||
|
3. `$email` - email address
|
||||||
|
4. `$birthDate` - birth date
|
||||||
|
|
||||||
|
##### New instance
|
||||||
|
|
||||||
|
New instance can be created using constructor:
|
||||||
|
|
||||||
|
```php
|
||||||
|
new Human('John', 'Scott', 'john@scott.com', new \DateTime('2001-01-01'));
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Methods
|
||||||
|
|
||||||
|
Has getters for each property, e.g. `getFirstName()`, `getEmail()` etc.
|
||||||
|
|
||||||
|
##### Conversion to string (the `__toString()` method)
|
||||||
|
|
||||||
|
Instance of `Human` may be represented as string that contains first name, last name and email address (if provided).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$human1 = new Human('John', 'Scott');
|
||||||
|
$asString1 = (string)$human1; // "John Scott"
|
||||||
|
|
||||||
|
$human2 = new Human('John', 'Scott', 'john@scott.com', new \DateTime('2001-01-01'));
|
||||||
|
$asString2 = (string)$human2; // "John Scott <john@scott.com>"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Version
|
||||||
|
|
||||||
|
##### Namespace
|
||||||
|
|
||||||
|
`Meritoo\Common\ValueObject\Version`
|
||||||
|
|
||||||
|
##### Info
|
||||||
|
|
||||||
|
Represents version of software. Contains properties:
|
||||||
|
1. `$majorPart` - the "major" part of version
|
||||||
|
2. `$minorPart` - the "minor" part of version
|
||||||
|
3. `$patchPart` - the "patch" part of version
|
||||||
|
|
||||||
|
##### New instance
|
||||||
|
|
||||||
|
New instance can be created using:
|
||||||
|
|
||||||
|
1. Constructor:
|
||||||
|
|
||||||
|
```php
|
||||||
|
new Version(1, 0, 2);
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Static methods:
|
||||||
|
1. `fromArray()` - creates new instance using given version as array
|
||||||
|
|
||||||
|
```php
|
||||||
|
Version::fromArray([1, 0, 2]);
|
||||||
|
```
|
||||||
|
|
||||||
|
2. `fromString()` - creates new instance using given version as string:
|
||||||
|
|
||||||
|
```php
|
||||||
|
Version::fromString('1.0.2');
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Conversion to string (the `__toString()` method)
|
||||||
|
|
||||||
|
Instance of `Version` may be represented as string that contains all properties separated by `.` (`$majorPart`.`$minorPart`.`$patchPart`).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$version = new Version(1, 0, 2);
|
||||||
|
$asString = (string)$version; // "1.0.2"
|
||||||
|
```
|
||||||
|
|
||||||
|
# More
|
||||||
|
|
||||||
|
1. [Base test case (with common methods and data providers)](Base-test-case.md)
|
||||||
|
2. [Collection of elements](Collection-of-elements.md)
|
||||||
|
3. [Exceptions](Exceptions.md)
|
||||||
|
4. [Static methods](Static-methods.md)
|
||||||
|
1. [Arrays](Static-methods/Arrays.md)
|
||||||
|
2. [Regex](Static-methods/Regex.md)
|
||||||
|
5. [**Value Objects**](Value-Objects.md)
|
||||||
|
|
||||||
|
[‹ Back to `Readme`](../README.md)
|
||||||
198
phing/app.xml
198
phing/app.xml
@@ -1,98 +1,184 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0">
|
|
||||||
|
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.16.0">
|
||||||
<!-- Properties -->
|
<!-- Properties -->
|
||||||
<if>
|
<if>
|
||||||
<available file="phing/properties" property="custom.properties.available"/>
|
<available file="${project.basedir}/phing/properties" property="custom.properties.available"/>
|
||||||
<then>
|
<then>
|
||||||
<property file="phing/properties"/>
|
<property file="${project.basedir}/phing/properties"/>
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
<property file="phing/properties.dist"/>
|
<property file="${project.basedir}/phing/properties.dist"/>
|
||||||
</else>
|
</else>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
|
<!-- Filesets -->
|
||||||
|
<import file="${project.basedir}/phing/filesets.xml"/>
|
||||||
|
|
||||||
<!-- Default / main target -->
|
<!-- Default / main target -->
|
||||||
<target name="build:main"
|
<target name="build:main"
|
||||||
depends="build:app"
|
depends="build:app"
|
||||||
description="Builds the application" />
|
/>
|
||||||
|
|
||||||
<!-- App target -->
|
<!-- App target -->
|
||||||
<target name="build:app"
|
<target name="build:app"
|
||||||
depends="app:composer, app:vendors, app:checkout"
|
depends="app:clean,
|
||||||
description="Prepares app to build." />
|
app:composer:self-update,
|
||||||
|
app:composer:install,
|
||||||
<!-- Updates Composer and validates composer.* files -->
|
app:composer:validate,
|
||||||
<target name="app:composer" description="Updates Composer and validates composer.* files">
|
app:checkout"
|
||||||
<echo msg="Updating Composer and validating composer.* files..." />
|
/>
|
||||||
|
|
||||||
|
<!-- Updates Composer -->
|
||||||
|
<target name="app:composer:self-update">
|
||||||
<if>
|
<if>
|
||||||
<available file="composer.phar" />
|
<not>
|
||||||
|
<available file="${composer.path}" property="composer.local.unavailable"/>
|
||||||
|
</not>
|
||||||
<then>
|
<then>
|
||||||
<echo msg="[Skipped] Downloading of Composer skipped, because exist in the project..." />
|
<if>
|
||||||
|
<os family="windows"/>
|
||||||
|
<then>
|
||||||
|
<fail message="Composer not found! Go to http://getcomposer.org/download and download the Composer."/>
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
<if>
|
<exec command="${composer.download_command}" checkreturn="true" passthru="true"/>
|
||||||
<os family="windows" />
|
|
||||||
<then>
|
|
||||||
<fail message="Composer not found! Go to http://getcomposer.org/download and download the Composer." />
|
|
||||||
</then>
|
|
||||||
<else>
|
|
||||||
<exec command="${composer.download_command}" checkreturn="true" />
|
|
||||||
</else>
|
</else>
|
||||||
</if>
|
</if>
|
||||||
</else>
|
</then>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
<!-- Update Composer -->
|
<!-- Update Composer -->
|
||||||
<composer command="selfupdate" />
|
<composer php="${composer.php}" composer="${composer.path}" command="selfupdate">
|
||||||
|
<arg value="--ansi"/>
|
||||||
<!-- Validate Composer -->
|
|
||||||
<composer command="validate">
|
|
||||||
<arg line="--no-check-all --strict" />
|
|
||||||
</composer>
|
</composer>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Project Install/update vendors -->
|
<!-- Validates composer.* files -->
|
||||||
<target name="app:vendors" description="Installs / updates vendors">
|
<target name="app:composer:validate" depends="app:composer:install">
|
||||||
<echo msg="Installing / updating vendors..." />
|
<composer php="${composer.php}" composer="${composer.path}" command="validate">
|
||||||
|
<arg value="--no-check-all"/>
|
||||||
<if>
|
<arg value="--strict"/>
|
||||||
<istrue value="${composer.self-update}"/>
|
<arg value="--ansi"/>
|
||||||
<then>
|
|
||||||
<composer php="${composer.php}" composer="${composer.path}" command="self-update"/>
|
|
||||||
</then>
|
|
||||||
</if>
|
|
||||||
|
|
||||||
<if>
|
|
||||||
<istrue value="${composer.validate}"/>
|
|
||||||
<then>
|
|
||||||
<composer php="${composer.php}" composer="${composer.path}" command="validate"/>
|
|
||||||
</then>
|
|
||||||
</if>
|
|
||||||
|
|
||||||
<if>
|
|
||||||
<equals arg1="${env}" arg2="prod" />
|
|
||||||
<then>
|
|
||||||
<composer php="${composer.php}" composer="${composer.path}" command="install">
|
|
||||||
<arg value="--optimize-autoloader" />
|
|
||||||
<arg value="--prefer-dist" />
|
|
||||||
<arg value="--classmap-authoritative" />
|
|
||||||
</composer>
|
</composer>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- Project clean -->
|
||||||
|
<target name="app:clean">
|
||||||
|
<if>
|
||||||
|
<equals arg1="${env}" arg2="prod"/>
|
||||||
|
<then>
|
||||||
|
<echo message="[Skipped] Cleaning project (and directories cleanup) -> 'prod' environment"/>
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
<composer php="${composer.php}" composer="${composer.path}" command="install" />
|
<foreach list="${directoriesToEmpty}" param="directory" target="app:clean:empty"/>
|
||||||
</else>
|
</else>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
|
<foreach list="${directoriesToCheck}" param="directory" target="app:clean:check"/>
|
||||||
|
|
||||||
|
<touch file="${dir.cache}/.gitkeep"/>
|
||||||
|
<touch file="${dir.logs}/.gitkeep"/>
|
||||||
|
<touch file="${dir.sessions}/.gitkeep"/>
|
||||||
|
|
||||||
|
<foreach list="${directoriesToEmpty}" param="directory" target="app:permissions"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- Cleaning directory (making empty) directory -->
|
||||||
|
<target name="app:clean:empty">
|
||||||
|
<if>
|
||||||
|
<available file="${directory}" type="dir" property="dir_is_available"/>
|
||||||
|
<then>
|
||||||
|
<delete includeemptydirs="true" dir="${directory}"/>
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- Checking if directory exists -->
|
||||||
|
<target name="app:clean:check">
|
||||||
|
<if>
|
||||||
|
<not>
|
||||||
|
<available file="${directory}" type="dir" property="dir_is_available"/>
|
||||||
|
</not>
|
||||||
|
<then>
|
||||||
|
<if>
|
||||||
|
<or>
|
||||||
|
<contains string="${directory}" substring="cache"/>
|
||||||
|
<contains string="${directory}" substring="logs"/>
|
||||||
|
<contains string="${directory}" substring="sessions"/>
|
||||||
|
</or>
|
||||||
|
<then>
|
||||||
|
<mkdir dir="${directory}" mode="0777"/>
|
||||||
|
</then>
|
||||||
|
<else>
|
||||||
|
<mkdir dir="${directory}" mode="0775"/>
|
||||||
|
</else>
|
||||||
|
</if>
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- Installs vendors -->
|
||||||
|
<target name="app:composer:install" depends="app:composer:self-update">
|
||||||
|
<composer php="${composer.php}" composer="${composer.path}" command="install">
|
||||||
|
<arg value="--optimize-autoloader"/>
|
||||||
|
<arg value="--ansi"/>
|
||||||
|
</composer>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- Clearing cache -->
|
||||||
|
<target name="app:cache">
|
||||||
|
<if>
|
||||||
|
<istrue value="${cache.clearWithWarmup}"/>
|
||||||
|
<then>
|
||||||
|
<SymfonyConsole console="bin/console" command="cache:clear">
|
||||||
|
<arg name="env" value="${env}"/>
|
||||||
|
</SymfonyConsole>
|
||||||
|
</then>
|
||||||
|
<else>
|
||||||
|
<SymfonyConsole console="bin/console" command="cache:clear">
|
||||||
|
<arg name="env" value="${env}"/>
|
||||||
|
<arg name="no-warmup"/>
|
||||||
|
</SymfonyConsole>
|
||||||
|
</else>
|
||||||
|
</if>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- Clearing cache (faster) -->
|
||||||
|
<target name="app:cache:faster">
|
||||||
|
<SymfonyConsole console="bin/console" command="cache:clear">
|
||||||
|
<arg name="env" value="${env}"/>
|
||||||
|
<arg name="no-optional-warmers"/>
|
||||||
|
</SymfonyConsole>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- Warming up cache -->
|
||||||
|
<target name="app:cache:warmup">
|
||||||
|
<SymfonyConsole console="bin/console" command="cache:warmup">
|
||||||
|
<arg name="env" value="${env}"/>
|
||||||
|
</SymfonyConsole>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- Setting permissions of given directory -->
|
||||||
|
<target name="app:permissions">
|
||||||
|
<if>
|
||||||
|
<not>
|
||||||
|
<os family="windows"/>
|
||||||
|
</not>
|
||||||
|
<then>
|
||||||
|
<exec command="chmod -R 777 ${directory}/*"/>
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Checkout and finalization -->
|
<!-- Checkout and finalization -->
|
||||||
<target name="app:checkout">
|
<target name="app:checkout">
|
||||||
<tstamp>
|
<tstamp>
|
||||||
<format property="date_end" pattern="%Y-%m-%d %H:%M" />
|
<format property="date_end" pattern="%Y-%m-%d %H:%M"/>
|
||||||
</tstamp>
|
</tstamp>
|
||||||
|
|
||||||
<echo msg="------------------------------------" />
|
<echo msg="------------------------------------"/>
|
||||||
<echo msg="Build finished at: ${date_end}" />
|
<echo msg="Build finished at: ${date_end}"/>
|
||||||
<echo msg="------------------------------------" />
|
<echo msg="------------------------------------"/>
|
||||||
</target>
|
</target>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
20
phing/composer-install.sh
Normal file
20
phing/composer-install.sh
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
EXPECTED_SIGNATURE="$(curl -L https://composer.github.io/installer.sig)"
|
||||||
|
# Original line (with wget):
|
||||||
|
# EXPECTED_SIGNATURE="$(wget -q -O - https://composer.github.io/installer.sig)"
|
||||||
|
|
||||||
|
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
|
||||||
|
ACTUAL_SIGNATURE="$(php -r "echo hash_file('SHA384', 'composer-setup.php');")"
|
||||||
|
|
||||||
|
if [[ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ]]
|
||||||
|
then
|
||||||
|
>&2 echo 'ERROR: Invalid installer signature'
|
||||||
|
rm composer-setup.php
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
php composer-setup.php --quiet
|
||||||
|
RESULT=$?
|
||||||
|
rm composer-setup.php
|
||||||
|
exit ${RESULT}
|
||||||
36
phing/filesets.xml
Normal file
36
phing/filesets.xml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.16.0">
|
||||||
|
<!-- Filesets -->
|
||||||
|
<fileset id="cache" dir="${dir.cache}">
|
||||||
|
<include name="**/*"/>
|
||||||
|
<exclude name=".gitkeep"/>
|
||||||
|
</fileset>
|
||||||
|
<fileset id="logs" dir="${dir.logs}">
|
||||||
|
<include name="**/*"/>
|
||||||
|
<exclude name=".gitkeep"/>
|
||||||
|
</fileset>
|
||||||
|
<fileset id="sessions" dir="${dir.sessions}">
|
||||||
|
<include name="**/*"/>
|
||||||
|
<exclude name=".gitkeep"/>
|
||||||
|
</fileset>
|
||||||
|
|
||||||
|
<!-- Directories to check -->
|
||||||
|
<property name="directoriesToCheck" value="
|
||||||
|
${dir.cache},
|
||||||
|
${dir.logs},
|
||||||
|
${dir.sessions},
|
||||||
|
${dir.data.tests},
|
||||||
|
${dir.data.temporary},
|
||||||
|
${dir.docker.data},
|
||||||
|
${dir.docker.logs}"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- Directories to empty -->
|
||||||
|
<property name="directoriesToEmpty" value="
|
||||||
|
${dir.cache},
|
||||||
|
${dir.logs},
|
||||||
|
${dir.sessions},
|
||||||
|
${dir.data.temporary}"
|
||||||
|
/>
|
||||||
|
</project>
|
||||||
@@ -1,19 +1,3 @@
|
|||||||
# --------------------------------------------------------------------------------
|
|
||||||
# Information
|
|
||||||
# --------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# Property files contain key/value pairs
|
|
||||||
# key = value
|
|
||||||
#
|
|
||||||
# Property keys may contain alphanumeric chars and colons, but
|
|
||||||
# not special chars. This way you can create pseudo-namespaces
|
|
||||||
#
|
|
||||||
# You can refer to values of other properties by enclosing their keys in "${}".
|
|
||||||
# Example: dir.js = ${dir.web}/js
|
|
||||||
#
|
|
||||||
# Everything behind the equal sign is the value, you do
|
|
||||||
# not have to enclose strings: text=This is some text, Your OS is ${php.os}
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------
|
||||||
# Common, e.g. default environment
|
# Common, e.g. default environment
|
||||||
# --------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------
|
||||||
@@ -22,16 +6,12 @@
|
|||||||
#
|
#
|
||||||
env = dev
|
env = dev
|
||||||
|
|
||||||
# Install assets using symlinks
|
|
||||||
#
|
|
||||||
assets.installWithSymlink = true
|
|
||||||
|
|
||||||
# Clear cache with the "warmup" option
|
# Clear cache with the "warmup" option
|
||||||
#
|
#
|
||||||
# The cache:clear command should always be called with the --no-warmup option. Warmup should be done via the cache:warmup command.
|
# The cache:clear command should always be called with the --no-warmup option. Warmup should be done via the cache:warmup command.
|
||||||
# https://github.com/symfony/symfony/blob/master/UPGRADE-3.3.md#frameworkbundle
|
# https://github.com/symfony/symfony/blob/master/UPGRADE-3.3.md#frameworkbundle
|
||||||
#
|
#
|
||||||
# Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
# Meritoo <github@meritoo.pl>
|
||||||
# 2017-06-06
|
# 2017-06-06
|
||||||
#
|
#
|
||||||
cache.clearWithWarmup = false
|
cache.clearWithWarmup = false
|
||||||
@@ -40,67 +20,63 @@ cache.clearWithWarmup = false
|
|||||||
# Composer
|
# Composer
|
||||||
# --------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------
|
||||||
|
|
||||||
composer.download_command = php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"
|
# Command used to download Composer
|
||||||
|
|
||||||
# Path to composer executable or composer.phar file
|
|
||||||
#
|
#
|
||||||
composer.path = composer.phar
|
composer.download_command = bash ${project.basedir}/phing/composer-install.sh
|
||||||
#composer.path = /usr/local/bin/composer
|
|
||||||
|
# Path to composer executable or downloaded composer.phar file
|
||||||
|
#
|
||||||
|
composer.path = ${project.basedir}/composer.phar
|
||||||
|
|
||||||
# Path to php executable used by composer
|
# Path to php executable used by composer
|
||||||
#
|
#
|
||||||
composer.php = php
|
composer.php = php
|
||||||
|
|
||||||
# Self update of the composer
|
|
||||||
#
|
|
||||||
composer.self-update = false
|
|
||||||
|
|
||||||
# Validate the composer.json file
|
|
||||||
#
|
|
||||||
composer.validate = false
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------
|
||||||
# Directories
|
# Directories
|
||||||
# --------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------
|
||||||
|
|
||||||
# System directories
|
# System directories
|
||||||
#
|
#
|
||||||
dir.data = ${project.basedir}/data
|
|
||||||
dir.src = ${project.basedir}/src
|
dir.src = ${project.basedir}/src
|
||||||
|
dir.var = ${project.basedir}/tests/Resources/var
|
||||||
|
dir.cache = ${dir.var}/cache
|
||||||
|
dir.logs = ${dir.var}/log
|
||||||
|
dir.sessions = ${dir.var}/sessions
|
||||||
|
dir.data = ${project.basedir}/data
|
||||||
dir.tests = ${project.basedir}/tests
|
dir.tests = ${project.basedir}/tests
|
||||||
|
|
||||||
# --------------------------------------------------------------------------------
|
|
||||||
# Build directories
|
# Build directories
|
||||||
# --------------------------------------------------------------------------------
|
#
|
||||||
|
|
||||||
dir.build = ${project.basedir}/build
|
dir.build = ${project.basedir}/build
|
||||||
dir.reports = ${dir.build}/logs
|
dir.reports = ${dir.build}/reports
|
||||||
dir.reports.pdepend = ${dir.reports}/pdepend
|
dir.reports.pdepend = ${dir.reports}/pdepend
|
||||||
dir.reports.coverage = ${dir.reports}/phpunit_coverage
|
dir.reports.coverage = ${dir.reports}/phpunit_coverage
|
||||||
#
|
|
||||||
# Disabled, because unnecessary right now
|
|
||||||
# phpdocumentor/phpdocumentor cannot be installed via Composer
|
|
||||||
#
|
|
||||||
# Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
# 2017-02-22
|
|
||||||
#
|
|
||||||
#dir.docs = ${dir.build}/docs
|
|
||||||
#dir.docs.phpdoc2 = ${dir.docs}/phpdoc2
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------------------
|
|
||||||
# Data directories
|
# Data directories
|
||||||
# --------------------------------------------------------------------------------
|
#
|
||||||
|
dir.data.tests = ${dir.data}/tests
|
||||||
dir.data.temporary = ${dir.data}/tmp
|
dir.data.temporary = ${dir.data}/tmp
|
||||||
|
|
||||||
|
# Docker directories
|
||||||
|
#
|
||||||
|
dir.docker = ${project.basedir}/docker
|
||||||
|
dir.docker.data = ${dir.docker}/data/db
|
||||||
|
dir.docker.logs = ${dir.docker}/logs/nginx
|
||||||
|
|
||||||
# --------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------
|
||||||
# Testing
|
# Testing
|
||||||
# --------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------
|
||||||
|
|
||||||
# Path of the framework used to run unit tests
|
|
||||||
#
|
|
||||||
tests.framework.path = ./vendor/bin/phpunit --verbose --no-coverage --testdox
|
|
||||||
|
|
||||||
# Path of the PHP Coding Standards Fixer (http://cs.sensiolabs.org)
|
# Path of the PHP Coding Standards Fixer (http://cs.sensiolabs.org)
|
||||||
#
|
#
|
||||||
phpCsFixer.path = ./vendor/bin/php-cs-fixer
|
tests.cs_fixer.command = ./vendor/bin/php-cs-fixer fix --verbose
|
||||||
|
|
||||||
|
# Test database path
|
||||||
|
#
|
||||||
|
tests.database = ${dir.data.temporary}/database.sqlite
|
||||||
|
|
||||||
|
# Paths of frameworks used to run tests:
|
||||||
|
# - PHPUnit (unit tests)
|
||||||
|
#
|
||||||
|
tests.phpunit.command = ./vendor/bin/phpunit --verbose
|
||||||
|
|||||||
237
phing/tests.xml
237
phing/tests.xml
@@ -1,230 +1,133 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.14.0">
|
|
||||||
<!--
|
|
||||||
The AutoloaderTask is required to load binaries installed by Composer.
|
|
||||||
The "autoloaderpath" attribute of this task is not required, because it's default value is: vendor/autoload.php.
|
|
||||||
|
|
||||||
Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
<project name="Meritoo Package" basedir="." default="build:main" phingVersion="2.16.0">
|
||||||
2017-02-23
|
<autoloader/>
|
||||||
-->
|
|
||||||
<autoloader />
|
|
||||||
|
|
||||||
<!-- Properties -->
|
<!-- Properties -->
|
||||||
<if>
|
<if>
|
||||||
<available file="phing/properties" property="custom.properties.available"/>
|
<available file="${project.basedir}/phing/properties" property="custom.properties.available"/>
|
||||||
<then>
|
<then>
|
||||||
<property file="phing/properties"/>
|
<property file="${project.basedir}/phing/properties"/>
|
||||||
</then>
|
</then>
|
||||||
<else>
|
<else>
|
||||||
<property file="phing/properties.dist"/>
|
<property file="${project.basedir}/phing/properties.dist"/>
|
||||||
</else>
|
</else>
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
<!-- Filesets -->
|
<!-- Filesets -->
|
||||||
<fileset id="sourcecode" dir="${dir.src}">
|
<fileset id="sourcecode" dir="${dir.src}">
|
||||||
<include name="**/*.php" />
|
<include name="**/*.php"/>
|
||||||
<exclude name="*Test.php" />
|
<exclude name="*Test.php"/>
|
||||||
<exclude name="**/*Test.php" />
|
<exclude name="**/*Test.php"/>
|
||||||
<exclude name="**/Resources/**" />
|
<exclude name="**/Resources/**"/>
|
||||||
<exclude name="**/DataFixtures/**" />
|
<exclude name="**/DataFixtures/**"/>
|
||||||
<exclude name="**/Tests/**" />
|
<exclude name="**/Tests/**"/>
|
||||||
</fileset>
|
</fileset>
|
||||||
<fileset id="tests" dir="${dir.tests}">
|
<fileset id="tests" dir="${dir.tests}">
|
||||||
<include name="**/*Test*.php" />
|
<include name="**/*Test*.php"/>
|
||||||
</fileset>
|
</fileset>
|
||||||
|
|
||||||
<!-- Default / main target -->
|
<!-- Default / main target -->
|
||||||
<target name="build:main"
|
<target name="build:main"
|
||||||
depends="build:fix-coding-standards, build:clean, build:prepare, build:check, build:test, app:checkout"
|
depends="build:fix-coding-standards,
|
||||||
description="Runs all tests and builds everything" />
|
build:check,
|
||||||
<!--
|
build:test,
|
||||||
Before:
|
app:checkout"
|
||||||
depends="build:fix-coding-standards, build:clean, build:prepare, build:check, build:test, build:doc, app:checkout"
|
/>
|
||||||
|
|
||||||
After:
|
|
||||||
depends="build:fix-coding-standards, build:clean, build:prepare, build:check, build:test, app:checkout"
|
|
||||||
|
|
||||||
The "build:doc" task is disabled, because it cannot be installed via Composer:
|
|
||||||
a) phpdocumentor/phpdocumentor v2.9.0 requires symfony/validator ~2.2
|
|
||||||
b) symfony/validator ~2.2 causes to remove symfony/symfony 3.*
|
|
||||||
|
|
||||||
Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
2017-02-22
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Fixing coding standards using the PHP Coding Standards Fixer (http://cs.sensiolabs.org) -->
|
<!-- Fixing coding standards using the PHP Coding Standards Fixer (http://cs.sensiolabs.org) -->
|
||||||
<target name="build:fix-coding-standards" description="Fixes coding standards using the PHP Coding Standards Fixer">
|
<target name="build:fix-coding-standards">
|
||||||
<echo msg="Fixing coding standards using the PHP Coding Standards Fixer (http://cs.sensiolabs.org)..." />
|
<exec command="${tests.cs_fixer.command}" passthru="true"/>
|
||||||
|
|
||||||
<!--
|
|
||||||
Attention.
|
|
||||||
Rules for formatting are defined in /.php_cs.dist file.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<exec
|
|
||||||
passthru="true"
|
|
||||||
command="${phpCsFixer.path} fix --verbose"
|
|
||||||
/>
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Doc target -->
|
|
||||||
<!--
|
|
||||||
Disabled, because it cannot be installed via Composer:
|
|
||||||
a) phpdocumentor/phpdocumentor v2.9.0 requires symfony/validator ~2.2
|
|
||||||
b) symfony/validator ~2.2 causes to remove symfony/symfony 3.*
|
|
||||||
|
|
||||||
Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
2017-02-22
|
|
||||||
-->
|
|
||||||
<!--<target name="build:doc"-->
|
|
||||||
<!--depends="build:prepare, doc:phpdoc2"-->
|
|
||||||
<!--description="Generates API documentation" />-->
|
|
||||||
|
|
||||||
<!-- Check target -->
|
<!-- Check target -->
|
||||||
<target name="build:check"
|
<target name="build:check"
|
||||||
depends="check:cs, check:md, check:cpd, check:depend, check:loc"
|
depends="check:cs,
|
||||||
description="Analyzes code" />
|
check:md,
|
||||||
|
check:cpd,
|
||||||
|
check:depend,
|
||||||
|
check:loc"
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- Test target -->
|
<!-- Test target -->
|
||||||
<target name="build:test"
|
<target name="build:test"
|
||||||
depends="test:unit"
|
depends="test:phpunit"
|
||||||
description="Executes all tests" />
|
/>
|
||||||
|
|
||||||
<!-- Project build clean -->
|
|
||||||
<target name="build:clean" description="Cleans up build directories">
|
|
||||||
<echo msg="Cleaning docs and reports directories..." />
|
|
||||||
<!--<delete dir="${dir.docs}" />-->
|
|
||||||
<delete dir="${dir.reports}" />
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<!-- Project build prepare -->
|
|
||||||
<target name="build:prepare" description="Create build directories">
|
|
||||||
<echo msg="Creating build directories..." />
|
|
||||||
<!--<mkdir dir="${dir.docs}" />-->
|
|
||||||
<!--<mkdir dir="${dir.docs.phpdoc2}" />-->
|
|
||||||
<mkdir dir="${dir.reports}" />
|
|
||||||
<mkdir dir="${dir.reports.pdepend}" />
|
|
||||||
<mkdir dir="${dir.reports.coverage}"/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<!-- PHPDocumentor2 API documentation target -->
|
|
||||||
<!--
|
|
||||||
Disabled, because it cannot be installed via Composer:
|
|
||||||
a) phpdocumentor/phpdocumentor v2.9.0 requires symfony/validator ~2.2
|
|
||||||
b) symfony/validator ~2.2 causes to remove symfony/symfony 3.*
|
|
||||||
|
|
||||||
Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
2017-02-22
|
|
||||||
|
|
||||||
<target name="doc:phpdoc2" description="Generates API documentations">
|
|
||||||
<echo msg="Generating API Documentation with phpDocumentor 2..." />
|
|
||||||
<phpdoc2 title="${phing.project.name}"
|
|
||||||
destdir="${dir.docs.phpdoc2}"
|
|
||||||
template="responsive">
|
|
||||||
<fileset refid="sourcecode" />
|
|
||||||
</phpdoc2>
|
|
||||||
</target>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- Symfony2 code sniffer -->
|
<!-- Symfony2 code sniffer -->
|
||||||
<!--
|
<target name="check:cs" depends="build:prepare">
|
||||||
Attention 1.
|
|
||||||
To use Symfony2 standards to check coding you have to:
|
|
||||||
copy, symlink or check out repo to a folder called Symfony2 inside the phpcs Standards directory.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
$ pear config-show | grep php_dir
|
|
||||||
$ cd /path/to/pear/PHP/CodeSniffer/Standards
|
|
||||||
$ git clone git://github.com/opensky/Symfony2-coding-standard.git Symfony2
|
|
||||||
|
|
||||||
Attention 2.
|
|
||||||
PSR2 standard is used instead of Symfony2 standard, because after installation squizlabs/php_codesniffer package
|
|
||||||
via Composer the Symfony2 standard is not included / available in this package. In this case the PHP Coding
|
|
||||||
Standards Fixer (http://cs.sensiolabs.org) is used.
|
|
||||||
|
|
||||||
Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
2017-02-22
|
|
||||||
-->
|
|
||||||
<target name="check:cs" description="Checks coding standard">
|
|
||||||
<echo msg="Checking coding standard..." />
|
|
||||||
<phpcodesniffer standard="PSR2" showWarnings="true">
|
<phpcodesniffer standard="PSR2" showWarnings="true">
|
||||||
<fileset refid="sourcecode" />
|
<fileset refid="sourcecode"/>
|
||||||
<formatter type="checkstyle" outfile="${dir.reports}/checkstyle.xml" />
|
<formatter type="checkstyle" outfile="${dir.reports}/checkstyle.xml"/>
|
||||||
<formatter type="csv" outfile="${dir.reports}/checkstyle.csv" />
|
<formatter type="csv" outfile="${dir.reports}/checkstyle.csv"/>
|
||||||
<formatter type="summary" outfile="${dir.reports}/checkstyle_summary.txt" />
|
<formatter type="summary" outfile="${dir.reports}/checkstyle_summary.txt"/>
|
||||||
</phpcodesniffer>
|
</phpcodesniffer>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- copy/paste detector -->
|
<!-- copy/paste detector -->
|
||||||
<target name="check:cpd" description="Checks similar code blocks.">
|
<target name="check:cpd" depends="build:prepare">
|
||||||
<echo msg="Checking similar code blocks..." />
|
|
||||||
<phpcpd>
|
<phpcpd>
|
||||||
<fileset refid="sourcecode" />
|
<fileset refid="sourcecode"/>
|
||||||
<formatter type="pmd" outfile="${dir.reports}/pmd-cpd.xml" />
|
<formatter type="pmd" outfile="${dir.reports}/pmd-cpd.xml"/>
|
||||||
</phpcpd>
|
</phpcpd>
|
||||||
|
|
||||||
<!--
|
|
||||||
Previous / old version
|
|
||||||
|
|
||||||
Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
2017-02-22
|
|
||||||
|
|
||||||
<exec command="phpcpd \-\-log-pmd=${dir.reports}/pmd-cpd.xml ${dir.src}" />
|
|
||||||
-->
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Mess detector -->
|
<!-- Mess detector -->
|
||||||
<target name="check:md" description="Generate code metrics">
|
<target name="check:md" depends="build:prepare">
|
||||||
<echo msg="Generating code metrics..." />
|
|
||||||
<phpmd rulesets="codesize,controversial,design,naming,unusedcode">
|
<phpmd rulesets="codesize,controversial,design,naming,unusedcode">
|
||||||
<fileset refid="sourcecode" />
|
<fileset refid="sourcecode"/>
|
||||||
<formatter type="html" outfile="${dir.reports}/phpmd.html" />
|
<formatter type="html" outfile="${dir.reports}/phpmd.html"/>
|
||||||
<formatter type="text" outfile="${dir.reports}/phpmd.txt" />
|
<formatter type="text" outfile="${dir.reports}/phpmd.txt"/>
|
||||||
</phpmd>
|
</phpmd>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Code dependency -->
|
<!-- Code dependency -->
|
||||||
<target name="check:depend" description="Checks coupling and dependency">
|
<target name="check:depend" depends="build:prepare">
|
||||||
<echo msg="Checking coupling and dependency..." />
|
|
||||||
<phpdepend>
|
<phpdepend>
|
||||||
<fileset refid="sourcecode" />
|
<fileset refid="sourcecode"/>
|
||||||
<logger type="jdepend-xml" outfile="${dir.reports.pdepend}/jdepend.xml" />
|
<logger type="jdepend-xml" outfile="${dir.reports.pdepend}/jdepend.xml"/>
|
||||||
<logger type="jdepend-chart" outfile="${dir.reports.pdepend}/dependencies.svg" />
|
<logger type="jdepend-chart" outfile="${dir.reports.pdepend}/dependencies.svg"/>
|
||||||
<logger type="overview-pyramid" outfile="${dir.reports.pdepend}/overview-pyramid.svg" />
|
<logger type="overview-pyramid" outfile="${dir.reports.pdepend}/overview-pyramid.svg"/>
|
||||||
</phpdepend>
|
</phpdepend>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Measure the size and analyzing the structure of a project -->
|
<!-- Measure the size and analyzing the structure of a project -->
|
||||||
<target name="check:loc" description="Measures the size and analyzes the structure of a project">
|
<target name="check:loc" depends="build:prepare">
|
||||||
<echo msg="Measuring the size and analyzing the structure of a project..." />
|
|
||||||
<phploc reportType="txt" reportName="phploc" reportDirectory="${dir.reports}">
|
<phploc reportType="txt" reportName="phploc" reportDirectory="${dir.reports}">
|
||||||
<fileset refid="sourcecode" />
|
<fileset refid="sourcecode"/>
|
||||||
</phploc>
|
</phploc>
|
||||||
|
|
||||||
<!--
|
|
||||||
Previous / old version
|
|
||||||
|
|
||||||
Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
2017-02-22
|
|
||||||
|
|
||||||
<exec command="phploc \-\-log-csv=${dir.reports}/phploc.csv ${dir.src}" />
|
|
||||||
-->
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Unit tests -->
|
<!-- PHPUnit tests -->
|
||||||
<target name="test:unit" description="Executes unit tests">
|
<target name="test:phpunit" depends="build:prepare">
|
||||||
<echo msg="Running unit tests..." />
|
<exec command="${tests.phpunit.command}" passthru="true"/>
|
||||||
<exec command="${tests.framework.path}" passthru="true"/>
|
</target>
|
||||||
|
|
||||||
|
<!-- Project build clean -->
|
||||||
|
<target name="build:clean">
|
||||||
|
<if>
|
||||||
|
<available file="${dir.reports}" type="dir" property="dir_is_available"/>
|
||||||
|
<then>
|
||||||
|
<delete dir="${dir.reports}"/>
|
||||||
|
</then>
|
||||||
|
</if>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- Project build prepare -->
|
||||||
|
<target name="build:prepare" depends="build:clean">
|
||||||
|
<mkdir dir="${dir.reports}"/>
|
||||||
|
<mkdir dir="${dir.reports.pdepend}"/>
|
||||||
|
<mkdir dir="${dir.reports.coverage}"/>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- Checkout and finalization -->
|
<!-- Checkout and finalization -->
|
||||||
<target name="app:checkout">
|
<target name="app:checkout">
|
||||||
<tstamp>
|
<tstamp>
|
||||||
<format property="date_end" pattern="%Y-%m-%d %H:%M" />
|
<format property="date_end" pattern="%Y-%m-%d %H:%M"/>
|
||||||
</tstamp>
|
</tstamp>
|
||||||
|
|
||||||
<echo msg="--------------------------------------------" />
|
<echo msg="--------------------------------------------"/>
|
||||||
<echo msg="Build tests finished at: ${date_end}" />
|
<echo msg="Build tests finished at: ${date_end}"/>
|
||||||
<echo msg="--------------------------------------------" />
|
<echo msg="--------------------------------------------"/>
|
||||||
</target>
|
</target>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -1,28 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!-- https://phpunit.de/manual/4.8/en/appendixes.configuration.html -->
|
||||||
<phpunit
|
<phpunit
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/4.8/phpunit.xsd"
|
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/4.8/phpunit.xsd"
|
||||||
backupGlobals="true"
|
bootstrap="vendor/autoload.php"
|
||||||
backupStaticAttributes="false"
|
|
||||||
bootstrap="./vendor/autoload.php"
|
|
||||||
cacheTokens="false"
|
|
||||||
colors="true"
|
colors="true"
|
||||||
convertErrorsToExceptions="true"
|
|
||||||
convertNoticesToExceptions="true"
|
|
||||||
convertWarningsToExceptions="true"
|
|
||||||
forceCoversAnnotation="false"
|
|
||||||
mapTestClassNameToCoveredClassName="false"
|
|
||||||
processIsolation="false"
|
|
||||||
stopOnError="false"
|
|
||||||
stopOnFailure="false"
|
|
||||||
stopOnIncomplete="false"
|
|
||||||
stopOnSkipped="false"
|
|
||||||
stopOnRisky="false"
|
|
||||||
testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
|
|
||||||
timeoutForSmallTests="1"
|
|
||||||
timeoutForMediumTests="10"
|
|
||||||
timeoutForLargeTests="60"
|
|
||||||
verbose="true"
|
verbose="true"
|
||||||
>
|
>
|
||||||
<php>
|
<php>
|
||||||
@@ -31,23 +14,17 @@
|
|||||||
|
|
||||||
<testsuites>
|
<testsuites>
|
||||||
<testsuite name="Meritoo Package - Main Test Suite">
|
<testsuite name="Meritoo Package - Main Test Suite">
|
||||||
<directory>./tests/</directory>
|
<directory>tests/</directory>
|
||||||
</testsuite>
|
</testsuite>
|
||||||
</testsuites>
|
</testsuites>
|
||||||
|
|
||||||
<filter>
|
<filter>
|
||||||
<whitelist>
|
<whitelist>
|
||||||
<directory>./src/</directory>
|
<directory>src/</directory>
|
||||||
</whitelist>
|
</whitelist>
|
||||||
</filter>
|
</filter>
|
||||||
|
|
||||||
<groups>
|
|
||||||
<exclude>
|
|
||||||
<group>performance</group>
|
|
||||||
</exclude>
|
|
||||||
</groups>
|
|
||||||
|
|
||||||
<logging>
|
<logging>
|
||||||
<log type="coverage-html" target="./build/logs/phpunit_coverage/html"/>
|
<log type="coverage-html" target="build/reports/phpunit_coverage/html"/>
|
||||||
</logging>
|
</logging>
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ use Meritoo\Common\Utilities\Arrays;
|
|||||||
* Collection of elements.
|
* Collection of elements.
|
||||||
* It's a set of some elements, e.g. objects.
|
* It's a set of some elements, e.g. objects.
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Collection implements Countable, ArrayAccess, IteratorAggregate
|
class Collection implements Countable, ArrayAccess, IteratorAggregate
|
||||||
{
|
{
|
||||||
@@ -109,7 +109,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
|
|||||||
*/
|
*/
|
||||||
public function add($element, $index = null)
|
public function add($element, $index = null)
|
||||||
{
|
{
|
||||||
if (null === $index) {
|
if (null === $index || '' === $index) {
|
||||||
$this->elements[] = $element;
|
$this->elements[] = $element;
|
||||||
} else {
|
} else {
|
||||||
$this->elements[$index] = $element;
|
$this->elements[$index] = $element;
|
||||||
@@ -130,11 +130,12 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
|
|||||||
{
|
{
|
||||||
if (!empty($elements)) {
|
if (!empty($elements)) {
|
||||||
foreach ($elements as $index => $element) {
|
foreach ($elements as $index => $element) {
|
||||||
if (!$useIndexes) {
|
if ($useIndexes) {
|
||||||
$index = null;
|
$this->add($element, $index);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->add($element, $index);
|
$this->add($element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,7 +263,7 @@ class Collection implements Countable, ArrayAccess, IteratorAggregate
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array representation of the collection
|
* Returns representation of object as array
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -15,27 +15,28 @@ use Meritoo\Common\Utilities\Arrays;
|
|||||||
/**
|
/**
|
||||||
* An exception used while type of something is unknown
|
* An exception used while type of something is unknown
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
abstract class UnknownTypeException extends Exception
|
abstract class UnknownTypeException extends Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param string|int $unknownType The unknown type of something (value of constant)
|
* @param mixed $unknownType The unknown type of something (value of constant)
|
||||||
* @param BaseType $typeInstance An instance of class that contains type of the something
|
* @param BaseType $typeInstance An instance of class that contains type of the something
|
||||||
* @param string $typeName Name of the something
|
* @param string $typeName Name of the something
|
||||||
|
* @return UnknownTypeException
|
||||||
*/
|
*/
|
||||||
public function __construct($unknownType, BaseType $typeInstance, $typeName)
|
public static function create($unknownType, BaseType $typeInstance, $typeName)
|
||||||
{
|
{
|
||||||
$allTypes = $typeInstance->getAll();
|
|
||||||
$types = Arrays::values2string($allTypes, '', ', ');
|
|
||||||
|
|
||||||
$template = 'The \'%s\' type of %s is unknown. Probably doesn\'t exist or there is a typo. You should use one'
|
$template = 'The \'%s\' type of %s is unknown. Probably doesn\'t exist or there is a typo. You should use one'
|
||||||
. ' of these types: %s.';
|
. ' of these types: %s.';
|
||||||
|
|
||||||
$message = sprintf(sprintf($template, $unknownType, $typeName, $types));
|
$allTypes = $typeInstance->getAll();
|
||||||
parent::__construct($message);
|
$types = Arrays::values2string($allTypes, '', ', ');
|
||||||
|
$message = sprintf($template, $unknownType, $typeName, $types);
|
||||||
|
|
||||||
|
return new static($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,22 +13,24 @@ use Exception;
|
|||||||
/**
|
/**
|
||||||
* An exception used while name of bundle is incorrect
|
* An exception used while name of bundle is incorrect
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class IncorrectBundleNameException extends Exception
|
class IncorrectBundleNameException extends Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param string $bundleName Incorrect name of bundle
|
* @param string $bundleName Incorrect name of bundle
|
||||||
|
* @return IncorrectBundleNameException
|
||||||
*/
|
*/
|
||||||
public function __construct($bundleName)
|
public static function create($bundleName)
|
||||||
{
|
{
|
||||||
$template = 'Name of bundle \'%s\' is incorrect. It should start with big letter and end with "Bundle". Is'
|
$template = 'Name of bundle \'%s\' is incorrect. It should start with big letter and end with "Bundle". Is'
|
||||||
. ' there everything ok?';
|
. ' there everything ok?';
|
||||||
|
|
||||||
$message = sprintf($template, $bundleName);
|
$message = sprintf($template, $bundleName);
|
||||||
parent::__construct($message);
|
|
||||||
|
return new static($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* (c) Meritoo.pl, http://www.meritoo.pl
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Meritoo\Common\Exception\Date;
|
|
||||||
|
|
||||||
use Meritoo\Common\Exception\Base\UnknownTypeException;
|
|
||||||
use Meritoo\Common\Type\DatePartType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception used while type of date part, e.g. "year", is unknown
|
|
||||||
*
|
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
|
||||||
* @copyright Meritoo.pl
|
|
||||||
*/
|
|
||||||
class UnknownDatePartTypeException extends UnknownTypeException
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Class constructor
|
|
||||||
*
|
|
||||||
* @param string $unknownDatePart Type of date part, e.g. "year". One of DatePartType class constants.
|
|
||||||
* @param string $value Incorrect value
|
|
||||||
*/
|
|
||||||
public function __construct($unknownDatePart, $value)
|
|
||||||
{
|
|
||||||
parent::__construct($unknownDatePart, new DatePartType(), sprintf('date part (with value %s)', $value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,21 +11,22 @@ namespace Meritoo\Common\Exception\File;
|
|||||||
/**
|
/**
|
||||||
* An exception used while file with given path is empty (has no content)
|
* An exception used while file with given path is empty (has no content)
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class EmptyFileException extends \Exception
|
class EmptyFileException extends \Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param string $emptyFilePath Path of the empty file
|
* @param string $emptyFilePath Path of the empty file
|
||||||
|
* @return EmptyFileException
|
||||||
*/
|
*/
|
||||||
public function __construct($emptyFilePath)
|
public static function create($emptyFilePath)
|
||||||
{
|
{
|
||||||
$template = 'File with path \'%s\' is empty (has no content). Did you provide path of proper file?';
|
$template = 'File with path \'%s\' is empty (has no content). Did you provide path of proper file?';
|
||||||
$message = sprintf($template, $emptyFilePath);
|
$message = sprintf($template, $emptyFilePath);
|
||||||
|
|
||||||
parent::__construct($message);
|
return new static($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,16 +11,16 @@ namespace Meritoo\Common\Exception\File;
|
|||||||
/**
|
/**
|
||||||
* An exception used while path of given file is empty
|
* An exception used while path of given file is empty
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class EmptyFilePathException extends \Exception
|
class EmptyFilePathException extends \Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public static function create()
|
||||||
{
|
{
|
||||||
parent::__construct('Path of the file is empty. Did you provide path of proper file?');
|
return new static('Path of the file is empty. Did you provide path of proper file?');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,21 +11,22 @@ namespace Meritoo\Common\Exception\File;
|
|||||||
/**
|
/**
|
||||||
* An exception used while file with given path does not exist
|
* An exception used while file with given path does not exist
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class NotExistingFileException extends \Exception
|
class NotExistingFileException extends \Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param string $notExistingFilePath Path of not existing (or not readable) file
|
* @param string $notExistingFilePath Path of not existing (or not readable) file
|
||||||
|
* @return NotExistingFileException
|
||||||
*/
|
*/
|
||||||
public function __construct($notExistingFilePath)
|
public static function create($notExistingFilePath)
|
||||||
{
|
{
|
||||||
$template = 'File with path \'%s\' does not exist (or is not readable). Did you provide path of proper file?';
|
$template = 'File with path \'%s\' does not exist (or is not readable). Did you provide path of proper file?';
|
||||||
$message = sprintf($template, $notExistingFilePath);
|
$message = sprintf($template, $notExistingFilePath);
|
||||||
|
|
||||||
parent::__construct($message);
|
return new static($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,26 +13,28 @@ use Exception;
|
|||||||
/**
|
/**
|
||||||
* An exception used while method cannot be called, because is disabled
|
* An exception used while method cannot be called, because is disabled
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class DisabledMethodException extends Exception
|
class DisabledMethodException extends Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param string $disabledMethod Name of the disabled method
|
* @param string $disabledMethod Name of the disabled method
|
||||||
* @param string $alternativeMethod (optional) Name of the alternative method
|
* @param string $alternativeMethod (optional) Name of the alternative method
|
||||||
|
* @return DisabledMethodException
|
||||||
*/
|
*/
|
||||||
public function __construct($disabledMethod, $alternativeMethod = '')
|
public static function create($disabledMethod, $alternativeMethod = '')
|
||||||
{
|
{
|
||||||
$template = 'Method %s() cannot be called, because is disabled.';
|
$template = 'Method %s() cannot be called, because is disabled.';
|
||||||
|
$message = sprintf($template, $disabledMethod);
|
||||||
|
|
||||||
if (!empty($alternativeMethod)) {
|
if (!empty($alternativeMethod)) {
|
||||||
$template .= ' Use %s() instead.';
|
$template = '%s Use %s() instead.';
|
||||||
|
$message = sprintf($template, $message, $alternativeMethod);
|
||||||
}
|
}
|
||||||
|
|
||||||
$message = sprintf($template, $disabledMethod, $alternativeMethod);
|
return new static($message);
|
||||||
parent::__construct($message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,20 +13,21 @@ use Exception;
|
|||||||
/**
|
/**
|
||||||
* An exception used while name of class or trait cannot be resolved
|
* An exception used while name of class or trait cannot be resolved
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class CannotResolveClassNameException extends Exception
|
class CannotResolveClassNameException extends Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param array|object|string $source Source of the class's / trait's name. It can be an array of objects,
|
* @param array|object|string $source Source of the class's / trait's name. It can be an array of objects,
|
||||||
* namespaces, object or namespace.
|
* namespaces, object or namespace.
|
||||||
* @param bool $forClass (optional) If is set to true, message of this exception for class is
|
* @param bool $forClass (optional) If is set to true, message of this exception for class is
|
||||||
* prepared. Otherwise - for trait.
|
* prepared. Otherwise - for trait.
|
||||||
|
* @return CannotResolveClassNameException
|
||||||
*/
|
*/
|
||||||
public function __construct($source, $forClass = true)
|
public static function create($source, $forClass = true)
|
||||||
{
|
{
|
||||||
$forWho = 'trait';
|
$forWho = 'trait';
|
||||||
$value = '';
|
$value = '';
|
||||||
@@ -42,6 +43,6 @@ class CannotResolveClassNameException extends Exception
|
|||||||
$template = 'Name of %s from given \'%s\'%s cannot be resolved. Is there everything ok?';
|
$template = 'Name of %s from given \'%s\'%s cannot be resolved. Is there everything ok?';
|
||||||
$message = sprintf($template, $forWho, gettype($source), $value);
|
$message = sprintf($template, $forWho, gettype($source), $value);
|
||||||
|
|
||||||
parent::__construct($message);
|
return new static($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,18 +14,19 @@ use Meritoo\Common\Utilities\Reflection;
|
|||||||
/**
|
/**
|
||||||
* An exception used while given class has no child classes
|
* An exception used while given class has no child classes
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class MissingChildClassesException extends Exception
|
class MissingChildClassesException extends Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param array|object|string $parentClass Class that hasn't child classes, but it should. An array of objects,
|
* @param array|object|string $parentClass Class that hasn't child classes, but it should. An array of objects,
|
||||||
* strings, object or string.
|
* strings, object or string.
|
||||||
|
* @return MissingChildClassesException
|
||||||
*/
|
*/
|
||||||
public function __construct($parentClass)
|
public static function create($parentClass)
|
||||||
{
|
{
|
||||||
$template = 'The \'%s\' class requires one child class at least who will extend her (maybe is an abstract'
|
$template = 'The \'%s\' class requires one child class at least who will extend her (maybe is an abstract'
|
||||||
. ' class), but the child classes are missing. Did you forget to extend this class?';
|
. ' class), but the child classes are missing. Did you forget to extend this class?';
|
||||||
@@ -33,6 +34,6 @@ class MissingChildClassesException extends Exception
|
|||||||
$parentClassName = Reflection::getClassName($parentClass);
|
$parentClassName = Reflection::getClassName($parentClass);
|
||||||
$message = sprintf($template, $parentClassName);
|
$message = sprintf($template, $parentClassName);
|
||||||
|
|
||||||
parent::__construct($message);
|
return new static($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
33
src/Exception/Reflection/NotExistingPropertyException.php
Normal file
33
src/Exception/Reflection/NotExistingPropertyException.php
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Common\Exception\Reflection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An exception used while property does not exist in instance of class
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class NotExistingPropertyException extends \Exception
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Creates exception
|
||||||
|
*
|
||||||
|
* @param mixed $object Object that should contains given property
|
||||||
|
* @param string $property Name of the property
|
||||||
|
* @return NotExistingPropertyException
|
||||||
|
*/
|
||||||
|
public static function create($object, $property)
|
||||||
|
{
|
||||||
|
$template = 'Property \'%s\' does not exist in instance of class \'%s\'. Did you use proper name of property?';
|
||||||
|
$message = sprintf($template, $property, get_class($object));
|
||||||
|
|
||||||
|
return new static($message);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,19 +14,20 @@ use Meritoo\Common\Utilities\Reflection;
|
|||||||
/**
|
/**
|
||||||
* An exception used while given class has more than one child class
|
* An exception used while given class has more than one child class
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class TooManyChildClassesException extends Exception
|
class TooManyChildClassesException extends Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param array|object|string $parentClass Class that has more than one child class, but it shouldn't. An array
|
* @param array|object|string $parentClass Class that has more than one child class, but it shouldn't. An array
|
||||||
* of objects, strings, object or string.
|
* of objects, strings, object or string.
|
||||||
* @param array $childClasses Child classes
|
* @param array $childClasses Child classes
|
||||||
|
* @return TooManyChildClassesException
|
||||||
*/
|
*/
|
||||||
public function __construct($parentClass, array $childClasses)
|
public static function create($parentClass, array $childClasses)
|
||||||
{
|
{
|
||||||
$template = "The '%s' class requires one child class at most who will extend her, but more than one child"
|
$template = "The '%s' class requires one child class at most who will extend her, but more than one child"
|
||||||
. " class was found:\n- %s\n\nWhy did you create more than one classes that extend '%s' class?";
|
. " class was found:\n- %s\n\nWhy did you create more than one classes that extend '%s' class?";
|
||||||
@@ -34,6 +35,6 @@ class TooManyChildClassesException extends Exception
|
|||||||
$parentClassName = Reflection::getClassName($parentClass);
|
$parentClassName = Reflection::getClassName($parentClass);
|
||||||
$message = sprintf($template, $parentClassName, implode("\n- ", $childClasses), $parentClassName);
|
$message = sprintf($template, $parentClassName, implode("\n- ", $childClasses), $parentClassName);
|
||||||
|
|
||||||
parent::__construct($message);
|
return new static($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,22 +11,24 @@ namespace Meritoo\Common\Exception\Regex;
|
|||||||
/**
|
/**
|
||||||
* An exception used while length of given hexadecimal value of color is incorrect
|
* An exception used while length of given hexadecimal value of color is incorrect
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class IncorrectColorHexLengthException extends \Exception
|
class IncorrectColorHexLengthException extends \Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param string $color Incorrect hexadecimal value of color
|
* @param string $color Incorrect hexadecimal value of color
|
||||||
|
* @return IncorrectColorHexLengthException
|
||||||
*/
|
*/
|
||||||
public function __construct($color)
|
public static function create($color)
|
||||||
{
|
{
|
||||||
$template = 'Length of hexadecimal value of color \'%s\' is incorrect. It\'s %d, but it should be 3 or 6.'
|
$template = 'Length of hexadecimal value of color \'%s\' is incorrect. It\'s %d, but it should be 3 or 6.'
|
||||||
. ' Is there everything ok?';
|
. ' Is there everything ok?';
|
||||||
|
|
||||||
$message = sprintf($template, $color, strlen($color));
|
$message = sprintf($template, $color, strlen($color));
|
||||||
parent::__construct($message);
|
|
||||||
|
return new static($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,19 +11,21 @@ namespace Meritoo\Common\Exception\Regex;
|
|||||||
/**
|
/**
|
||||||
* An exception used while given hexadecimal value of color is invalid
|
* An exception used while given hexadecimal value of color is invalid
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class InvalidColorHexValueException extends \Exception
|
class InvalidColorHexValueException extends \Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param string $color Invalid hexadecimal value of color
|
* @param string $color Invalid hexadecimal value of color
|
||||||
|
* @return InvalidColorHexValueException
|
||||||
*/
|
*/
|
||||||
public function __construct($color)
|
public static function create($color)
|
||||||
{
|
{
|
||||||
$message = sprintf('Hexadecimal value of color \'%s\' is invalid. Is there everything ok?', $color);
|
$message = sprintf('Hexadecimal value of color \'%s\' is invalid. Is there everything ok?', $color);
|
||||||
parent::__construct($message);
|
|
||||||
|
return new static($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,19 +11,21 @@ namespace Meritoo\Common\Exception\Regex;
|
|||||||
/**
|
/**
|
||||||
* An exception used while html attributes are invalid
|
* An exception used while html attributes are invalid
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class InvalidHtmlAttributesException extends \Exception
|
class InvalidHtmlAttributesException extends \Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param string $htmlAttributes Invalid html attributes
|
* @param string $htmlAttributes Invalid html attributes
|
||||||
|
* @return InvalidHtmlAttributesException
|
||||||
*/
|
*/
|
||||||
public function __construct($htmlAttributes)
|
public static function create($htmlAttributes)
|
||||||
{
|
{
|
||||||
$message = sprintf('HTML attributes \'%s\' are invalid. Is there everything ok?', $htmlAttributes);
|
$message = sprintf('HTML attributes \'%s\' are invalid. Is there everything ok?', $htmlAttributes);
|
||||||
parent::__construct($message);
|
|
||||||
|
return new static($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,31 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Exception\Regex;
|
namespace Meritoo\Common\Exception\Regex;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An exception used while url is invalid
|
* An exception used while url is invalid
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class InvalidUrlException extends \Exception
|
class InvalidUrlException extends \Exception
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param string $url Invalid url
|
* @param string $url Invalid url
|
||||||
|
* @return InvalidUrlException
|
||||||
*/
|
*/
|
||||||
public function __construct($url)
|
public static function create($url)
|
||||||
{
|
{
|
||||||
$message = sprintf('Url \'%s\' is invalid. Is there everything ok?', $url);
|
$message = sprintf('Url \'%s\' is invalid. Is there everything ok?', $url);
|
||||||
parent::__construct($message);
|
|
||||||
|
return new static($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
36
src/Exception/Type/UnknownDatePartTypeException.php
Normal file
36
src/Exception/Type/UnknownDatePartTypeException.php
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Common\Exception\Type;
|
||||||
|
|
||||||
|
use Meritoo\Common\Exception\Base\UnknownTypeException;
|
||||||
|
use Meritoo\Common\Type\DatePartType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An exception used while type of date part, e.g. "year", is unknown
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class UnknownDatePartTypeException extends UnknownTypeException
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Creates exception
|
||||||
|
*
|
||||||
|
* @param string $unknownDatePart Unknown type of date part
|
||||||
|
* @param string $value Incorrect value
|
||||||
|
* @return UnknownDatePartTypeException
|
||||||
|
*/
|
||||||
|
public static function createException($unknownDatePart, $value)
|
||||||
|
{
|
||||||
|
/* @var UnknownDatePartTypeException $exception */
|
||||||
|
$exception = parent::create($unknownDatePart, new DatePartType(), sprintf('date part (with value %s)', $value));
|
||||||
|
|
||||||
|
return $exception;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Exception\Type;
|
namespace Meritoo\Common\Exception\Type;
|
||||||
|
|
||||||
use Meritoo\Common\Exception\Base\UnknownTypeException;
|
use Meritoo\Common\Exception\Base\UnknownTypeException;
|
||||||
@@ -8,16 +14,22 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* An exception used while the visibility of a property, a method or (as of PHP 7.1.0) a constant is unknown
|
* An exception used while the visibility of a property, a method or (as of PHP 7.1.0) a constant is unknown
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class UnknownOopVisibilityTypeException extends UnknownTypeException
|
class UnknownOopVisibilityTypeException extends UnknownTypeException
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* Creates exception
|
||||||
|
*
|
||||||
|
* @param string $unknownType Unknown visibility of a property, a method or (as of PHP 7.1.0) a constant
|
||||||
|
* @return UnknownOopVisibilityTypeException
|
||||||
*/
|
*/
|
||||||
public function __construct($unknownType)
|
public static function createException($unknownType)
|
||||||
{
|
{
|
||||||
parent::__construct($unknownType, new OopVisibilityType(), 'OOP-related visibility');
|
/* @var UnknownOopVisibilityTypeException $exception */
|
||||||
|
$exception = parent::create($unknownType, new OopVisibilityType(), 'OOP-related visibility');
|
||||||
|
|
||||||
|
return $exception;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ use PHPUnit\Framework\TestCase;
|
|||||||
/**
|
/**
|
||||||
* Base test case with common methods and data providers
|
* Base test case with common methods and data providers
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
abstract class BaseTestCase extends TestCase
|
abstract class BaseTestCase extends TestCase
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ use Meritoo\Common\Traits\Test\Base\BaseTypeTestCaseTrait;
|
|||||||
/**
|
/**
|
||||||
* Base test case for the type of something
|
* Base test case for the type of something
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
abstract class BaseTypeTestCase extends BaseTestCase
|
abstract class BaseTypeTestCase extends BaseTestCase
|
||||||
{
|
{
|
||||||
|
|||||||
110
src/Traits/CssSelector/FormCssSelector.php
Normal file
110
src/Traits/CssSelector/FormCssSelector.php
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Common\Traits\CssSelector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Useful methods related to CSS selectors of form
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
trait FormCssSelector
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns selector of form based on its name
|
||||||
|
*
|
||||||
|
* @param string $formName Name of form (value of the "name" attribute)
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getFormByNameSelector($formName)
|
||||||
|
{
|
||||||
|
$formName = trim($formName);
|
||||||
|
|
||||||
|
if (empty($formName)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf('form[name="%s"]', $formName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns selector of the input field based on its name
|
||||||
|
*
|
||||||
|
* @param string $formName Name of form (value of the "name" attribute)
|
||||||
|
* @param string $fieldName Name of field (value of the "name" attribute)
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getInputByNameSelector($formName, $fieldName)
|
||||||
|
{
|
||||||
|
$formSelector = static::getFormByNameSelector($formName);
|
||||||
|
$fieldName = trim($fieldName);
|
||||||
|
|
||||||
|
if (empty($formSelector) || empty($fieldName)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf('%s input[name="%s"]', $formSelector, $fieldName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns selector of the input field based on its ID
|
||||||
|
*
|
||||||
|
* @param string $formName Name of form (value of the "name" attribute)
|
||||||
|
* @param string $fieldId ID of field (value of the "id" attribute)
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getInputByIdSelector($formName, $fieldId)
|
||||||
|
{
|
||||||
|
$formSelector = static::getFormByNameSelector($formName);
|
||||||
|
$fieldId = trim($fieldId);
|
||||||
|
|
||||||
|
if (empty($formSelector) || empty($fieldId)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf('%s input#%s', $formSelector, $fieldId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns selector of label
|
||||||
|
*
|
||||||
|
* @param string $formName Name of form (value of the "name" attribute)
|
||||||
|
* @param string $fieldId ID of field (value of the "id" attribute)
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getLabelSelector($formName, $fieldId)
|
||||||
|
{
|
||||||
|
$formSelector = static::getFormByNameSelector($formName);
|
||||||
|
$fieldId = trim($fieldId);
|
||||||
|
|
||||||
|
if (empty($formSelector) || empty($fieldId)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf('%s label[for="%s"]', $formSelector, $fieldId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns selector of field-set using index/position of the field-set
|
||||||
|
*
|
||||||
|
* @param string $formName Name of form (value of the "name" attribute)
|
||||||
|
* @param int $fieldSetIndex Index/Position of the field-set
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getFieldSetByIndexSelector($formName, $fieldSetIndex)
|
||||||
|
{
|
||||||
|
$formSelector = static::getFormByNameSelector($formName);
|
||||||
|
|
||||||
|
if (empty($formSelector) || 0 > $fieldSetIndex) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf('%s fieldset:nth-of-type(%d)', $formSelector, $fieldSetIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,16 +14,14 @@ use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException;
|
|||||||
use Meritoo\Common\Type\OopVisibilityType;
|
use Meritoo\Common\Type\OopVisibilityType;
|
||||||
use Meritoo\Common\Utilities\Miscellaneous;
|
use Meritoo\Common\Utilities\Miscellaneous;
|
||||||
use ReflectionClass;
|
use ReflectionClass;
|
||||||
use ReflectionException;
|
|
||||||
use ReflectionMethod;
|
use ReflectionMethod;
|
||||||
use stdClass;
|
use stdClass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseTestCaseTrait
|
* Trait for the base test case
|
||||||
* Created on 2017-11-02
|
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
trait BaseTestCaseTrait
|
trait BaseTestCaseTrait
|
||||||
{
|
{
|
||||||
@@ -49,6 +47,20 @@ trait BaseTestCaseTrait
|
|||||||
yield[[]];
|
yield[[]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides an empty scalar value
|
||||||
|
*
|
||||||
|
* @return Generator
|
||||||
|
*/
|
||||||
|
public function provideEmptyScalarValue()
|
||||||
|
{
|
||||||
|
yield[''];
|
||||||
|
yield[' '];
|
||||||
|
yield[null];
|
||||||
|
yield[0];
|
||||||
|
yield[false];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides boolean value
|
* Provides boolean value
|
||||||
*
|
*
|
||||||
@@ -159,7 +171,6 @@ trait BaseTestCaseTrait
|
|||||||
* @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments
|
* @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments
|
||||||
* of the verified method
|
* of the verified method
|
||||||
* @throws UnknownOopVisibilityTypeException
|
* @throws UnknownOopVisibilityTypeException
|
||||||
* @throws ReflectionException
|
|
||||||
*
|
*
|
||||||
* Attention. 2nd argument, the $method, may be:
|
* Attention. 2nd argument, the $method, may be:
|
||||||
* - string - name of the method
|
* - string - name of the method
|
||||||
@@ -216,8 +227,6 @@ trait BaseTestCaseTrait
|
|||||||
* @param int $argumentsCount (optional) Expected count/amount of arguments of the verified method
|
* @param int $argumentsCount (optional) Expected count/amount of arguments of the verified method
|
||||||
* @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments of the verified
|
* @param int $requiredArgumentsCount (optional) Expected count/amount of required arguments of the verified
|
||||||
* method
|
* method
|
||||||
* @throws ReflectionException
|
|
||||||
* @throws UnknownOopVisibilityTypeException
|
|
||||||
*/
|
*/
|
||||||
protected static function assertConstructorVisibilityAndArguments(
|
protected static function assertConstructorVisibilityAndArguments(
|
||||||
$classNamespace,
|
$classNamespace,
|
||||||
@@ -231,14 +240,19 @@ trait BaseTestCaseTrait
|
|||||||
$reflection = new ReflectionClass($classNamespace);
|
$reflection = new ReflectionClass($classNamespace);
|
||||||
$method = $reflection->getConstructor();
|
$method = $reflection->getConstructor();
|
||||||
|
|
||||||
static::assertMethodVisibilityAndArguments($classNamespace, $method, $visibilityType, $argumentsCount, $requiredArgumentsCount);
|
static::assertMethodVisibilityAndArguments(
|
||||||
|
$classNamespace,
|
||||||
|
$method,
|
||||||
|
$visibilityType,
|
||||||
|
$argumentsCount,
|
||||||
|
$requiredArgumentsCount
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Asserts that class with given namespace has no constructor
|
* Asserts that class with given namespace has no constructor
|
||||||
*
|
*
|
||||||
* @param string $classNamespace Namespace of class that contains constructor to verify
|
* @param string $classNamespace Namespace of class that contains constructor to verify
|
||||||
* @throws ReflectionException
|
|
||||||
*/
|
*/
|
||||||
protected static function assertHasNoConstructor($classNamespace)
|
protected static function assertHasNoConstructor($classNamespace)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ use Meritoo\Common\Type\Base\BaseType;
|
|||||||
/**
|
/**
|
||||||
* Trait for the base test case for the type of something
|
* Trait for the base test case for the type of something
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
trait BaseTypeTestCaseTrait
|
trait BaseTypeTestCaseTrait
|
||||||
{
|
{
|
||||||
|
|||||||
137
src/Traits/ValueObject/HumanTrait.php
Normal file
137
src/Traits/ValueObject/HumanTrait.php
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Common\Traits\ValueObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Methods and properties related to human
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
trait HumanTrait
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* First name
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $firstName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Last name
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $lastName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Email address
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $email;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Birth date
|
||||||
|
*
|
||||||
|
* @var \DateTime
|
||||||
|
*/
|
||||||
|
protected $birthDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class constructor
|
||||||
|
*
|
||||||
|
* @param string $firstName First name
|
||||||
|
* @param string $lastName Last name
|
||||||
|
* @param string $email (optional) Email address
|
||||||
|
* @param \DateTime $birthDate (optional) Birth date
|
||||||
|
*/
|
||||||
|
public function __construct($firstName, $lastName, $email = null, \DateTime $birthDate = null)
|
||||||
|
{
|
||||||
|
$this->firstName = $firstName;
|
||||||
|
$this->lastName = $lastName;
|
||||||
|
$this->email = $email;
|
||||||
|
$this->birthDate = $birthDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns representation of object as string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
$template = '%s';
|
||||||
|
|
||||||
|
if ('' !== $this->email && null !== $this->email) {
|
||||||
|
$template .= ' <%s>';
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf($template, $this->getFullName(), $this->email);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns first name
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getFirstName()
|
||||||
|
{
|
||||||
|
return $this->firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns last name
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getLastName()
|
||||||
|
{
|
||||||
|
return $this->lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns email address
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function getEmail()
|
||||||
|
{
|
||||||
|
return $this->email;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns birth date
|
||||||
|
*
|
||||||
|
* @return \DateTime|null
|
||||||
|
*/
|
||||||
|
public function getBirthDate()
|
||||||
|
{
|
||||||
|
return $this->birthDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the full name
|
||||||
|
*
|
||||||
|
* @param bool $firstNameFirst (optional) If is set to true, first name is the first part. Otherwise - last name.
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getFullName($firstNameFirst = true)
|
||||||
|
{
|
||||||
|
$beginning = $this->lastName;
|
||||||
|
$finish = $this->firstName;
|
||||||
|
|
||||||
|
if ($firstNameFirst) {
|
||||||
|
$beginning = $this->firstName;
|
||||||
|
$finish = $this->lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
return trim(sprintf('%s %s', $beginning, $finish));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,8 +14,8 @@ use Meritoo\Common\Utilities\Reflection;
|
|||||||
* Base / abstract type of something, e.g. type of button, order, date etc.
|
* Base / abstract type of something, e.g. type of button, order, date etc.
|
||||||
* Child class should contain constants - each of them represent one type.
|
* Child class should contain constants - each of them represent one type.
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
abstract class BaseType
|
abstract class BaseType
|
||||||
{
|
{
|
||||||
@@ -43,7 +43,7 @@ abstract class BaseType
|
|||||||
/**
|
/**
|
||||||
* Returns information if given type is correct
|
* Returns information if given type is correct
|
||||||
*
|
*
|
||||||
* @param string $type The type to check
|
* @param mixed $type The type to check
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function isCorrectType($type)
|
public function isCorrectType($type)
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ use Meritoo\Common\Type\Base\BaseType;
|
|||||||
/**
|
/**
|
||||||
* Type of date part, e.g. "year"
|
* Type of date part, e.g. "year"
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class DatePartType extends BaseType
|
class DatePartType extends BaseType
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ use Meritoo\Common\Utilities\Date;
|
|||||||
* A date's period.
|
* A date's period.
|
||||||
* Contains start and end date of the period.
|
* Contains start and end date of the period.
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class DatePeriod extends BaseType
|
class DatePeriod extends BaseType
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ use Meritoo\Common\Type\Base\BaseType;
|
|||||||
/**
|
/**
|
||||||
* The visibility of a property, a method or (as of PHP 7.1.0) a constant
|
* The visibility of a property, a method or (as of PHP 7.1.0) a constant
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*
|
*
|
||||||
* @see http://php.net/manual/en/language.oop5.visibility.php
|
* @see http://php.net/manual/en/language.oop5.visibility.php
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -9,10 +9,10 @@
|
|||||||
namespace Meritoo\Common\Utilities;
|
namespace Meritoo\Common\Utilities;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Useful arrays methods
|
* Useful methods related to arrays
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Arrays
|
class Arrays
|
||||||
{
|
{
|
||||||
@@ -27,80 +27,114 @@ class Arrays
|
|||||||
* Converts given array's column to string.
|
* Converts given array's column to string.
|
||||||
* Recursive call is made for multi-dimensional arrays.
|
* Recursive call is made for multi-dimensional arrays.
|
||||||
*
|
*
|
||||||
* @param array $array Array data to be converted
|
* @param array $array Data to be converted
|
||||||
* @param string|int $arrayColumnKey (optional) Column name
|
* @param string|int $arrayColumnKey (optional) Column name. Default: "".
|
||||||
* @param string $separator (optional) Separator used in resultant string
|
* @param string $separator (optional) Separator used between values. Default: ",".
|
||||||
* @return string
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
public static function values2string(array $array, $arrayColumnKey = '', $separator = ',')
|
public static function values2string(array $array, $arrayColumnKey = '', $separator = ',')
|
||||||
{
|
{
|
||||||
$effect = '';
|
/*
|
||||||
|
* No elements?
|
||||||
if (!empty($array)) {
|
* Nothing to do
|
||||||
foreach ($array as $key => $value) {
|
*/
|
||||||
if (!empty($effect) &&
|
if (empty($array)) {
|
||||||
(
|
return null;
|
||||||
empty($arrayColumnKey) || (!is_array($value) && $key === $arrayColumnKey)
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
$effect .= $separator;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$values = [];
|
||||||
|
|
||||||
|
foreach ($array as $key => $value) {
|
||||||
|
$appendMe = null;
|
||||||
|
|
||||||
if (is_array($value)) {
|
if (is_array($value)) {
|
||||||
$effect .= self::values2string($value, $arrayColumnKey, $separator);
|
$appendMe = self::values2string($value, $arrayColumnKey, $separator);
|
||||||
} else {
|
} elseif (empty($arrayColumnKey)) {
|
||||||
if (empty($arrayColumnKey)) {
|
$appendMe = $value;
|
||||||
$effect .= $value;
|
|
||||||
} elseif ($key === $arrayColumnKey) {
|
} elseif ($key === $arrayColumnKey) {
|
||||||
$effect .= $array[$arrayColumnKey];
|
$appendMe = $array[$arrayColumnKey];
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $effect;
|
/*
|
||||||
|
* Part to append is unknown?
|
||||||
|
* Let's go to next part
|
||||||
|
*/
|
||||||
|
if (null === $appendMe) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$values[] = $appendMe;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* No values found?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($values)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return implode($separator, $values);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts given array to string with keys, e.g. abc=1&def=2 or abc="1" def="2"
|
* Converts given array to string with keys, e.g. abc=1&def=2 or abc="1" def="2"
|
||||||
*
|
*
|
||||||
* @param array $array Array data to be converted
|
* @param array $array Data to be converted
|
||||||
* @param string $separator (optional) Separator used between name-value pairs in resultant string
|
* @param string $separator (optional) Separator used between name-value pairs. Default: ",".
|
||||||
* @param string $valuesKeysSeparator (optional) Separator used between name and value in resultant string
|
* @param string $valuesKeysSeparator (optional) Separator used between name and value. Default: "=".
|
||||||
* @param string $valuesWrapper (optional) Wrapper used to wrap values, e.g. double-quote: key="value"
|
* @param string $valuesWrapper (optional) Wrapper used to wrap values, e.g. double-quote: key="value".
|
||||||
* @return string
|
* Default: "".
|
||||||
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
public static function valuesKeys2string($array, $separator = ',', $valuesKeysSeparator = '=', $valuesWrapper = '')
|
public static function valuesKeys2string(
|
||||||
{
|
array $array,
|
||||||
$effect = '';
|
$separator = ',',
|
||||||
|
$valuesKeysSeparator = '=',
|
||||||
|
$valuesWrapper = ''
|
||||||
|
) {
|
||||||
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = '';
|
||||||
|
|
||||||
if (is_array($array) && !empty($array)) {
|
|
||||||
foreach ($array as $key => $value) {
|
foreach ($array as $key => $value) {
|
||||||
if (!empty($effect)) {
|
if (!empty($result)) {
|
||||||
$effect .= $separator;
|
$result .= $separator;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($valuesWrapper)) {
|
if (!empty($valuesWrapper)) {
|
||||||
$value = sprintf('%s%s%s', $valuesWrapper, $value, $valuesWrapper);
|
$value = sprintf('%s%s%s', $valuesWrapper, $value, $valuesWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
$effect .= $key . $valuesKeysSeparator . $value;
|
$result .= $key . $valuesKeysSeparator . $value;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $effect;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts given array's rows to csv string
|
* Converts given array's rows to csv string
|
||||||
*
|
*
|
||||||
* @param array $array Array data to be converted. It have to be an array that represents database table.
|
* @param array $array Data to be converted. It have to be an array that represents database table.
|
||||||
* @param string $separator (optional) Separator used in resultant string
|
* @param string $separator (optional) Separator used between values. Default: ",".
|
||||||
* @return string
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
public static function values2csv($array, $separator = ',')
|
public static function values2csv(array $array, $separator = ',')
|
||||||
{
|
{
|
||||||
if (is_array($array) && !empty($array)) {
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
$rows = [];
|
$rows = [];
|
||||||
$lineSeparator = "\n";
|
$lineSeparator = "\n";
|
||||||
|
|
||||||
@@ -111,20 +145,19 @@ class Arrays
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (is_array($row) && !empty($row)) {
|
if (is_array($row) && !empty($row)) {
|
||||||
foreach ($row as &$value) {
|
foreach ($row as $key => $value) {
|
||||||
$value = html_entity_decode($value);
|
$row[$key] = html_entity_decode($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
$rows[] = implode($separator, $row);
|
$rows[] = implode($separator, $row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($rows)) {
|
if (empty($rows)) {
|
||||||
return implode($lineSeparator, $rows);
|
return '';
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return implode($lineSeparator, $rows);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -244,12 +277,20 @@ class Arrays
|
|||||||
/**
|
/**
|
||||||
* Returns breadcrumb (a path) to the last element of array
|
* Returns breadcrumb (a path) to the last element of array
|
||||||
*
|
*
|
||||||
* @param array $array The array to get the breadcrumb
|
* @param array $array Data to get the breadcrumb
|
||||||
* @param string $separator (optional) Separator used to stick the elements
|
* @param string $separator (optional) Separator used to stick the elements. Default: "/".
|
||||||
* @return string
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
public static function getLastElementBreadCrumb($array, $separator = '/')
|
public static function getLastElementBreadCrumb(array $array, $separator = '/')
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
$keys = array_keys($array);
|
$keys = array_keys($array);
|
||||||
$keysCount = count($keys);
|
$keysCount = count($keys);
|
||||||
|
|
||||||
@@ -352,7 +393,7 @@ class Arrays
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$effect = '';
|
$result = '';
|
||||||
$counter = 0;
|
$counter = 0;
|
||||||
|
|
||||||
$arrayCount = count($array);
|
$arrayCount = count($array);
|
||||||
@@ -363,19 +404,19 @@ class Arrays
|
|||||||
* Name of the variable was not provided and it's a multi dimensional array?
|
* Name of the variable was not provided and it's a multi dimensional array?
|
||||||
* Let's create the name, because variable is required for later usage (related to multi dimensional array)
|
* Let's create the name, because variable is required for later usage (related to multi dimensional array)
|
||||||
*/
|
*/
|
||||||
if (self::isMultiDimensional($array) && empty($jsVariableName)) {
|
if (empty($jsVariableName) && $isMultiDimensional) {
|
||||||
$jsVariableName = 'autoGeneratedVariable';
|
$jsVariableName = 'autoGeneratedVariable';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($jsVariableName) && is_string($jsVariableName)) {
|
if (!empty($jsVariableName) && is_string($jsVariableName)) {
|
||||||
$effect .= sprintf('var %s = ', $jsVariableName);
|
$result .= sprintf('var %s = ', $jsVariableName);
|
||||||
}
|
}
|
||||||
|
|
||||||
$effect .= 'new Array(';
|
$result .= 'new Array(';
|
||||||
|
|
||||||
if ($preserveIndexes || $isMultiDimensional) {
|
if ($preserveIndexes || $isMultiDimensional) {
|
||||||
$effect .= $arrayCount;
|
$result .= $arrayCount;
|
||||||
$effect .= ');';
|
$result .= ');';
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($array as $index => $value) {
|
foreach ($array as $index => $value) {
|
||||||
@@ -384,13 +425,13 @@ class Arrays
|
|||||||
if (is_array($value)) {
|
if (is_array($value)) {
|
||||||
$variable = $index;
|
$variable = $index;
|
||||||
|
|
||||||
if (is_integer($index)) {
|
if (is_int($index)) {
|
||||||
$variable = 'value_' . $variable;
|
$variable = 'value_' . $variable;
|
||||||
}
|
}
|
||||||
|
|
||||||
$value = self::array2JavaScript($value, $variable, $preserveIndexes);
|
$value = self::array2JavaScript($value, $variable, $preserveIndexes);
|
||||||
|
|
||||||
if (!empty($value)) {
|
if (null !== $value && '' !== $value) {
|
||||||
/*
|
/*
|
||||||
* Add an empty line for the 1st iteration only. Required to avoid missing empty line after
|
* Add an empty line for the 1st iteration only. Required to avoid missing empty line after
|
||||||
* declaration of variable:
|
* declaration of variable:
|
||||||
@@ -399,21 +440,20 @@ class Arrays
|
|||||||
* autoGeneratedVariable[1] = new Array(...);
|
* autoGeneratedVariable[1] = new Array(...);
|
||||||
*/
|
*/
|
||||||
if (1 === $counter) {
|
if (1 === $counter) {
|
||||||
$effect .= "\n";
|
$result .= "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
$effect .= $value . "\n";
|
$result .= $value . "\n";
|
||||||
$effect .= sprintf('%s[%s] = %s;', $jsVariableName, Miscellaneous::quoteValue($index), $variable);
|
$result .= sprintf('%s[%s] = %s;', $jsVariableName, Miscellaneous::quoteValue($index), $variable);
|
||||||
|
|
||||||
if ($counter !== $arrayCount) {
|
if ($counter !== $arrayCount) {
|
||||||
$effect .= "\n";
|
$result .= "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} elseif ($preserveIndexes) {
|
||||||
if ($preserveIndexes) {
|
|
||||||
if (!empty($jsVariableName)) {
|
if (!empty($jsVariableName)) {
|
||||||
$index = Miscellaneous::quoteValue($index);
|
$index = Miscellaneous::quoteValue($index);
|
||||||
$effect .= sprintf("\n%s[%s] = %s;", $jsVariableName, $index, $value);
|
$result .= sprintf("\n%s[%s] = %s;", $jsVariableName, $index, $value);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$format = '%s';
|
$format = '%s';
|
||||||
@@ -422,30 +462,34 @@ class Arrays
|
|||||||
$format .= ', ';
|
$format .= ', ';
|
||||||
}
|
}
|
||||||
|
|
||||||
$effect .= sprintf($format, $value);
|
$result .= sprintf($format, $value);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$preserveIndexes && !$isMultiDimensional) {
|
if (!$preserveIndexes && !$isMultiDimensional) {
|
||||||
$effect .= ');';
|
$result .= ');';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $effect;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Quotes (adds quotes) to elements of an array that are strings
|
* Quotes (adds quotes) to elements that are strings and returns new array (with quoted elements)
|
||||||
*
|
*
|
||||||
* @param array $array The array to check for string values
|
* @param array $array The array to check for string values
|
||||||
* @return array
|
* @return array|null
|
||||||
*/
|
*/
|
||||||
public static function quoteStrings($array)
|
public static function quoteStrings(array $array)
|
||||||
{
|
{
|
||||||
$effect = $array;
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
if (is_array($array) && !empty($array)) {
|
$result = [];
|
||||||
$effect = [];
|
|
||||||
|
|
||||||
foreach ($array as $index => $value) {
|
foreach ($array as $index => $value) {
|
||||||
if (is_array($value)) {
|
if (is_array($value)) {
|
||||||
@@ -456,11 +500,10 @@ class Arrays
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$effect[$index] = $value;
|
$result[$index] = $value;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $effect;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -474,7 +517,7 @@ class Arrays
|
|||||||
{
|
{
|
||||||
if (is_string($item)) {
|
if (is_string($item)) {
|
||||||
if ($last) {
|
if ($last) {
|
||||||
$item = substr($item, 0, strlen($item) - 1);
|
$item = substr($item, 0, -1);
|
||||||
} else {
|
} else {
|
||||||
$item = substr($item, 1);
|
$item = substr($item, 1);
|
||||||
}
|
}
|
||||||
@@ -499,6 +542,14 @@ class Arrays
|
|||||||
*/
|
*/
|
||||||
public static function getLastKey(array $array)
|
public static function getLastKey(array $array)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
$keys = array_keys($array);
|
$keys = array_keys($array);
|
||||||
|
|
||||||
return end($keys);
|
return end($keys);
|
||||||
@@ -517,7 +568,7 @@ class Arrays
|
|||||||
* No elements or the element does not exist?
|
* No elements or the element does not exist?
|
||||||
* Nothing to do
|
* Nothing to do
|
||||||
*/
|
*/
|
||||||
if (empty($array) || !in_array($item, $array)) {
|
if (empty($array) || !in_array($item, $array, true)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -547,29 +598,28 @@ class Arrays
|
|||||||
* @param bool $before (optional) If is set to true, all elements before given needle are removed. Otherwise - all
|
* @param bool $before (optional) If is set to true, all elements before given needle are removed. Otherwise - all
|
||||||
* after needle.
|
* after needle.
|
||||||
*/
|
*/
|
||||||
public static function removeElements(&$array, $needle, $before = true)
|
public static function removeElements(array &$array, $needle, $before = true)
|
||||||
{
|
{
|
||||||
if (is_array($array) && !empty($array)) {
|
if (!empty($array)) {
|
||||||
if (!$before) {
|
if (!$before) {
|
||||||
$array = array_reverse($array, true);
|
$array = array_reverse($array, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($array as $key => &$value) {
|
foreach ($array as $key => &$value) {
|
||||||
$remove = false;
|
$remove = false;
|
||||||
|
$isArray = is_array($value);
|
||||||
|
|
||||||
if (is_array($value)) {
|
if ($isArray) {
|
||||||
self::removeElements($value, $needle, $before);
|
self::removeElements($value, $needle, $before);
|
||||||
|
|
||||||
if (is_array($value) && empty($value)) {
|
if ($isArray && empty($value)) {
|
||||||
$remove = true;
|
$remove = true;
|
||||||
}
|
}
|
||||||
} else {
|
} elseif ($value === $needle) {
|
||||||
if ($value === $needle) {
|
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
$remove = true;
|
$remove = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ($remove) {
|
if ($remove) {
|
||||||
unset($array[$key]);
|
unset($array[$key]);
|
||||||
@@ -592,7 +642,7 @@ class Arrays
|
|||||||
* value will be used with it's key, because other will be overridden.
|
* value will be used with it's key, because other will be overridden.
|
||||||
* Otherwise - values are preserved and keys assigned to that values are
|
* Otherwise - values are preserved and keys assigned to that values are
|
||||||
* returned as an array.
|
* returned as an array.
|
||||||
* @return array
|
* @return array|null
|
||||||
*
|
*
|
||||||
* Example of $ignoreDuplicatedValues = false:
|
* Example of $ignoreDuplicatedValues = false:
|
||||||
* - provided array
|
* - provided array
|
||||||
@@ -618,7 +668,7 @@ class Arrays
|
|||||||
* Nothing to do
|
* Nothing to do
|
||||||
*/
|
*/
|
||||||
if (empty($array)) {
|
if (empty($array)) {
|
||||||
return [];
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$replaced = [];
|
$replaced = [];
|
||||||
@@ -673,7 +723,7 @@ class Arrays
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$effect = $array;
|
$effect = &$array;
|
||||||
ksort($effect, $sortFlags);
|
ksort($effect, $sortFlags);
|
||||||
|
|
||||||
foreach ($effect as &$value) {
|
foreach ($effect as &$value) {
|
||||||
@@ -729,8 +779,9 @@ class Arrays
|
|||||||
* ]
|
* ]
|
||||||
*
|
*
|
||||||
* @param string $string The string to be converted
|
* @param string $string The string to be converted
|
||||||
* @param string $separator (optional) Separator used between name-value pairs in the string
|
* @param string $separator (optional) Separator used between name-value pairs in the string.
|
||||||
* @param string $valuesKeysSeparator (optional) Separator used between name and value in the string
|
* Default: "|".
|
||||||
|
* @param string $valuesKeysSeparator (optional) Separator used between name and value in the string. Default: ":".
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function string2array($string, $separator = '|', $valuesKeysSeparator = ':')
|
public static function string2array($string, $separator = '|', $valuesKeysSeparator = ':')
|
||||||
@@ -749,7 +800,7 @@ class Arrays
|
|||||||
foreach ($exploded as $item) {
|
foreach ($exploded as $item) {
|
||||||
$exploded2 = explode($valuesKeysSeparator, $item);
|
$exploded2 = explode($valuesKeysSeparator, $item);
|
||||||
|
|
||||||
if (2 == count($exploded2)) {
|
if (2 === count($exploded2)) {
|
||||||
$key = trim($exploded2[0]);
|
$key = trim($exploded2[0]);
|
||||||
$value = trim($exploded2[1]);
|
$value = trim($exploded2[1]);
|
||||||
|
|
||||||
@@ -764,54 +815,52 @@ class Arrays
|
|||||||
* Returns information if given keys exist in given array
|
* Returns information if given keys exist in given array
|
||||||
*
|
*
|
||||||
* @param array $keys The keys to find
|
* @param array $keys The keys to find
|
||||||
* @param array $array The array which maybe contains keys
|
* @param array $array The array that maybe contains keys
|
||||||
* @param bool $explicit (optional) If is set to true, all keys should exist in given array. Otherwise - not all.
|
* @param bool $explicit (optional) If is set to true, all keys should exist in given array. Otherwise - not all.
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function areKeysInArray($keys, $array, $explicit = true)
|
public static function areKeysInArray(array $keys, array $array, $explicit = true)
|
||||||
{
|
{
|
||||||
$effect = false;
|
$result = false;
|
||||||
|
|
||||||
if (is_array($array) && !empty($array)) {
|
if (!empty($array)) {
|
||||||
$firstKey = true;
|
$firstKey = true;
|
||||||
|
|
||||||
foreach ($keys as $key) {
|
foreach ($keys as $key) {
|
||||||
$exists = array_key_exists($key, $array);
|
$exists = array_key_exists($key, $array);
|
||||||
|
|
||||||
if ($firstKey) {
|
if ($firstKey) {
|
||||||
$effect = $exists;
|
$result = $exists;
|
||||||
$firstKey = false;
|
$firstKey = false;
|
||||||
} else {
|
} elseif ($explicit) {
|
||||||
if ($explicit) {
|
$result = $result && $exists;
|
||||||
$effect = $effect && $exists;
|
|
||||||
|
|
||||||
if (!$effect) {
|
if (!$result) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$effect = $effect || $exists;
|
$result = $result || $exists;
|
||||||
|
|
||||||
if ($effect) {
|
if ($result) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return $effect;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns paths of the last elements
|
* Returns paths of the last elements
|
||||||
*
|
*
|
||||||
* @param array $array The array with elements
|
* @param array $array The array with elements
|
||||||
* @param string $separator (optional) Separator used in resultant strings. Default: ".".
|
* @param string $separator (optional) Separator used between elements. Default: ".".
|
||||||
* @param string $parentPath (optional) Path of the parent element. Default: "".
|
* @param string $parentPath (optional) Path of the parent element. Default: "".
|
||||||
* @param string|array $stopIfMatchedBy (optional) Patterns of keys or paths that matched will stop the process
|
* @param string|array $stopIfMatchedBy (optional) Patterns of keys or paths that matched will stop the process
|
||||||
* of path building and including children of those keys or paths (recursive
|
* of path building and including children of those keys or paths (recursive
|
||||||
* will not be used for keys in lower level of given array)
|
* will not be used for keys in lower level of given array). Default: "".
|
||||||
* @return array
|
* @return array|null
|
||||||
*
|
*
|
||||||
* Examples - $stopIfMatchedBy argument:
|
* Examples - $stopIfMatchedBy argument:
|
||||||
* a) "\d+"
|
* a) "\d+"
|
||||||
@@ -822,16 +871,24 @@ class Arrays
|
|||||||
*/
|
*/
|
||||||
public static function getLastElementsPaths(array $array, $separator = '.', $parentPath = '', $stopIfMatchedBy = '')
|
public static function getLastElementsPaths(array $array, $separator = '.', $parentPath = '', $stopIfMatchedBy = '')
|
||||||
{
|
{
|
||||||
$paths = [];
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($array)) {
|
|
||||||
if (!empty($stopIfMatchedBy)) {
|
if (!empty($stopIfMatchedBy)) {
|
||||||
$stopIfMatchedBy = self::makeArray($stopIfMatchedBy);
|
$stopIfMatchedBy = self::makeArray($stopIfMatchedBy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$paths = [];
|
||||||
|
|
||||||
foreach ($array as $key => $value) {
|
foreach ($array as $key => $value) {
|
||||||
$path = $key;
|
$path = $key;
|
||||||
$stopRecursion = false;
|
$stopRecursion = false;
|
||||||
|
$valueIsArray = is_array($value);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the path of parent element is delivered,
|
* If the path of parent element is delivered,
|
||||||
@@ -864,7 +921,7 @@ class Arrays
|
|||||||
* or
|
* or
|
||||||
* - the process is stopped, recursive is not used
|
* - the process is stopped, recursive is not used
|
||||||
*/
|
*/
|
||||||
if (!is_array($value) || (is_array($value) && empty($value)) || $stopRecursion) {
|
if (!$valueIsArray || ($valueIsArray && empty($value)) || $stopRecursion) {
|
||||||
$paths[$path] = $value;
|
$paths[$path] = $value;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -872,12 +929,11 @@ class Arrays
|
|||||||
/*
|
/*
|
||||||
* Let's iterate through the next level, using recursive
|
* Let's iterate through the next level, using recursive
|
||||||
*/
|
*/
|
||||||
if (is_array($value)) {
|
if ($valueIsArray) {
|
||||||
$recursivePaths = self::getLastElementsPaths($value, $separator, $path, $stopIfMatchedBy);
|
$recursivePaths = self::getLastElementsPaths($value, $separator, $path, $stopIfMatchedBy);
|
||||||
$paths += $recursivePaths;
|
$paths += $recursivePaths;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return $paths;
|
return $paths;
|
||||||
}
|
}
|
||||||
@@ -906,12 +962,13 @@ class Arrays
|
|||||||
* first level only.
|
* first level only.
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function areAllKeysMatchedByPattern($array, $pattern, $firstLevelOnly = false)
|
public static function areAllKeysMatchedByPattern(array $array, $pattern, $firstLevelOnly = false)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* It's not an array or it's empty array?
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
*/
|
*/
|
||||||
if (!is_array($array) || (is_array($array) && empty($array))) {
|
if (empty($array)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -955,10 +1012,10 @@ class Arrays
|
|||||||
*
|
*
|
||||||
* @param array $array The array to check
|
* @param array $array The array to check
|
||||||
* @param bool $firstLevelOnly (optional) If is set to true, all keys / indexes are checked. Otherwise - from the
|
* @param bool $firstLevelOnly (optional) If is set to true, all keys / indexes are checked. Otherwise - from the
|
||||||
* first level only.
|
* first level only (default behaviour).
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function areAllKeysIntegers($array, $firstLevelOnly = false)
|
public static function areAllKeysIntegers(array $array, $firstLevelOnly = false)
|
||||||
{
|
{
|
||||||
$pattern = '\d+';
|
$pattern = '\d+';
|
||||||
|
|
||||||
@@ -996,9 +1053,17 @@ class Arrays
|
|||||||
*/
|
*/
|
||||||
public static function getValueByKeysPath(array $array, array $keys)
|
public static function getValueByKeysPath(array $array, array $keys)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
$value = null;
|
$value = null;
|
||||||
|
|
||||||
if (!empty($array) && self::issetRecursive($array, $keys)) {
|
if (self::issetRecursive($array, $keys)) {
|
||||||
foreach ($keys as $key) {
|
foreach ($keys as $key) {
|
||||||
$value = $array[$key];
|
$value = $array[$key];
|
||||||
array_shift($keys);
|
array_shift($keys);
|
||||||
@@ -1042,9 +1107,16 @@ class Arrays
|
|||||||
*/
|
*/
|
||||||
public static function issetRecursive(array $array, array $keys)
|
public static function issetRecursive(array $array, array $keys)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$isset = false;
|
$isset = false;
|
||||||
|
|
||||||
if (!empty($array)) {
|
|
||||||
foreach ($keys as $key) {
|
foreach ($keys as $key) {
|
||||||
$isset = isset($array[$key]);
|
$isset = isset($array[$key]);
|
||||||
|
|
||||||
@@ -1059,7 +1131,6 @@ class Arrays
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return $isset;
|
return $isset;
|
||||||
}
|
}
|
||||||
@@ -1094,7 +1165,8 @@ class Arrays
|
|||||||
$recursiveValues = self::getAllValuesOfKey($value, $key);
|
$recursiveValues = self::getAllValuesOfKey($value, $key);
|
||||||
|
|
||||||
if (!empty($recursiveValues)) {
|
if (!empty($recursiveValues)) {
|
||||||
$values = array_merge($values, $recursiveValues);
|
$merged = array_merge($values, $recursiveValues);
|
||||||
|
$values = $merged;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1112,11 +1184,18 @@ class Arrays
|
|||||||
* @param string $keyName (optional) Name of key which will contain the position value
|
* @param string $keyName (optional) Name of key which will contain the position value
|
||||||
* @param int $startPosition (optional) Default, start value of the position for main / given array, not the
|
* @param int $startPosition (optional) Default, start value of the position for main / given array, not the
|
||||||
* children
|
* children
|
||||||
* @return array
|
* @return array|null
|
||||||
*/
|
*/
|
||||||
public static function setPositions(array $array, $keyName = self::POSITION_KEY_NAME, $startPosition = null)
|
public static function setPositions(array $array, $keyName = self::POSITION_KEY_NAME, $startPosition = null)
|
||||||
{
|
{
|
||||||
if (!empty($array)) {
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
$childPosition = 1;
|
$childPosition = 1;
|
||||||
|
|
||||||
if (null !== $startPosition) {
|
if (null !== $startPosition) {
|
||||||
@@ -1129,7 +1208,6 @@ class Arrays
|
|||||||
++$childPosition;
|
++$childPosition;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return $array;
|
return $array;
|
||||||
}
|
}
|
||||||
@@ -1142,14 +1220,19 @@ class Arrays
|
|||||||
*/
|
*/
|
||||||
public static function trimRecursive(array $array)
|
public static function trimRecursive(array $array)
|
||||||
{
|
{
|
||||||
$effect = $array;
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($array)) {
|
$result = [];
|
||||||
$effect = [];
|
|
||||||
|
|
||||||
foreach ($array as $key => $value) {
|
foreach ($array as $key => $value) {
|
||||||
if (is_array($value)) {
|
if (is_array($value)) {
|
||||||
$effect[$key] = self::trimRecursive($value);
|
$result[$key] = self::trimRecursive($value);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1157,11 +1240,10 @@ class Arrays
|
|||||||
$value = trim($value);
|
$value = trim($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
$effect[$key] = $value;
|
$result[$key] = $value;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $effect;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1254,7 +1336,7 @@ class Arrays
|
|||||||
*
|
*
|
||||||
* @param array $array The array with elements to implode
|
* @param array $array The array with elements to implode
|
||||||
* @param string $separator Separator used to stick together elements of given array
|
* @param string $separator Separator used to stick together elements of given array
|
||||||
* @return string
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
public static function implodeSmart(array $array, $separator)
|
public static function implodeSmart(array $array, $separator)
|
||||||
{
|
{
|
||||||
@@ -1263,7 +1345,7 @@ class Arrays
|
|||||||
* Nothing to do
|
* Nothing to do
|
||||||
*/
|
*/
|
||||||
if (empty($array)) {
|
if (empty($array)) {
|
||||||
return '';
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($array as &$element) {
|
foreach ($array as &$element) {
|
||||||
@@ -1276,7 +1358,7 @@ class Arrays
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Regex::endsWith($element, $separator)) {
|
if (Regex::endsWith($element, $separator)) {
|
||||||
$element = substr($element, 0, strlen($element) - 1);
|
$element = substr($element, 0, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1348,7 +1430,7 @@ class Arrays
|
|||||||
* Values should be compared only and both arrays are one-dimensional?
|
* Values should be compared only and both arrays are one-dimensional?
|
||||||
* Let's find difference by using simple function
|
* Let's find difference by using simple function
|
||||||
*/
|
*/
|
||||||
if ($valuesOnly && 1 == self::getDimensionsCount($array1) && 1 == self::getDimensionsCount($array2)) {
|
if ($valuesOnly && 1 === self::getDimensionsCount($array1) && 1 === self::getDimensionsCount($array2)) {
|
||||||
return array_diff($array1, $array2);
|
return array_diff($array1, $array2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1365,25 +1447,24 @@ class Arrays
|
|||||||
if ($array2HasKey && is_array($array2[$key])) {
|
if ($array2HasKey && is_array($array2[$key])) {
|
||||||
$difference = self::arrayDiffRecursive($value, $array2[$key], $valuesOnly);
|
$difference = self::arrayDiffRecursive($value, $array2[$key], $valuesOnly);
|
||||||
}
|
}
|
||||||
} else {
|
} elseif (!$array2HasKey || ($array2HasKey && $value !== $array2[$key])) {
|
||||||
/*
|
/*
|
||||||
* 2nd array hasn't key from 1st array?
|
* We are here, because:
|
||||||
|
* a) 2nd array hasn't key from 1st array
|
||||||
* OR
|
* OR
|
||||||
* Key exists in both, 1st and 2nd array, but values are different?
|
* b) key exists in both, 1st and 2nd array, but values are different
|
||||||
*/
|
*/
|
||||||
if (!$array2HasKey || ($array2HasKey && $value != $array2[$key])) {
|
|
||||||
$difference = $value;
|
$difference = $value;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (null !== $difference) {
|
if (null !== $difference) {
|
||||||
$effect[] = $difference;
|
$effect[] = $difference;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
/*
|
/*
|
||||||
* The key exists in 2nd array?
|
* The key exists in 2nd array?
|
||||||
*/
|
*/
|
||||||
if ($array2HasKey) {
|
} elseif ($array2HasKey) {
|
||||||
/*
|
/*
|
||||||
* The value it's an array (it's a nested array)?
|
* The value it's an array (it's a nested array)?
|
||||||
*/
|
*/
|
||||||
@@ -1402,15 +1483,14 @@ class Arrays
|
|||||||
}
|
}
|
||||||
|
|
||||||
$effect[$key] = $diff;
|
$effect[$key] = $diff;
|
||||||
} else {
|
|
||||||
/*
|
/*
|
||||||
* Value is different than in 2nd array?
|
* Value is different than in 2nd array?
|
||||||
* OKay, I've got difference
|
* OKay, I've got difference
|
||||||
*/
|
*/
|
||||||
if ($value != $array2[$key]) {
|
} elseif ($value !== $array2[$key]) {
|
||||||
$effect[$key] = $value;
|
$effect[$key] = $value;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* OKay, I've got difference
|
* OKay, I've got difference
|
||||||
@@ -1418,7 +1498,6 @@ class Arrays
|
|||||||
$effect[$key] = $value;
|
$effect[$key] = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return $effect;
|
return $effect;
|
||||||
}
|
}
|
||||||
@@ -1456,11 +1535,18 @@ class Arrays
|
|||||||
* @param int|null $startIndex (optional) Index from which incrementation should be started. If not provided,
|
* @param int|null $startIndex (optional) Index from which incrementation should be started. If not provided,
|
||||||
* the first index / key will be used.
|
* the first index / key will be used.
|
||||||
* @param int $incrementStep (optional) Value used for incrementation. The step of incrementation.
|
* @param int $incrementStep (optional) Value used for incrementation. The step of incrementation.
|
||||||
* @return array
|
* @return array|null
|
||||||
*/
|
*/
|
||||||
public static function incrementIndexes(array $array, $startIndex = null, $incrementStep = 1)
|
public static function incrementIndexes(array $array, $startIndex = null, $incrementStep = 1)
|
||||||
{
|
{
|
||||||
if (!empty($array)) {
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
$valuesToIncrement = [];
|
$valuesToIncrement = [];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1500,7 +1586,6 @@ class Arrays
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return $array;
|
return $array;
|
||||||
}
|
}
|
||||||
@@ -1556,6 +1641,14 @@ class Arrays
|
|||||||
*/
|
*/
|
||||||
public static function getDimensionsCount(array $array)
|
public static function getDimensionsCount(array $array)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
$dimensionsCount = 1;
|
$dimensionsCount = 1;
|
||||||
|
|
||||||
foreach ($array as $value) {
|
foreach ($array as $value) {
|
||||||
@@ -1575,6 +1668,60 @@ class Arrays
|
|||||||
return $dimensionsCount;
|
return $dimensionsCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns non-empty values, e.g. without "" (empty string), null or []
|
||||||
|
*
|
||||||
|
* @param array $values The values to filter
|
||||||
|
* @return array|null
|
||||||
|
*/
|
||||||
|
public static function getNonEmptyValues(array $values)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* No values?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($values)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return array_filter($values, function ($value) {
|
||||||
|
$nonEmptyScalar = is_scalar($value) && '' !== $value;
|
||||||
|
$nonEmptyArray = is_array($value) && !empty($value);
|
||||||
|
|
||||||
|
return $nonEmptyScalar || $nonEmptyArray || is_object($value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns non-empty values concatenated by given separator
|
||||||
|
*
|
||||||
|
* @param array $values The values to filter
|
||||||
|
* @param string $separator (optional) Separator used to implode the values. Default: ", ".
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public static function getNonEmptyValuesAsString(array $values, $separator = ', ')
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($values)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$nonEmpty = self::getNonEmptyValues($values);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* No values?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($nonEmpty)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return implode($separator, $nonEmpty);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns neighbour (next or previous element) for given element
|
* Returns neighbour (next or previous element) for given element
|
||||||
*
|
*
|
||||||
@@ -1585,21 +1732,29 @@ class Arrays
|
|||||||
*/
|
*/
|
||||||
private static function getNeighbour(array $array, $element, $next = true)
|
private static function getNeighbour(array $array, $element, $next = true)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* No elements?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($array)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
$noNext = $next && self::isLastElement($array, $element);
|
$noNext = $next && self::isLastElement($array, $element);
|
||||||
$noPrevious = !$next && self::isFirstElement($array, $element);
|
$noPrevious = !$next && self::isFirstElement($array, $element);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* No elements?
|
* Previous neighbour should be returned and given element is first?
|
||||||
* OR
|
|
||||||
* Given element does not exist in given array?
|
|
||||||
* OR
|
* OR
|
||||||
* Next neighbour should be returned and given element is last?
|
* Next neighbour should be returned and given element is last?
|
||||||
* OR
|
* OR
|
||||||
* Previous neighbour should be returned and given element is first?
|
* No elements?
|
||||||
|
* OR
|
||||||
|
* Given element does not exist in given array?
|
||||||
*
|
*
|
||||||
* Nothing to do
|
* Nothing to do
|
||||||
*/
|
*/
|
||||||
if (empty($array) || !in_array($element, $array) || $noNext || $noPrevious) {
|
if ($noPrevious || $noNext || empty($array) || !in_array($element, $array, true)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
85
src/Utilities/Bootstrap4CssSelector.php
Normal file
85
src/Utilities/Bootstrap4CssSelector.php
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Common\Utilities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Useful methods related to CSS selectors and the Bootstrap4 (front-end component library)
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class Bootstrap4CssSelector
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns selector of container with field's validation error
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getFieldErrorContainerSelector()
|
||||||
|
{
|
||||||
|
return '.invalid-feedback .form-error-message';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns selector of field's validation error
|
||||||
|
*
|
||||||
|
* @param string $formName Name of form (value of the "name" attribute)
|
||||||
|
* @param string $fieldId ID of field (value of the "id" attribute)
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getFieldErrorSelector($formName, $fieldId)
|
||||||
|
{
|
||||||
|
$labelSelector = CssSelector::getLabelSelector($formName, $fieldId);
|
||||||
|
|
||||||
|
if (empty($labelSelector)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$errorContainerSelector = static::getFieldErrorContainerSelector();
|
||||||
|
|
||||||
|
return sprintf('%s %s', $labelSelector, $errorContainerSelector);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns selector of radio-button's validation error
|
||||||
|
*
|
||||||
|
* @param string $formName Name of form (value of the "name" attribute)
|
||||||
|
* @param int $fieldSetIndex Index/Position of the field-set
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getRadioButtonErrorSelector($formName, $fieldSetIndex)
|
||||||
|
{
|
||||||
|
$fieldSetSelector = CssSelector::getFieldSetByIndexSelector($formName, $fieldSetIndex);
|
||||||
|
|
||||||
|
if (empty($fieldSetSelector)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$errorContainerSelector = static::getFieldErrorContainerSelector();
|
||||||
|
|
||||||
|
return sprintf('%s legend.col-form-label %s', $fieldSetSelector, $errorContainerSelector);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns selector of field's group
|
||||||
|
*
|
||||||
|
* @param string $formName Name of form (value of the "name" attribute)
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getFieldGroupSelector($formName)
|
||||||
|
{
|
||||||
|
$formSelector = CssSelector::getFormByNameSelector($formName);
|
||||||
|
|
||||||
|
if (empty($formSelector)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf('%s .form-group', $formSelector);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,8 +13,8 @@ use Meritoo\Common\Exception\Bundle\IncorrectBundleNameException;
|
|||||||
/**
|
/**
|
||||||
* Useful methods for bundle
|
* Useful methods for bundle
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Bundle
|
class Bundle
|
||||||
{
|
{
|
||||||
@@ -41,7 +41,7 @@ class Bundle
|
|||||||
* Given name of bundle is invalid?
|
* Given name of bundle is invalid?
|
||||||
*/
|
*/
|
||||||
if (!Regex::isValidBundleName($bundleName)) {
|
if (!Regex::isValidBundleName($bundleName)) {
|
||||||
throw new IncorrectBundleNameException($bundleName);
|
throw IncorrectBundleNameException::create($bundleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ use stdClass;
|
|||||||
/**
|
/**
|
||||||
* Useful Composer-related methods (only static functions)
|
* Useful Composer-related methods (only static functions)
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Composer
|
class Composer
|
||||||
{
|
{
|
||||||
|
|||||||
22
src/Utilities/CssSelector.php
Normal file
22
src/Utilities/CssSelector.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Common\Utilities;
|
||||||
|
|
||||||
|
use Meritoo\Common\Traits\CssSelector\FormCssSelector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Useful methods related to CSS selectors
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class CssSelector
|
||||||
|
{
|
||||||
|
use FormCssSelector;
|
||||||
|
}
|
||||||
@@ -11,15 +11,15 @@ namespace Meritoo\Common\Utilities;
|
|||||||
use DateInterval;
|
use DateInterval;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Meritoo\Common\Exception\Date\UnknownDatePartTypeException;
|
use Meritoo\Common\Exception\Type\UnknownDatePartTypeException;
|
||||||
use Meritoo\Common\Type\DatePartType;
|
use Meritoo\Common\Type\DatePartType;
|
||||||
use Meritoo\Common\Type\DatePeriod;
|
use Meritoo\Common\Type\DatePeriod;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Useful date methods
|
* Useful date methods
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Date
|
class Date
|
||||||
{
|
{
|
||||||
@@ -64,8 +64,7 @@ class Date
|
|||||||
const DATE_DIFFERENCE_UNIT_YEARS = 'years';
|
const DATE_DIFFERENCE_UNIT_YEARS = 'years';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns start and end date for given period.
|
* Returns date's period (that contains start and end date) for given period
|
||||||
* The dates are returned in an array with indexes 'start' and 'end'.
|
|
||||||
*
|
*
|
||||||
* @param int $period The period, type of period. One of DatePeriod class constants, e.g. DatePeriod::LAST_WEEK.
|
* @param int $period The period, type of period. One of DatePeriod class constants, e.g. DatePeriod::LAST_WEEK.
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
@@ -119,11 +118,15 @@ class Date
|
|||||||
$lastMonth = self::getDatesForPeriod(DatePeriod::LAST_MONTH);
|
$lastMonth = self::getDatesForPeriod(DatePeriod::LAST_MONTH);
|
||||||
$nextMonth = self::getDatesForPeriod(DatePeriod::NEXT_MONTH);
|
$nextMonth = self::getDatesForPeriod(DatePeriod::NEXT_MONTH);
|
||||||
|
|
||||||
|
if (null !== $lastMonth) {
|
||||||
$dateStart = $lastMonth->getEndDate();
|
$dateStart = $lastMonth->getEndDate();
|
||||||
$dateStart->add(new DateInterval('P1D'));
|
$dateStart->add(new DateInterval('P1D'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null !== $nextMonth) {
|
||||||
$dateEnd = $nextMonth->getStartDate();
|
$dateEnd = $nextMonth->getStartDate();
|
||||||
$dateEnd->sub(new DateInterval('P1D'));
|
$dateEnd->sub(new DateInterval('P1D'));
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case DatePeriod::NEXT_MONTH:
|
case DatePeriod::NEXT_MONTH:
|
||||||
@@ -137,10 +140,15 @@ class Date
|
|||||||
$dateStart = new DateTime();
|
$dateStart = new DateTime();
|
||||||
$dateEnd = new DateTime();
|
$dateEnd = new DateTime();
|
||||||
|
|
||||||
if (DatePeriod::LAST_YEAR == $period || DatePeriod::NEXT_YEAR == $period) {
|
$yearPeriod = [
|
||||||
|
DatePeriod::LAST_YEAR,
|
||||||
|
DatePeriod::NEXT_YEAR,
|
||||||
|
];
|
||||||
|
|
||||||
|
if (in_array($period, $yearPeriod, true)) {
|
||||||
$yearDifference = 1;
|
$yearDifference = 1;
|
||||||
|
|
||||||
if (DatePeriod::LAST_YEAR == $period) {
|
if (DatePeriod::LAST_YEAR === $period) {
|
||||||
$yearDifference *= -1;
|
$yearDifference *= -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,7 +172,7 @@ class Date
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$dateStart->setTime(0, 0, 0);
|
$dateStart->setTime(0, 0);
|
||||||
$dateEnd->setTime(23, 59, 59);
|
$dateEnd->setTime(23, 59, 59);
|
||||||
|
|
||||||
return new DatePeriod($dateStart, $dateEnd);
|
return new DatePeriod($dateStart, $dateEnd);
|
||||||
@@ -214,13 +222,13 @@ class Date
|
|||||||
|
|
||||||
return $dateTime
|
return $dateTime
|
||||||
->setTime($hour, $minute, $second)
|
->setTime($hour, $minute, $second)
|
||||||
->format($format);
|
->format($format)
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns current day of week
|
* Returns current day of week
|
||||||
*
|
*
|
||||||
* @throws UnknownDatePartTypeException
|
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public static function getCurrentDayOfWeek()
|
public static function getCurrentDayOfWeek()
|
||||||
@@ -255,21 +263,21 @@ class Date
|
|||||||
* Oops, incorrect year
|
* Oops, incorrect year
|
||||||
*/
|
*/
|
||||||
if ($year <= 0) {
|
if ($year <= 0) {
|
||||||
throw new UnknownDatePartTypeException(DatePartType::YEAR, $year);
|
throw UnknownDatePartTypeException::createException(DatePartType::YEAR, $year);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Oops, incorrect month
|
* Oops, incorrect month
|
||||||
*/
|
*/
|
||||||
if ($month < 1 || $month > 12) {
|
if ($month < 1 || $month > 12) {
|
||||||
throw new UnknownDatePartTypeException(DatePartType::MONTH, $month);
|
throw UnknownDatePartTypeException::createException(DatePartType::MONTH, $month);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Oops, incorrect day
|
* Oops, incorrect day
|
||||||
*/
|
*/
|
||||||
if ($day < 1 || $day > 31) {
|
if ($day < 1 || $day > 31) {
|
||||||
throw new UnknownDatePartTypeException(DatePartType::DAY, $day);
|
throw UnknownDatePartTypeException::createException(DatePartType::DAY, $day);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($month < 3) {
|
if ($month < 3) {
|
||||||
@@ -347,7 +355,7 @@ class Date
|
|||||||
*
|
*
|
||||||
* @param string|DateTime $dateStart The start date
|
* @param string|DateTime $dateStart The start date
|
||||||
* @param string|DateTime $dateEnd The end date
|
* @param string|DateTime $dateEnd The end date
|
||||||
* @param int $differenceUnit (optional) Unit of date difference. One of this class
|
* @param string $differenceUnit (optional) Unit of date difference. One of this class
|
||||||
* DATE_DIFFERENCE_UNIT_* constants. If is set to null all units are
|
* DATE_DIFFERENCE_UNIT_* constants. If is set to null all units are
|
||||||
* returned in the array.
|
* returned in the array.
|
||||||
* @return array|int
|
* @return array|int
|
||||||
@@ -368,11 +376,11 @@ class Date
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$dateStart = self::getDateTime($dateStart, true);
|
$start = self::getDateTime($dateStart, true);
|
||||||
$dateEnd = self::getDateTime($dateEnd, true);
|
$end = self::getDateTime($dateEnd, true);
|
||||||
|
|
||||||
$difference = [];
|
$difference = [];
|
||||||
$dateDiff = $dateEnd->getTimestamp() - $dateStart->getTimestamp();
|
$dateDiff = $end->getTimestamp() - $start->getTimestamp();
|
||||||
|
|
||||||
$daysInSeconds = 0;
|
$daysInSeconds = 0;
|
||||||
$hoursInSeconds = 0;
|
$hoursInSeconds = 0;
|
||||||
@@ -390,39 +398,39 @@ class Date
|
|||||||
self::DATE_DIFFERENCE_UNIT_MINUTES,
|
self::DATE_DIFFERENCE_UNIT_MINUTES,
|
||||||
];
|
];
|
||||||
|
|
||||||
if (null === $differenceUnit || self::DATE_DIFFERENCE_UNIT_YEARS == $differenceUnit) {
|
if (null === $differenceUnit || self::DATE_DIFFERENCE_UNIT_YEARS === $differenceUnit) {
|
||||||
$diff = $dateEnd->diff($dateStart);
|
$diff = $end->diff($start);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Difference between dates in years should be returned only?
|
* Difference between dates in years should be returned only?
|
||||||
*/
|
*/
|
||||||
if (self::DATE_DIFFERENCE_UNIT_YEARS == $differenceUnit) {
|
if (self::DATE_DIFFERENCE_UNIT_YEARS === $differenceUnit) {
|
||||||
return $diff->y;
|
return $diff->y;
|
||||||
}
|
}
|
||||||
|
|
||||||
$difference[self::DATE_DIFFERENCE_UNIT_YEARS] = $diff->y;
|
$difference[self::DATE_DIFFERENCE_UNIT_YEARS] = $diff->y;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null === $differenceUnit || self::DATE_DIFFERENCE_UNIT_MONTHS == $differenceUnit) {
|
if (null === $differenceUnit || self::DATE_DIFFERENCE_UNIT_MONTHS === $differenceUnit) {
|
||||||
$diff = $dateEnd->diff($dateStart);
|
$diff = $end->diff($start);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Difference between dates in months should be returned only?
|
* Difference between dates in months should be returned only?
|
||||||
*/
|
*/
|
||||||
if (self::DATE_DIFFERENCE_UNIT_MONTHS == $differenceUnit) {
|
if (self::DATE_DIFFERENCE_UNIT_MONTHS === $differenceUnit) {
|
||||||
return $diff->m;
|
return $diff->m;
|
||||||
}
|
}
|
||||||
|
|
||||||
$difference[self::DATE_DIFFERENCE_UNIT_MONTHS] = $diff->m;
|
$difference[self::DATE_DIFFERENCE_UNIT_MONTHS] = $diff->m;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null === $differenceUnit || in_array($differenceUnit, $relatedUnits)) {
|
if (null === $differenceUnit || in_array($differenceUnit, $relatedUnits, true)) {
|
||||||
$days = (int)floor($dateDiff / $daySeconds);
|
$days = (int)floor($dateDiff / $daySeconds);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Difference between dates in days should be returned only?
|
* Difference between dates in days should be returned only?
|
||||||
*/
|
*/
|
||||||
if (self::DATE_DIFFERENCE_UNIT_DAYS == $differenceUnit) {
|
if (self::DATE_DIFFERENCE_UNIT_DAYS === $differenceUnit) {
|
||||||
return $days;
|
return $days;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -439,13 +447,13 @@ class Date
|
|||||||
$daysInSeconds = $days * $daySeconds;
|
$daysInSeconds = $days * $daySeconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null === $differenceUnit || in_array($differenceUnit, $relatedUnits)) {
|
if (null === $differenceUnit || in_array($differenceUnit, $relatedUnits, true)) {
|
||||||
$hours = (int)floor(($dateDiff - $daysInSeconds) / $hourSeconds);
|
$hours = (int)floor(($dateDiff - $daysInSeconds) / $hourSeconds);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Difference between dates in hours should be returned only?
|
* Difference between dates in hours should be returned only?
|
||||||
*/
|
*/
|
||||||
if (self::DATE_DIFFERENCE_UNIT_HOURS == $differenceUnit) {
|
if (self::DATE_DIFFERENCE_UNIT_HOURS === $differenceUnit) {
|
||||||
return $hours;
|
return $hours;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -462,13 +470,13 @@ class Date
|
|||||||
$hoursInSeconds = $hours * $hourSeconds;
|
$hoursInSeconds = $hours * $hourSeconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null === $differenceUnit || self::DATE_DIFFERENCE_UNIT_MINUTES == $differenceUnit) {
|
if (null === $differenceUnit || self::DATE_DIFFERENCE_UNIT_MINUTES === $differenceUnit) {
|
||||||
$minutes = (int)floor(($dateDiff - $daysInSeconds - $hoursInSeconds) / 60);
|
$minutes = (int)floor(($dateDiff - $daysInSeconds - $hoursInSeconds) / 60);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Difference between dates in minutes should be returned only?
|
* Difference between dates in minutes should be returned only?
|
||||||
*/
|
*/
|
||||||
if (self::DATE_DIFFERENCE_UNIT_MINUTES == $differenceUnit) {
|
if (self::DATE_DIFFERENCE_UNIT_MINUTES === $differenceUnit) {
|
||||||
return $minutes;
|
return $minutes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -528,11 +536,15 @@ class Date
|
|||||||
/**
|
/**
|
||||||
* Returns random date based on given start date
|
* Returns random date based on given start date
|
||||||
*
|
*
|
||||||
* @param DateTime $startDate The start date. Start of the random date.
|
* @param DateTime $startDate (optional) Beginning of the random date. If not provided, current date will
|
||||||
* @param int $start (optional) Start of random partition
|
* be used (default behaviour).
|
||||||
* @param int $end (optional) End of random partition
|
* @param int $start (optional) Start of random partition. If not provided, 1 will be used
|
||||||
|
* (default behaviour).
|
||||||
|
* @param int $end (optional) End of random partition. If not provided, 100 will be used
|
||||||
|
* (default behaviour).
|
||||||
* @param string $intervalTemplate (optional) Template used to build date interval. The placeholder is replaced
|
* @param string $intervalTemplate (optional) Template used to build date interval. The placeholder is replaced
|
||||||
* with next, iterated value.
|
* with next, iterated value. If not provided, "P%sD" will be used (default
|
||||||
|
* behaviour).
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
* @return DateTime
|
* @return DateTime
|
||||||
*/
|
*/
|
||||||
@@ -554,7 +566,7 @@ class Date
|
|||||||
}
|
}
|
||||||
|
|
||||||
$randomDate = clone $startDate;
|
$randomDate = clone $startDate;
|
||||||
$randomInterval = new DateInterval(sprintf($intervalTemplate, rand($start, $end)));
|
$randomInterval = new DateInterval(sprintf($intervalTemplate, mt_rand($start, $end)));
|
||||||
|
|
||||||
return $randomDate->add($randomInterval);
|
return $randomDate->add($randomInterval);
|
||||||
}
|
}
|
||||||
@@ -566,10 +578,11 @@ class Date
|
|||||||
* @param mixed $value The value which maybe is a date
|
* @param mixed $value The value which maybe is a date
|
||||||
* @param bool $allowCompoundFormats (optional) If is set to true, the compound formats used to create an
|
* @param bool $allowCompoundFormats (optional) If is set to true, the compound formats used to create an
|
||||||
* instance of DateTime class are allowed (e.g. "now", "last day of next
|
* instance of DateTime class are allowed (e.g. "now", "last day of next
|
||||||
* month", "yyyy"). Otherwise - not and every incorrect value is refused.
|
* month", "yyyy"). Otherwise - not and every incorrect value is refused
|
||||||
|
* (default behaviour).
|
||||||
* @param string $dateFormat (optional) Format of date used to verify if given value is actually a date.
|
* @param string $dateFormat (optional) Format of date used to verify if given value is actually a date.
|
||||||
* It should be format matched to the given value, e.g. "Y-m-d H:i" for
|
* It should be format matched to the given value, e.g. "Y-m-d H:i" for
|
||||||
* "2015-01-01 10:00" value.
|
* "2015-01-01 10:00" value. Default: "Y-m-d".
|
||||||
* @return DateTime|bool
|
* @return DateTime|bool
|
||||||
*/
|
*/
|
||||||
public static function getDateTime($value, $allowCompoundFormats = false, $dateFormat = 'Y-m-d')
|
public static function getDateTime($value, $allowCompoundFormats = false, $dateFormat = 'Y-m-d')
|
||||||
@@ -637,7 +650,7 @@ class Date
|
|||||||
* So, I have to refuse those special compound formats if they are not explicitly declared as
|
* So, I have to refuse those special compound formats if they are not explicitly declared as
|
||||||
* compound (2nd argument of this method, set to false by default)
|
* compound (2nd argument of this method, set to false by default)
|
||||||
*/
|
*/
|
||||||
if (in_array($value, $specialFormats)) {
|
if (in_array($value, $specialFormats, true)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -662,7 +675,7 @@ class Date
|
|||||||
*/
|
*/
|
||||||
$dateString = (new DateTime())->format($value);
|
$dateString = (new DateTime())->format($value);
|
||||||
|
|
||||||
if ($dateString != $value) {
|
if ($dateString !== (string)$value) {
|
||||||
return new DateTime($dateString);
|
return new DateTime($dateString);
|
||||||
}
|
}
|
||||||
} catch (\Exception $exception) {
|
} catch (\Exception $exception) {
|
||||||
@@ -706,7 +719,7 @@ class Date
|
|||||||
* Formatted date it's the format who is validated?
|
* Formatted date it's the format who is validated?
|
||||||
* The format is invalid
|
* The format is invalid
|
||||||
*/
|
*/
|
||||||
if ($formatted == $format) {
|
if ($formatted === $format) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ use Generator;
|
|||||||
/**
|
/**
|
||||||
* Useful methods for the Generator class (only static functions)
|
* Useful methods for the Generator class (only static functions)
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class GeneratorUtility
|
class GeneratorUtility
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ namespace Meritoo\Common\Utilities;
|
|||||||
/**
|
/**
|
||||||
* Useful locale methods
|
* Useful locale methods
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Locale
|
class Locale
|
||||||
{
|
{
|
||||||
@@ -52,7 +52,7 @@ class Locale
|
|||||||
LC_MESSAGES,
|
LC_MESSAGES,
|
||||||
];
|
];
|
||||||
|
|
||||||
if (empty($languageCode) || !in_array($category, $availableCategories)) {
|
if (empty($languageCode) || !in_array($category, $availableCategories, true)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ namespace Meritoo\Common\Utilities;
|
|||||||
/**
|
/**
|
||||||
* Useful methods for mime types of files
|
* Useful methods for mime types of files
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class MimeTypes
|
class MimeTypes
|
||||||
{
|
{
|
||||||
@@ -733,7 +733,7 @@ class MimeTypes
|
|||||||
*/
|
*/
|
||||||
public static function getExtension($mimeType)
|
public static function getExtension($mimeType)
|
||||||
{
|
{
|
||||||
if (is_string($mimeType) && in_array($mimeType, self::$mimeTypes)) {
|
if (is_string($mimeType) && in_array($mimeType, self::$mimeTypes, true)) {
|
||||||
$data = Arrays::setKeysAsValues(self::$mimeTypes, false);
|
$data = Arrays::setKeysAsValues(self::$mimeTypes, false);
|
||||||
|
|
||||||
return $data[$mimeType];
|
return $data[$mimeType];
|
||||||
@@ -806,7 +806,7 @@ class MimeTypes
|
|||||||
*/
|
*/
|
||||||
public static function isImage($mimeType)
|
public static function isImage($mimeType)
|
||||||
{
|
{
|
||||||
if (in_array($mimeType, self::$mimeTypes)) {
|
if (in_array($mimeType, self::$mimeTypes, true)) {
|
||||||
return (bool)preg_match('|^image/.+$|', $mimeType);
|
return (bool)preg_match('|^image/.+$|', $mimeType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,15 +9,13 @@
|
|||||||
namespace Meritoo\Common\Utilities;
|
namespace Meritoo\Common\Utilities;
|
||||||
|
|
||||||
use Gedmo\Sluggable\Util\Urlizer;
|
use Gedmo\Sluggable\Util\Urlizer;
|
||||||
use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException;
|
|
||||||
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
|
|
||||||
use Transliterator;
|
use Transliterator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Miscellaneous methods (only static functions)
|
* Miscellaneous methods (only static functions)
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Miscellaneous
|
class Miscellaneous
|
||||||
{
|
{
|
||||||
@@ -62,15 +60,15 @@ class Miscellaneous
|
|||||||
$startFileName = mb_substr($startFileName, 1);
|
$startFileName = mb_substr($startFileName, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
$directoryContent = scandir($directoryPath);
|
$directoryContent = scandir($directoryPath, SCANDIR_SORT_ASCENDING);
|
||||||
|
|
||||||
if (!empty($directoryContent)) {
|
if (!empty($directoryContent)) {
|
||||||
foreach ($directoryContent as $fileName) {
|
foreach ($directoryContent as $fileName) {
|
||||||
if ('.' != $fileName && '..' != $fileName) {
|
if ('.' !== $fileName && '..' !== $fileName) {
|
||||||
$content = null;
|
$content = null;
|
||||||
|
|
||||||
if (!empty($startFileName) && !$startFileFound) {
|
if (!empty($startFileName) && !$startFileFound) {
|
||||||
if ($fileName == $startFileName) {
|
if ($fileName === $startFileName) {
|
||||||
$startFileFound = true;
|
$startFileFound = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,18 +82,18 @@ class Miscellaneous
|
|||||||
if (null !== $content) {
|
if (null !== $content) {
|
||||||
$files[$fileName] = $content;
|
$files[$fileName] = $content;
|
||||||
|
|
||||||
if (!empty($maxFilesCount)) {
|
if (null !== $maxFilesCount) {
|
||||||
$count += Arrays::getNonArrayElementsCount($content);
|
$count += Arrays::getNonArrayElementsCount($content);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$files[] = $fileName;
|
$files[] = $fileName;
|
||||||
|
|
||||||
if (!empty($maxFilesCount)) {
|
if (null !== $maxFilesCount) {
|
||||||
++$count;
|
++$count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($maxFilesCount) && $count >= $maxFilesCount) {
|
if (null !== $maxFilesCount && $count >= $maxFilesCount) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -160,11 +158,17 @@ class Miscellaneous
|
|||||||
*/
|
*/
|
||||||
public static function includeFileExtension($fileName, $extension)
|
public static function includeFileExtension($fileName, $extension)
|
||||||
{
|
{
|
||||||
if (self::getFileExtension($fileName, true) != strtolower($extension)) {
|
$fileExtension = self::getFileExtension($fileName, true);
|
||||||
return sprintf('%s.%s', $fileName, $extension);
|
|
||||||
|
/*
|
||||||
|
* File has given extension?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if ($fileExtension === strtolower($extension)) {
|
||||||
|
return $fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $fileName;
|
return sprintf('%s.%s', $fileName, $extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -229,31 +233,28 @@ class Miscellaneous
|
|||||||
/*
|
/*
|
||||||
* Let's clear name of file
|
* Let's clear name of file
|
||||||
*
|
*
|
||||||
* Attention. The name without extension may be cleared / urlized only
|
* Attention.
|
||||||
* to avoid incorrect name by replacing "." with "-".
|
* The name without extension may be cleared / urlized only to avoid incorrect name by replacing "." with "-".
|
||||||
*/
|
*/
|
||||||
$withoutExtension = Urlizer::urlize($withoutExtension);
|
$withoutExtension = Urlizer::urlize($withoutExtension);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now I have to complete the template used to build / generate unique name
|
* Now I have to complete the template used to build / generate unique name
|
||||||
*/
|
*/
|
||||||
$template = '%s-%s'; // file's name and unique key
|
$template = '%s-%s.%s'; // [file's name]-[unique key].[file's extension]
|
||||||
|
|
||||||
if ($objectId > 0) {
|
|
||||||
$template .= '-%s'; // object ID
|
|
||||||
}
|
|
||||||
|
|
||||||
$template .= '.%s'; // file's extension
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add some uniqueness
|
* Add some uniqueness
|
||||||
*/
|
*/
|
||||||
$unique = uniqid(mt_rand(), true);
|
$unique = self::getUniqueString(mt_rand());
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Finally build and return the unique name
|
* Finally build and return the unique name
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ($objectId > 0) {
|
if ($objectId > 0) {
|
||||||
|
$template = '%s-%s-%s.%s'; // [file's name]-[unique key]-[object ID].[file's extension]
|
||||||
|
|
||||||
return sprintf($template, $withoutExtension, $unique, $objectId, $extension);
|
return sprintf($template, $withoutExtension, $unique, $objectId, $extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,34 +296,6 @@ class Miscellaneous
|
|||||||
return $effect;
|
return $effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays variable content as preformatted text (fixed-width font and preserves both spaces and line breaks)
|
|
||||||
*
|
|
||||||
* If xdebug php module is loaded, displays variable using var_dump(), otherwise <pre>var_dump()</pre>.
|
|
||||||
* You can pass as many variables as you wish.
|
|
||||||
*
|
|
||||||
* Pass each variable as argument of this function. Amount unlimited. Variables are loaded using the
|
|
||||||
* func_get_args() function (@see http://pl1.php.net/manual/en/function.func-get-args.php).
|
|
||||||
*/
|
|
||||||
public static function variableDump()
|
|
||||||
{
|
|
||||||
$xdebugLoaded = self::isPhpModuleLoaded('xdebug');
|
|
||||||
|
|
||||||
if (!$xdebugLoaded) {
|
|
||||||
echo '<pre>';
|
|
||||||
}
|
|
||||||
|
|
||||||
$arguments = func_get_args();
|
|
||||||
|
|
||||||
foreach ($arguments as $argument) {
|
|
||||||
var_dump($argument);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$xdebugLoaded) {
|
|
||||||
echo '</pre>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns information if given PHP module is compiled and loaded
|
* Returns information if given PHP module is compiled and loaded
|
||||||
*
|
*
|
||||||
@@ -333,7 +306,7 @@ class Miscellaneous
|
|||||||
{
|
{
|
||||||
$phpModulesArray = get_loaded_extensions();
|
$phpModulesArray = get_loaded_extensions();
|
||||||
|
|
||||||
return in_array($phpModuleName, $phpModulesArray);
|
return in_array($phpModuleName, $phpModulesArray, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -452,6 +425,14 @@ class Miscellaneous
|
|||||||
*/
|
*/
|
||||||
public static function replace($subject, $search, $replacement, $quoteStrings = false)
|
public static function replace($subject, $search, $replacement, $quoteStrings = false)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Unknown source or item to find or replacement is an empty array?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($subject) || empty($search) || [] === $replacement) {
|
||||||
|
return $subject;
|
||||||
|
}
|
||||||
|
|
||||||
$effect = $subject;
|
$effect = $subject;
|
||||||
|
|
||||||
$searchIsString = is_string($search);
|
$searchIsString = is_string($search);
|
||||||
@@ -461,7 +442,7 @@ class Miscellaneous
|
|||||||
* Value to find is neither a string nor an array OR it's an empty string?
|
* Value to find is neither a string nor an array OR it's an empty string?
|
||||||
* Nothing to do
|
* Nothing to do
|
||||||
*/
|
*/
|
||||||
if ((!$searchIsString && !$searchIsArray) || ($searchIsString && 0 == strlen($search))) {
|
if ((!$searchIsString && !$searchIsArray) || ($searchIsString && '' === $search)) {
|
||||||
return $effect;
|
return $effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -471,40 +452,50 @@ class Miscellaneous
|
|||||||
$bothAreStrings = $searchIsString && $replacementIsString;
|
$bothAreStrings = $searchIsString && $replacementIsString;
|
||||||
$bothAreArrays = $searchIsArray && $replacementIsArray;
|
$bothAreArrays = $searchIsArray && $replacementIsArray;
|
||||||
|
|
||||||
/*
|
|
||||||
* First step: replace strings, simple operation with strings
|
|
||||||
*/
|
|
||||||
if ($searchIsString && $replacementIsString) {
|
|
||||||
if ($quoteStrings) {
|
if ($quoteStrings) {
|
||||||
|
if ($replacementIsString) {
|
||||||
$replacement = '\'' . $replacement . '\'';
|
$replacement = '\'' . $replacement . '\'';
|
||||||
|
} elseif ($replacementIsArray) {
|
||||||
|
foreach ($replacement as &$item) {
|
||||||
|
if (is_string($item)) {
|
||||||
|
$item = '\'' . $item . '\'';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unset($item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 1st step: replace strings, simple operation with strings
|
||||||
|
*/
|
||||||
|
if ($bothAreStrings) {
|
||||||
$effect = str_replace($search, $replacement, $subject);
|
$effect = str_replace($search, $replacement, $subject);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Second step: replace with regular expressions.
|
* 2nd step: replace with regular expressions.
|
||||||
* Attention. Searched and replacement value should be the same type: strings or arrays.
|
* Attention. Searched and replacement value should be the same type: strings or arrays.
|
||||||
*/
|
*/
|
||||||
if ($effect == $subject && ($bothAreStrings || $bothAreArrays)) {
|
if ($effect === $subject && ($bothAreStrings || $bothAreArrays)) {
|
||||||
if ($quoteStrings && $replacementIsString) {
|
|
||||||
$replacement = '\'' . $replacement . '\'';
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I have to avoid string that contains spaces only, e.g. " ".
|
* I have to avoid string that contains spaces only, e.g. " ".
|
||||||
* It's required to avoid bug: preg_replace(): Empty regular expression.
|
* It's required to avoid bug: preg_replace(): Empty regular expression.
|
||||||
*/
|
*/
|
||||||
if ($searchIsArray || ($searchIsString && !empty(trim($search)))) {
|
if ($searchIsArray || ($searchIsString && !empty(trim($search)))) {
|
||||||
$effect = preg_replace($search, $replacement, $subject);
|
$replaced = @preg_replace($search, $replacement, $subject);
|
||||||
|
|
||||||
|
if (null !== $replaced && [] !== $replaced) {
|
||||||
|
$effect = $replaced;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Third step: complex replace of the replacement defined as an array.
|
* 3rd step: complex replace of the replacement defined as an array.
|
||||||
* It may be useful when you want to search for a one string and replace the string with multiple values.
|
* It may be useful when you want to search for a one string and replace the string with multiple values.
|
||||||
*/
|
*/
|
||||||
if ($effect == $subject && $searchIsString && $replacementIsArray) {
|
if ($effect === $subject && $searchIsString && $replacementIsArray) {
|
||||||
$subjectIsArray = is_array($subject);
|
$subjectIsArray = is_array($subject);
|
||||||
$effect = '';
|
$effect = '';
|
||||||
|
|
||||||
@@ -527,16 +518,6 @@ class Miscellaneous
|
|||||||
$exploded = explode($search, $subSubject);
|
$exploded = explode($search, $subSubject);
|
||||||
$explodedCount = count($exploded);
|
$explodedCount = count($exploded);
|
||||||
|
|
||||||
if ($quoteStrings) {
|
|
||||||
foreach ($replacement as &$item) {
|
|
||||||
if (is_string($item)) {
|
|
||||||
$item = '\'' . $item . '\'';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unset($item);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($exploded as $key => $item) {
|
foreach ($exploded as $key => $item) {
|
||||||
$subEffect .= $item;
|
$subEffect .= $item;
|
||||||
|
|
||||||
@@ -589,7 +570,12 @@ class Miscellaneous
|
|||||||
*/
|
*/
|
||||||
public static function getOperatingSystemNameServer()
|
public static function getOperatingSystemNameServer()
|
||||||
{
|
{
|
||||||
return php_uname('s');
|
return PHP_OS;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Previous version:
|
||||||
|
* return php_uname('s');
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -681,7 +667,8 @@ class Miscellaneous
|
|||||||
|
|
||||||
$spacePosition = mb_strrpos($lineWithAberration, ' ', 0, $encoding);
|
$spacePosition = mb_strrpos($lineWithAberration, ' ', 0, $encoding);
|
||||||
|
|
||||||
if ($spacePosition > 0) {
|
if (false !== $spacePosition && 0 < $spacePosition) {
|
||||||
|
/* @var int $spacePosition */
|
||||||
$perLine = $spacePosition;
|
$perLine = $spacePosition;
|
||||||
$insertSeparator = true;
|
$insertSeparator = true;
|
||||||
}
|
}
|
||||||
@@ -738,8 +725,8 @@ class Miscellaneous
|
|||||||
return unlink($directoryPath);
|
return unlink($directoryPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (scandir($directoryPath) as $item) {
|
foreach (scandir($directoryPath, SCANDIR_SORT_ASCENDING) as $item) {
|
||||||
if ('.' == $item || '..' == $item) {
|
if ('.' === $item || '..' === $item) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -788,7 +775,7 @@ class Miscellaneous
|
|||||||
foreach ($members as $key => $value) {
|
foreach ($members as $key => $value) {
|
||||||
$value = mb_strtolower($value);
|
$value = mb_strtolower($value);
|
||||||
|
|
||||||
if (0 == $key) {
|
if (0 === $key) {
|
||||||
$effect .= self::lowercaseFirst($value);
|
$effect .= self::lowercaseFirst($value);
|
||||||
} else {
|
} else {
|
||||||
$effect .= self::uppercaseFirst($value);
|
$effect .= self::uppercaseFirst($value);
|
||||||
@@ -809,10 +796,6 @@ class Miscellaneous
|
|||||||
* - null (default): nothing is done with the string
|
* - null (default): nothing is done with the string
|
||||||
* - true: the rest of string is lowercased
|
* - true: the rest of string is lowercased
|
||||||
* - false: the rest of string is uppercased
|
* - false: the rest of string is uppercased
|
||||||
*
|
|
||||||
* Some explanation:
|
|
||||||
* Function lcfirst() is available for PHP >= 5.30, so I wrote my own function that lowercases first character of
|
|
||||||
* the string.
|
|
||||||
*/
|
*/
|
||||||
public static function lowercaseFirst($text, $restLowercase = null)
|
public static function lowercaseFirst($text, $restLowercase = null)
|
||||||
{
|
{
|
||||||
@@ -828,16 +811,7 @@ class Miscellaneous
|
|||||||
$effect = mb_strtoupper($effect);
|
$effect = mb_strtoupper($effect);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (function_exists('lcfirst')) {
|
return lcfirst($effect);
|
||||||
$effect = lcfirst($effect);
|
|
||||||
} else {
|
|
||||||
$first = mb_strtolower($effect[0]);
|
|
||||||
$rest = mb_substr($effect, 1);
|
|
||||||
|
|
||||||
$effect = $first . $rest;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $effect;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -866,16 +840,7 @@ class Miscellaneous
|
|||||||
$effect = mb_strtoupper($effect);
|
$effect = mb_strtoupper($effect);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (function_exists('ucfirst')) {
|
return ucfirst($effect);
|
||||||
$effect = ucfirst($effect);
|
|
||||||
} else {
|
|
||||||
$first = mb_strtoupper($effect[0]);
|
|
||||||
$rest = mb_substr($effect, 1);
|
|
||||||
|
|
||||||
$effect = $first . $rest;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $effect;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -916,9 +881,9 @@ class Miscellaneous
|
|||||||
'TB',
|
'TB',
|
||||||
'PB',
|
'PB',
|
||||||
];
|
];
|
||||||
$index = floor(log($sizeInBytes, 1024));
|
|
||||||
|
|
||||||
$size = round($sizeInBytes / pow(1024, $index), 2);
|
$index = floor(log($sizeInBytes, 1024));
|
||||||
|
$size = round($sizeInBytes / (1024 ** $index), 2);
|
||||||
$unit = $units[(int)$index];
|
$unit = $units[(int)$index];
|
||||||
|
|
||||||
return sprintf('%s %s', $size, $unit);
|
return sprintf('%s %s', $size, $unit);
|
||||||
@@ -1194,10 +1159,6 @@ class Miscellaneous
|
|||||||
|
|
||||||
if (null !== $globalSource && isset($globalSource[$variableName])) {
|
if (null !== $globalSource && isset($globalSource[$variableName])) {
|
||||||
$value = $globalSource[$variableName];
|
$value = $globalSource[$variableName];
|
||||||
|
|
||||||
if (!ini_get('magic_quotes_gpc')) {
|
|
||||||
$value = addslashes($value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1243,7 +1204,7 @@ class Miscellaneous
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$text = $text . '0';
|
$text .= '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $text;
|
return $text;
|
||||||
@@ -1298,8 +1259,8 @@ class Miscellaneous
|
|||||||
if ($asHexadecimal) {
|
if ($asHexadecimal) {
|
||||||
$hexadecimal = dechex($colorComponent);
|
$hexadecimal = dechex($colorComponent);
|
||||||
|
|
||||||
if (1 == strlen($hexadecimal)) {
|
if (1 === strlen($hexadecimal)) {
|
||||||
return sprintf('0%s', $hexadecimal, $hexadecimal);
|
return sprintf('0%s', $hexadecimal);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $hexadecimal;
|
return $hexadecimal;
|
||||||
@@ -1312,8 +1273,6 @@ class Miscellaneous
|
|||||||
* Returns inverted value of color for given color
|
* Returns inverted value of color for given color
|
||||||
*
|
*
|
||||||
* @param string $color Hexadecimal value of color to invert (with or without hash), e.g. "dd244c" or "#22a5fe"
|
* @param string $color Hexadecimal value of color to invert (with or without hash), e.g. "dd244c" or "#22a5fe"
|
||||||
* @throws IncorrectColorHexLengthException
|
|
||||||
* @throws InvalidColorHexValueException
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getInvertedColor($color)
|
public static function getInvertedColor($color)
|
||||||
@@ -1328,14 +1287,14 @@ class Miscellaneous
|
|||||||
* Verify and get valid value of color.
|
* Verify and get valid value of color.
|
||||||
* An exception will be thrown if the value is not a color.
|
* An exception will be thrown if the value is not a color.
|
||||||
*/
|
*/
|
||||||
$color = Regex::getValidColorHexValue($color);
|
$validColor = Regex::getValidColorHexValue($color);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Grab color's components
|
* Grab color's components
|
||||||
*/
|
*/
|
||||||
$red = hexdec(substr($color, 0, 2));
|
$red = hexdec(substr($validColor, 0, 2));
|
||||||
$green = hexdec(substr($color, 2, 2));
|
$green = hexdec(substr($validColor, 2, 2));
|
||||||
$blue = hexdec(substr($color, 4, 2));
|
$blue = hexdec(substr($validColor, 4, 2));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calculate inverted color's components
|
* Calculate inverted color's components
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ namespace Meritoo\Common\Utilities;
|
|||||||
|
|
||||||
use Doctrine\Common\Collections\ArrayCollection;
|
use Doctrine\Common\Collections\ArrayCollection;
|
||||||
use Doctrine\ORM\EntityManager;
|
use Doctrine\ORM\EntityManager;
|
||||||
use Doctrine\ORM\OptimisticLockException;
|
|
||||||
use Doctrine\ORM\Query\Expr\Join;
|
use Doctrine\ORM\Query\Expr\Join;
|
||||||
use Doctrine\ORM\Query\Parameter;
|
use Doctrine\ORM\Query\Parameter;
|
||||||
use Doctrine\ORM\QueryBuilder;
|
use Doctrine\ORM\QueryBuilder;
|
||||||
@@ -18,8 +17,8 @@ use Doctrine\ORM\QueryBuilder;
|
|||||||
/**
|
/**
|
||||||
* Useful methods for query builder (the Doctrine's QueryBuilder class)
|
* Useful methods for query builder (the Doctrine's QueryBuilder class)
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class QueryBuilderUtility
|
class QueryBuilderUtility
|
||||||
{
|
{
|
||||||
@@ -91,7 +90,7 @@ class QueryBuilderUtility
|
|||||||
* @param array $criteria (optional) The criteria used in WHERE clause. It may simple array with pairs
|
* @param array $criteria (optional) The criteria used in WHERE clause. It may simple array with pairs
|
||||||
* key-value or an array of arrays where second element of sub-array is the
|
* key-value or an array of arrays where second element of sub-array is the
|
||||||
* comparison operator. Example below.
|
* comparison operator. Example below.
|
||||||
* @param string $alias (optional) Alias used in the query
|
* @param string|null $alias (optional) Alias used in the query
|
||||||
* @return QueryBuilder
|
* @return QueryBuilder
|
||||||
*
|
*
|
||||||
* Example of the $criteria argument:
|
* Example of the $criteria argument:
|
||||||
@@ -107,7 +106,7 @@ class QueryBuilderUtility
|
|||||||
* 'position' => 5,
|
* 'position' => 5,
|
||||||
* ]
|
* ]
|
||||||
*/
|
*/
|
||||||
public static function setCriteria(QueryBuilder $queryBuilder, array $criteria = [], $alias = '')
|
public static function setCriteria(QueryBuilder $queryBuilder, array $criteria = [], $alias = null)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* No criteria used in WHERE clause?
|
* No criteria used in WHERE clause?
|
||||||
@@ -121,7 +120,7 @@ class QueryBuilderUtility
|
|||||||
* No alias provided?
|
* No alias provided?
|
||||||
* Let's use root alias
|
* Let's use root alias
|
||||||
*/
|
*/
|
||||||
if (empty($alias)) {
|
if (null === $alias || '' === $alias) {
|
||||||
$alias = self::getRootAlias($queryBuilder);
|
$alias = self::getRootAlias($queryBuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +128,7 @@ class QueryBuilderUtility
|
|||||||
$compareOperator = '=';
|
$compareOperator = '=';
|
||||||
|
|
||||||
if (is_array($value) && !empty($value)) {
|
if (is_array($value) && !empty($value)) {
|
||||||
if (2 == count($value)) {
|
if (2 === count($value)) {
|
||||||
$compareOperator = $value[1];
|
$compareOperator = $value[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,7 +157,6 @@ class QueryBuilderUtility
|
|||||||
* @param array|ArrayCollection $entities The entities to delete
|
* @param array|ArrayCollection $entities The entities to delete
|
||||||
* @param bool $flushDeleted (optional) If is set to true, flushes the deleted objects (default
|
* @param bool $flushDeleted (optional) If is set to true, flushes the deleted objects (default
|
||||||
* behaviour). Otherwise - not.
|
* behaviour). Otherwise - not.
|
||||||
* @throws OptimisticLockException
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function deleteEntities(EntityManager $entityManager, $entities, $flushDeleted = true)
|
public static function deleteEntities(EntityManager $entityManager, $entities, $flushDeleted = true)
|
||||||
|
|||||||
@@ -13,18 +13,14 @@ use Doctrine\Common\Util\Inflector;
|
|||||||
use Meritoo\Common\Collection\Collection;
|
use Meritoo\Common\Collection\Collection;
|
||||||
use Meritoo\Common\Exception\Reflection\CannotResolveClassNameException;
|
use Meritoo\Common\Exception\Reflection\CannotResolveClassNameException;
|
||||||
use Meritoo\Common\Exception\Reflection\MissingChildClassesException;
|
use Meritoo\Common\Exception\Reflection\MissingChildClassesException;
|
||||||
|
use Meritoo\Common\Exception\Reflection\NotExistingPropertyException;
|
||||||
use Meritoo\Common\Exception\Reflection\TooManyChildClassesException;
|
use Meritoo\Common\Exception\Reflection\TooManyChildClassesException;
|
||||||
use ReflectionClass;
|
|
||||||
use ReflectionException;
|
|
||||||
use ReflectionMethod;
|
|
||||||
use ReflectionObject;
|
|
||||||
use ReflectionProperty;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Useful reflection methods
|
* Useful reflection methods
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Reflection
|
class Reflection
|
||||||
{
|
{
|
||||||
@@ -34,21 +30,20 @@ class Reflection
|
|||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @param bool $withoutInheritance (optional) If is set to true, only methods for given class are returned.
|
* @param bool $withoutInheritance (optional) If is set to true, only methods for given class are returned.
|
||||||
* Otherwise - all methods, with inherited methods too.
|
* Otherwise - all methods, with inherited methods too.
|
||||||
* @throws ReflectionException
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getMethods($class, $withoutInheritance = false)
|
public static function getMethods($class, $withoutInheritance = false)
|
||||||
{
|
{
|
||||||
$effect = [];
|
$effect = [];
|
||||||
|
|
||||||
$reflection = new ReflectionClass($class);
|
$reflection = new \ReflectionClass($class);
|
||||||
$methods = $reflection->getMethods();
|
$methods = $reflection->getMethods();
|
||||||
|
|
||||||
if (!empty($methods)) {
|
if (!empty($methods)) {
|
||||||
$className = self::getClassName($class);
|
$className = self::getClassName($class);
|
||||||
|
|
||||||
foreach ($methods as $method) {
|
foreach ($methods as $method) {
|
||||||
if ($method instanceof ReflectionMethod) {
|
if ($method instanceof \ReflectionMethod) {
|
||||||
if ($withoutInheritance && $className !== $method->class) {
|
if ($withoutInheritance && $className !== $method->class) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -65,12 +60,11 @@ class Reflection
|
|||||||
* Returns constants of given class / object
|
* Returns constants of given class / object
|
||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @throws ReflectionException
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getConstants($class)
|
public static function getConstants($class)
|
||||||
{
|
{
|
||||||
$reflection = new ReflectionClass($class);
|
$reflection = new \ReflectionClass($class);
|
||||||
|
|
||||||
return $reflection->getConstants();
|
return $reflection->getConstants();
|
||||||
}
|
}
|
||||||
@@ -80,7 +74,6 @@ class Reflection
|
|||||||
* Constants whose values are integers are considered only.
|
* Constants whose values are integers are considered only.
|
||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @throws ReflectionException
|
|
||||||
* @return int|null
|
* @return int|null
|
||||||
*/
|
*/
|
||||||
public static function getMaxNumberConstant($class)
|
public static function getMaxNumberConstant($class)
|
||||||
@@ -107,12 +100,11 @@ class Reflection
|
|||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @param string $method Name of the method to find
|
* @param string $method Name of the method to find
|
||||||
* @throws ReflectionException
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function hasMethod($class, $method)
|
public static function hasMethod($class, $method)
|
||||||
{
|
{
|
||||||
$reflection = new ReflectionClass($class);
|
$reflection = new \ReflectionClass($class);
|
||||||
|
|
||||||
return $reflection->hasMethod($method);
|
return $reflection->hasMethod($method);
|
||||||
}
|
}
|
||||||
@@ -122,12 +114,11 @@ class Reflection
|
|||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @param string $property Name of the property to find
|
* @param string $property Name of the property to find
|
||||||
* @throws ReflectionException
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function hasProperty($class, $property)
|
public static function hasProperty($class, $property)
|
||||||
{
|
{
|
||||||
$reflection = new ReflectionClass($class);
|
$reflection = new \ReflectionClass($class);
|
||||||
|
|
||||||
return $reflection->hasProperty($property);
|
return $reflection->hasProperty($property);
|
||||||
}
|
}
|
||||||
@@ -137,12 +128,11 @@ class Reflection
|
|||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @param string $constant Name of the constant to find
|
* @param string $constant Name of the constant to find
|
||||||
* @throws ReflectionException
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function hasConstant($class, $constant)
|
public static function hasConstant($class, $constant)
|
||||||
{
|
{
|
||||||
$reflection = new ReflectionClass($class);
|
$reflection = new \ReflectionClass($class);
|
||||||
|
|
||||||
return $reflection->hasConstant($constant);
|
return $reflection->hasConstant($constant);
|
||||||
}
|
}
|
||||||
@@ -152,12 +142,11 @@ class Reflection
|
|||||||
*
|
*
|
||||||
* @param object|string $class The object or name of object's class
|
* @param object|string $class The object or name of object's class
|
||||||
* @param string $constant Name of the constant that contains a value
|
* @param string $constant Name of the constant that contains a value
|
||||||
* @throws ReflectionException
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function getConstantValue($class, $constant)
|
public static function getConstantValue($class, $constant)
|
||||||
{
|
{
|
||||||
$reflection = new ReflectionClass($class);
|
$reflection = new \ReflectionClass($class);
|
||||||
|
|
||||||
if (self::hasConstant($class, $constant)) {
|
if (self::hasConstant($class, $constant)) {
|
||||||
return $reflection->getConstant($constant);
|
return $reflection->getConstant($constant);
|
||||||
@@ -175,7 +164,6 @@ class Reflection
|
|||||||
* dot-separated, e.g. "invoice.user.email".
|
* dot-separated, e.g. "invoice.user.email".
|
||||||
* @param bool $force (optional) If is set to true, try to retrieve value even if the object doesn't have
|
* @param bool $force (optional) If is set to true, try to retrieve value even if the object doesn't have
|
||||||
* property. Otherwise - not.
|
* property. Otherwise - not.
|
||||||
* @throws ReflectionException
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function getPropertyValue($object, $property, $force = false)
|
public static function getPropertyValue($object, $property, $force = false)
|
||||||
@@ -197,16 +185,16 @@ class Reflection
|
|||||||
* Let's dig more and get proper value
|
* Let's dig more and get proper value
|
||||||
*
|
*
|
||||||
* Required to avoid bug:
|
* Required to avoid bug:
|
||||||
* ReflectionObject::__construct() expects parameter 1 to be object, null given
|
* \ReflectionObject::__construct() expects parameter 1 to be object, null given
|
||||||
* (...)
|
* (...)
|
||||||
* 4. at ReflectionObject->__construct (null)
|
* 4. at \ReflectionObject->__construct (null)
|
||||||
* 5. at Reflection ::getPropertyValue (null, 'name', true)
|
* 5. at Reflection ::getPropertyValue (null, 'name', true)
|
||||||
* 6. at ListService->getItemValue (object(Deal), 'project.name', '0')
|
* 6. at ListService->getItemValue (object(Deal), 'project.name', '0')
|
||||||
*
|
*
|
||||||
* while using "project.name" as property - $project has $name property ($project exists in the Deal class)
|
* while using "project.name" as property - $project has $name property ($project exists in the Deal class)
|
||||||
* and the $project equals null
|
* and the $project equals null
|
||||||
*
|
*
|
||||||
* Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* Meritoo <github@meritoo.pl>
|
||||||
* 2016-11-07
|
* 2016-11-07
|
||||||
*/
|
*/
|
||||||
if (null !== $object) {
|
if (null !== $object) {
|
||||||
@@ -224,17 +212,17 @@ class Reflection
|
|||||||
* Use \ReflectionObject class
|
* Use \ReflectionObject class
|
||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
$reflectionProperty = new ReflectionProperty($className, $property);
|
$reflectionProperty = new \ReflectionProperty($className, $property);
|
||||||
$value = $reflectionProperty->getValue($object);
|
$value = $reflectionProperty->getValue($object);
|
||||||
} catch (ReflectionException $exception) {
|
} catch (\ReflectionException $exception) {
|
||||||
/*
|
/*
|
||||||
* 2nd try:
|
* 2nd try:
|
||||||
* Look for the get / has / is methods
|
* Look for the get / has / is methods
|
||||||
*/
|
*/
|
||||||
$class = new ReflectionObject($object);
|
$class = new \ReflectionObject($object);
|
||||||
$valueFound = false;
|
$valueFound = false;
|
||||||
|
|
||||||
if ($class->hasProperty($property) || $force) {
|
if ($force || $class->hasProperty($property)) {
|
||||||
$property = Inflector::classify($property);
|
$property = Inflector::classify($property);
|
||||||
|
|
||||||
$getterPrefixes = [
|
$getterPrefixes = [
|
||||||
@@ -247,7 +235,7 @@ class Reflection
|
|||||||
$getterName = sprintf('%s%s', $prefix, $property);
|
$getterName = sprintf('%s%s', $prefix, $property);
|
||||||
|
|
||||||
if ($class->hasMethod($getterName)) {
|
if ($class->hasMethod($getterName)) {
|
||||||
$method = new ReflectionMethod($object, $getterName);
|
$method = new \ReflectionMethod($object, $getterName);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Getter is not accessible publicly?
|
* Getter is not accessible publicly?
|
||||||
@@ -292,7 +280,6 @@ class Reflection
|
|||||||
* @param string $property Name of the property that contains a value
|
* @param string $property Name of the property that contains a value
|
||||||
* @param bool $force (optional) If is set to true, try to retrieve value even if the
|
* @param bool $force (optional) If is set to true, try to retrieve value even if the
|
||||||
* object does not have property. Otherwise - not.
|
* object does not have property. Otherwise - not.
|
||||||
* @throws ReflectionException
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getPropertyValues($objects, $property, $force = false)
|
public static function getPropertyValues($objects, $property, $force = false)
|
||||||
@@ -395,13 +382,13 @@ class Reflection
|
|||||||
{
|
{
|
||||||
$fullClassName = self::getClassName($source);
|
$fullClassName = self::getClassName($source);
|
||||||
|
|
||||||
if (empty($fullClassName)) {
|
if (null === $fullClassName || '' === $fullClassName) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$className = self::getClassName($source, true);
|
$className = self::getClassName($source, true);
|
||||||
|
|
||||||
if ($className == $fullClassName) {
|
if ($className === $fullClassName) {
|
||||||
return $className;
|
return $className;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -420,7 +407,7 @@ class Reflection
|
|||||||
$className = self::getClassName($source);
|
$className = self::getClassName($source);
|
||||||
$interfaces = class_implements($className);
|
$interfaces = class_implements($className);
|
||||||
|
|
||||||
return in_array($interface, $interfaces);
|
return in_array($interface, $interfaces, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -438,7 +425,7 @@ class Reflection
|
|||||||
$parents = class_parents($childClassName);
|
$parents = class_parents($childClassName);
|
||||||
|
|
||||||
if (is_array($parents) && 0 < count($parents)) {
|
if (is_array($parents) && 0 < count($parents)) {
|
||||||
return in_array($parentClassName, $parents);
|
return in_array($parentClassName, $parents, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -448,23 +435,22 @@ class Reflection
|
|||||||
* Returns given object properties
|
* Returns given object properties
|
||||||
*
|
*
|
||||||
* @param array|object|string $source An array of objects, namespaces, object or namespace
|
* @param array|object|string $source An array of objects, namespaces, object or namespace
|
||||||
* @param int $filter (optional) Filter of properties. Uses ReflectionProperty class
|
* @param int $filter (optional) Filter of properties. Uses \ReflectionProperty class
|
||||||
* constants. By default all properties are returned.
|
* constants. By default all properties are returned.
|
||||||
* @param bool $includeParents (optional) If is set to true, properties of parent classes are
|
* @param bool $includeParents (optional) If is set to true, properties of parent classes are
|
||||||
* included (recursively). Otherwise - not.
|
* included (recursively). Otherwise - not.
|
||||||
* @throws ReflectionException
|
* @return array|\ReflectionProperty
|
||||||
* @return array|ReflectionProperty
|
|
||||||
*/
|
*/
|
||||||
public static function getProperties($source, $filter = null, $includeParents = false)
|
public static function getProperties($source, $filter = null, $includeParents = false)
|
||||||
{
|
{
|
||||||
$className = self::getClassName($source);
|
$className = self::getClassName($source);
|
||||||
$reflection = new ReflectionClass($className);
|
$reflection = new \ReflectionClass($className);
|
||||||
|
|
||||||
if (null === $filter) {
|
if (null === $filter) {
|
||||||
$filter = ReflectionProperty::IS_PRIVATE
|
$filter = \ReflectionProperty::IS_PRIVATE
|
||||||
+ ReflectionProperty::IS_PROTECTED
|
+ \ReflectionProperty::IS_PROTECTED
|
||||||
+ ReflectionProperty::IS_PUBLIC
|
+ \ReflectionProperty::IS_PUBLIC
|
||||||
+ ReflectionProperty::IS_STATIC;
|
+ \ReflectionProperty::IS_STATIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
$properties = $reflection->getProperties($filter);
|
$properties = $reflection->getProperties($filter);
|
||||||
@@ -486,13 +472,12 @@ class Reflection
|
|||||||
* Returns a parent class or false if there is no parent class
|
* Returns a parent class or false if there is no parent class
|
||||||
*
|
*
|
||||||
* @param array|object|string $source An array of objects, namespaces, object or namespace
|
* @param array|object|string $source An array of objects, namespaces, object or namespace
|
||||||
* @throws ReflectionException
|
* @return \ReflectionClass|bool
|
||||||
* @return ReflectionClass|bool
|
|
||||||
*/
|
*/
|
||||||
public static function getParentClass($source)
|
public static function getParentClass($source)
|
||||||
{
|
{
|
||||||
$className = self::getClassName($source);
|
$className = self::getClassName($source);
|
||||||
$reflection = new ReflectionClass($className);
|
$reflection = new \ReflectionClass($className);
|
||||||
|
|
||||||
return $reflection->getParentClass();
|
return $reflection->getParentClass();
|
||||||
}
|
}
|
||||||
@@ -524,7 +509,7 @@ class Reflection
|
|||||||
* Oops, cannot resolve class
|
* Oops, cannot resolve class
|
||||||
*/
|
*/
|
||||||
if (null === $className) {
|
if (null === $className) {
|
||||||
throw new CannotResolveClassNameException($class);
|
throw CannotResolveClassNameException::create($class);
|
||||||
}
|
}
|
||||||
|
|
||||||
$childClasses = [];
|
$childClasses = [];
|
||||||
@@ -541,7 +526,7 @@ class Reflection
|
|||||||
*/
|
*/
|
||||||
$realClass = ClassUtils::getRealClass($oneClass);
|
$realClass = ClassUtils::getRealClass($oneClass);
|
||||||
|
|
||||||
if (in_array($realClass, $childClasses)) {
|
if (in_array($realClass, $childClasses, true)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -558,7 +543,6 @@ class Reflection
|
|||||||
*
|
*
|
||||||
* @param array|object|string $parentClass Class who child class should be returned. An array of objects,
|
* @param array|object|string $parentClass Class who child class should be returned. An array of objects,
|
||||||
* namespaces, object or namespace.
|
* namespaces, object or namespace.
|
||||||
* @throws CannotResolveClassNameException
|
|
||||||
* @throws MissingChildClassesException
|
* @throws MissingChildClassesException
|
||||||
* @throws TooManyChildClassesException
|
* @throws TooManyChildClassesException
|
||||||
* @return mixed
|
* @return mixed
|
||||||
@@ -572,7 +556,7 @@ class Reflection
|
|||||||
* Oops, the base / parent class hasn't child class
|
* Oops, the base / parent class hasn't child class
|
||||||
*/
|
*/
|
||||||
if (empty($childClasses)) {
|
if (empty($childClasses)) {
|
||||||
throw new MissingChildClassesException($parentClass);
|
throw MissingChildClassesException::create($parentClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -580,21 +564,20 @@ class Reflection
|
|||||||
* Oops, the base / parent class has too many child classes
|
* Oops, the base / parent class has too many child classes
|
||||||
*/
|
*/
|
||||||
if (count($childClasses) > 1) {
|
if (count($childClasses) > 1) {
|
||||||
throw new TooManyChildClassesException($parentClass, $childClasses);
|
throw TooManyChildClassesException::create($parentClass, $childClasses);
|
||||||
}
|
}
|
||||||
|
|
||||||
return trim($childClasses[0]);
|
return trim($childClasses[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns property, the ReflectionProperty instance, of given object
|
* Returns property, the \ReflectionProperty instance, of given object
|
||||||
*
|
*
|
||||||
* @param array|object|string $class An array of objects, namespaces, object or namespace
|
* @param array|object|string $class An array of objects, namespaces, object or namespace
|
||||||
* @param string $property Name of the property
|
* @param string $property Name of the property
|
||||||
* @param int $filter (optional) Filter of properties. Uses ReflectionProperty class constants.
|
* @param int $filter (optional) Filter of properties. Uses \ReflectionProperty class constants.
|
||||||
* By default all properties are allowed / processed.
|
* By default all properties are allowed / processed.
|
||||||
* @throws ReflectionException
|
* @return null|\ReflectionProperty
|
||||||
* @return null|ReflectionProperty
|
|
||||||
*/
|
*/
|
||||||
public static function getProperty($class, $property, $filter = null)
|
public static function getProperty($class, $property, $filter = null)
|
||||||
{
|
{
|
||||||
@@ -602,9 +585,9 @@ class Reflection
|
|||||||
$properties = self::getProperties($className, $filter);
|
$properties = self::getProperties($className, $filter);
|
||||||
|
|
||||||
if (!empty($properties)) {
|
if (!empty($properties)) {
|
||||||
/* @var $reflectionProperty ReflectionProperty */
|
/* @var $reflectionProperty \ReflectionProperty */
|
||||||
foreach ($properties as $reflectionProperty) {
|
foreach ($properties as $reflectionProperty) {
|
||||||
if ($reflectionProperty->getName() == $property) {
|
if ($reflectionProperty->getName() === $property) {
|
||||||
return $reflectionProperty;
|
return $reflectionProperty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -621,7 +604,6 @@ class Reflection
|
|||||||
* @param bool $verifyParents If is set to true, parent classes are verified if they use given
|
* @param bool $verifyParents If is set to true, parent classes are verified if they use given
|
||||||
* trait. Otherwise - not.
|
* trait. Otherwise - not.
|
||||||
* @throws CannotResolveClassNameException
|
* @throws CannotResolveClassNameException
|
||||||
* @throws ReflectionException
|
|
||||||
* @return bool|null
|
* @return bool|null
|
||||||
*/
|
*/
|
||||||
public static function usesTrait($class, $trait, $verifyParents = false)
|
public static function usesTrait($class, $trait, $verifyParents = false)
|
||||||
@@ -632,21 +614,21 @@ class Reflection
|
|||||||
/*
|
/*
|
||||||
* Oops, cannot resolve class
|
* Oops, cannot resolve class
|
||||||
*/
|
*/
|
||||||
if (empty($className)) {
|
if (null === $className || '' === $className) {
|
||||||
throw new CannotResolveClassNameException($class);
|
throw CannotResolveClassNameException::create($class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Oops, cannot resolve trait
|
* Oops, cannot resolve trait
|
||||||
*/
|
*/
|
||||||
if (empty($traitName)) {
|
if (null === $traitName || '' === $traitName) {
|
||||||
throw new CannotResolveClassNameException($class, false);
|
throw new CannotResolveClassNameException($class, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
$reflection = new ReflectionClass($className);
|
$reflection = new \ReflectionClass($className);
|
||||||
$traitsNames = $reflection->getTraitNames();
|
$traitsNames = $reflection->getTraitNames();
|
||||||
|
|
||||||
$uses = in_array($traitName, $traitsNames);
|
$uses = in_array($traitName, $traitsNames, true);
|
||||||
|
|
||||||
if (!$uses && $verifyParents) {
|
if (!$uses && $verifyParents) {
|
||||||
$parentClassName = self::getParentClassName($className);
|
$parentClassName = self::getParentClassName($className);
|
||||||
@@ -664,13 +646,12 @@ class Reflection
|
|||||||
* If given class does not extend another, returns null.
|
* If given class does not extend another, returns null.
|
||||||
*
|
*
|
||||||
* @param array|object|string $class An array of objects, namespaces, object or namespace
|
* @param array|object|string $class An array of objects, namespaces, object or namespace
|
||||||
* @throws ReflectionException
|
|
||||||
* @return string|null
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
public static function getParentClassName($class)
|
public static function getParentClassName($class)
|
||||||
{
|
{
|
||||||
$className = self::getClassName($class);
|
$className = self::getClassName($class);
|
||||||
$reflection = new ReflectionClass($className);
|
$reflection = new \ReflectionClass($className);
|
||||||
$parentClass = $reflection->getParentClass();
|
$parentClass = $reflection->getParentClass();
|
||||||
|
|
||||||
if (null === $parentClass || false === $parentClass) {
|
if (null === $parentClass || false === $parentClass) {
|
||||||
@@ -679,4 +660,57 @@ class Reflection
|
|||||||
|
|
||||||
return $parentClass->getName();
|
return $parentClass->getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets value of given property in given object
|
||||||
|
*
|
||||||
|
* @param mixed $object Object that should contains given property
|
||||||
|
* @param string $property Name of the property
|
||||||
|
* @param mixed $value Value of the property
|
||||||
|
* @throws NotExistingPropertyException
|
||||||
|
*/
|
||||||
|
public static function setPropertyValue($object, $property, $value)
|
||||||
|
{
|
||||||
|
$reflectionProperty = self::getProperty($object, $property);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Oops, property does not exist
|
||||||
|
*/
|
||||||
|
if (null === $reflectionProperty) {
|
||||||
|
throw NotExistingPropertyException::create($object, $property);
|
||||||
|
}
|
||||||
|
|
||||||
|
$notAccessible = $reflectionProperty->isPrivate() || $reflectionProperty->isProtected();
|
||||||
|
|
||||||
|
if ($notAccessible) {
|
||||||
|
$reflectionProperty->setAccessible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$reflectionProperty->setValue($object, $value);
|
||||||
|
|
||||||
|
if ($notAccessible) {
|
||||||
|
$reflectionProperty->setAccessible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets values of properties in given object
|
||||||
|
*
|
||||||
|
* @param mixed $object Object that should contains given property
|
||||||
|
* @param array $propertiesValues Key-value pairs, where key - name of the property, value - value of the property
|
||||||
|
*/
|
||||||
|
public static function setPropertiesValues($object, array $propertiesValues)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* No properties?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($propertiesValues)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($propertiesValues as $property => $value) {
|
||||||
|
static::setPropertyValue($object, $property, $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException;
|
|||||||
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
|
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Useful regular expressions methods
|
* Useful methods related to regular expressions
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Regex
|
class Regex
|
||||||
{
|
{
|
||||||
@@ -102,7 +102,7 @@ class Regex
|
|||||||
* Tax ID is not 10 characters length OR is not numeric?
|
* Tax ID is not 10 characters length OR is not numeric?
|
||||||
* Nothing to do
|
* Nothing to do
|
||||||
*/
|
*/
|
||||||
if (10 !== strlen($taxId) || !is_numeric($taxId)) {
|
if (!is_numeric($taxId) || 10 !== strlen($taxId)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,14 +125,11 @@ class Regex
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Last number it's not a remainder from dividing per 11?
|
* Last number it's a remainder from dividing per 11?
|
||||||
* Nothing to do
|
* Tax ID is valid
|
||||||
*/
|
*/
|
||||||
if ($sum % 11 == $taxId[9]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return $sum % 11 === (int)$taxId[9];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -248,7 +245,7 @@ class Regex
|
|||||||
|
|
||||||
if ($itsRegularExpression) {
|
if ($itsRegularExpression) {
|
||||||
$matchesCount = preg_match($filterExpression, $value);
|
$matchesCount = preg_match($filterExpression, $value);
|
||||||
$remove = 0 == $matchesCount;
|
$remove = 0 === $matchesCount;
|
||||||
} else {
|
} else {
|
||||||
if (is_string($value)) {
|
if (is_string($value)) {
|
||||||
$value = sprintf('\'%s\'', $value);
|
$value = sprintf('\'%s\'', $value);
|
||||||
@@ -306,13 +303,11 @@ class Regex
|
|||||||
|
|
||||||
if ($mustAllMatch) {
|
if ($mustAllMatch) {
|
||||||
$effect = $effect && $matched;
|
$effect = $effect && $matched;
|
||||||
} else {
|
} elseif ($matched) {
|
||||||
if ($matched) {
|
|
||||||
$effect = $matched;
|
$effect = $matched;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return $effect;
|
return $effect;
|
||||||
}
|
}
|
||||||
@@ -501,7 +496,7 @@ class Regex
|
|||||||
public static function startsWith($string, $beginning)
|
public static function startsWith($string, $beginning)
|
||||||
{
|
{
|
||||||
if (!empty($string) && !empty($beginning)) {
|
if (!empty($string) && !empty($beginning)) {
|
||||||
if (1 == strlen($beginning) && !self::isLetterOrDigit($beginning)) {
|
if (1 === strlen($beginning) && !self::isLetterOrDigit($beginning)) {
|
||||||
$beginning = '\\' . $beginning;
|
$beginning = '\\' . $beginning;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -522,7 +517,7 @@ class Regex
|
|||||||
*/
|
*/
|
||||||
public static function endsWith($string, $ending)
|
public static function endsWith($string, $ending)
|
||||||
{
|
{
|
||||||
if (1 == strlen($ending) && !self::isLetterOrDigit($ending)) {
|
if (1 === strlen($ending) && !self::isLetterOrDigit($ending)) {
|
||||||
$ending = '\\' . $ending;
|
$ending = '\\' . $ending;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -607,7 +602,7 @@ class Regex
|
|||||||
*/
|
*/
|
||||||
public static function contains($haystack, $needle)
|
public static function contains($haystack, $needle)
|
||||||
{
|
{
|
||||||
if (1 == strlen($needle) && !self::isLetterOrDigit($needle)) {
|
if (1 === strlen($needle) && !self::isLetterOrDigit($needle)) {
|
||||||
$needle = '\\' . $needle;
|
$needle = '\\' . $needle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -694,14 +689,14 @@ class Regex
|
|||||||
*/
|
*/
|
||||||
public static function isValidNip($nip)
|
public static function isValidNip($nip)
|
||||||
{
|
{
|
||||||
$nip = preg_replace('/[^0-9]/', '', $nip);
|
$nip = preg_replace('/[\D]/', '', $nip);
|
||||||
|
|
||||||
$invalidNips = [
|
$invalidNips = [
|
||||||
'1234567890',
|
'1234567890',
|
||||||
'0000000000',
|
'0000000000',
|
||||||
];
|
];
|
||||||
|
|
||||||
if (!preg_match('/^[0-9]{10}$/', $nip) || in_array($nip, $invalidNips)) {
|
if (!preg_match('/^[\d]{10}$/', $nip) || in_array($nip, $invalidNips, true)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -723,9 +718,9 @@ class Regex
|
|||||||
}
|
}
|
||||||
|
|
||||||
$modulo = $sum % 11;
|
$modulo = $sum % 11;
|
||||||
$numberControl = (10 == $modulo) ? 0 : $modulo;
|
$numberControl = (10 === $modulo) ? 0 : $modulo;
|
||||||
|
|
||||||
return $numberControl == $nip[9];
|
return $numberControl === (int)$nip[9];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -924,4 +919,37 @@ class Regex
|
|||||||
|
|
||||||
return (bool)preg_match($pattern, $value);
|
return (bool)preg_match($pattern, $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns slug for given value
|
||||||
|
*
|
||||||
|
* @param string $value Value that should be transformed to slug
|
||||||
|
* @return string|bool
|
||||||
|
*/
|
||||||
|
public static function createSlug($value)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Not a scalar value?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (!is_scalar($value)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* It's an empty string?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if ('' === $value) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$id = 'Latin-ASCII; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();';
|
||||||
|
$transliterator = \Transliterator::create($id);
|
||||||
|
|
||||||
|
$cleanValue = trim($value);
|
||||||
|
$result = $transliterator->transliterate($cleanValue);
|
||||||
|
|
||||||
|
return preg_replace('/[-\s]+/', '-', $result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ use Doctrine\ORM\QueryBuilder;
|
|||||||
/**
|
/**
|
||||||
* Useful methods for repository
|
* Useful methods for repository
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Repository
|
class Repository
|
||||||
{
|
{
|
||||||
@@ -177,10 +177,13 @@ class Repository
|
|||||||
$direction = 'ASC'
|
$direction = 'ASC'
|
||||||
) {
|
) {
|
||||||
$alias = 'qb';
|
$alias = 'qb';
|
||||||
|
$queryBuilder = $repository->createQueryBuilder($alias);
|
||||||
|
|
||||||
return $repository
|
if (empty($property)) {
|
||||||
->createQueryBuilder($alias)
|
return $queryBuilder;
|
||||||
->orderBy(sprintf('%s.%s', $alias, $property), $direction);
|
}
|
||||||
|
|
||||||
|
return $queryBuilder->orderBy(sprintf('%s.%s', $alias, $property), $direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ namespace Meritoo\Common\Utilities;
|
|||||||
/**
|
/**
|
||||||
* Useful uri methods (only static functions)
|
* Useful uri methods (only static functions)
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Uri
|
class Uri
|
||||||
{
|
{
|
||||||
@@ -93,7 +93,7 @@ class Uri
|
|||||||
/*
|
/*
|
||||||
* Oops, cannot match protocol
|
* Oops, cannot match protocol
|
||||||
*/
|
*/
|
||||||
if (0 == $matchCount) {
|
if (0 === $matchCount) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ use SimpleXMLElement;
|
|||||||
/**
|
/**
|
||||||
* Useful XML-related methods (only static functions)
|
* Useful XML-related methods (only static functions)
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class Xml
|
class Xml
|
||||||
{
|
{
|
||||||
@@ -40,7 +40,7 @@ class Xml
|
|||||||
$query = $path->query('/*/*');
|
$query = $path->query('/*/*');
|
||||||
$nodesCount = $query->length;
|
$nodesCount = $query->length;
|
||||||
|
|
||||||
if (0 == $nodesCount) {
|
if (0 === $nodesCount) {
|
||||||
return $element1;
|
return $element1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
159
src/ValueObject/Address.php
Normal file
159
src/ValueObject/Address.php
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Common\ValueObject;
|
||||||
|
|
||||||
|
use Meritoo\Common\Utilities\Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class Address
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The street
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $street;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of building
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $buildingNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of flat
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $flatNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The zip code
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $zipCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The city, location
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $city;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class constructor
|
||||||
|
*
|
||||||
|
* @param string $city City, location
|
||||||
|
* @param string $zipCode The zip code
|
||||||
|
* @param string $street The street
|
||||||
|
* @param string $buildingNumber The number of building
|
||||||
|
* @param string $flatNumber (optional) The number of flat. Default: "".
|
||||||
|
*/
|
||||||
|
public function __construct($city, $zipCode, $street, $buildingNumber, $flatNumber = '')
|
||||||
|
{
|
||||||
|
$this->city = $city;
|
||||||
|
$this->zipCode = $zipCode;
|
||||||
|
$this->street = $street;
|
||||||
|
$this->buildingNumber = $buildingNumber;
|
||||||
|
$this->flatNumber = $flatNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns representation of object as string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
$values = [
|
||||||
|
$this->getFullStreet(),
|
||||||
|
$this->zipCode,
|
||||||
|
$this->city,
|
||||||
|
];
|
||||||
|
|
||||||
|
return Arrays::getNonEmptyValuesAsString($values);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns street
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getStreet()
|
||||||
|
{
|
||||||
|
return $this->street;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns full street (name + building & flat number)
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getFullStreet()
|
||||||
|
{
|
||||||
|
if (empty($this->street)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$numbers = $this->buildingNumber;
|
||||||
|
|
||||||
|
if (!empty($numbers) && !empty($this->flatNumber)) {
|
||||||
|
$numbers = sprintf('%s/%s', $numbers, $this->flatNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf('%s %s', $this->street, $numbers);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns number of building
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getBuildingNumber()
|
||||||
|
{
|
||||||
|
return $this->buildingNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns number of flat
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getFlatNumber()
|
||||||
|
{
|
||||||
|
return $this->flatNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns zip code
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getZipCode()
|
||||||
|
{
|
||||||
|
return $this->zipCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns city, location
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getCity()
|
||||||
|
{
|
||||||
|
return $this->city;
|
||||||
|
}
|
||||||
|
}
|
||||||
81
src/ValueObject/BankAccount.php
Normal file
81
src/ValueObject/BankAccount.php
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Common\ValueObject;
|
||||||
|
|
||||||
|
use Meritoo\Common\Utilities\Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bank account
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class BankAccount
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Name of bank
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $bankName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of bank's account
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $accountNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class constructor
|
||||||
|
*
|
||||||
|
* @param string $bankName Name of bank
|
||||||
|
* @param string $accountNumber Number of bank's account
|
||||||
|
*/
|
||||||
|
public function __construct($bankName, $accountNumber)
|
||||||
|
{
|
||||||
|
$this->bankName = $bankName;
|
||||||
|
$this->accountNumber = $accountNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns representation of object as string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
$values = [
|
||||||
|
$this->bankName,
|
||||||
|
$this->accountNumber,
|
||||||
|
];
|
||||||
|
|
||||||
|
return Arrays::getNonEmptyValuesAsString($values);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns name of bank
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getBankName()
|
||||||
|
{
|
||||||
|
return $this->bankName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns number of bank's account
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getAccountNumber()
|
||||||
|
{
|
||||||
|
return $this->accountNumber;
|
||||||
|
}
|
||||||
|
}
|
||||||
101
src/ValueObject/Company.php
Normal file
101
src/ValueObject/Company.php
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Common\ValueObject;
|
||||||
|
|
||||||
|
use Meritoo\Common\Utilities\Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Company
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class Company
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Name of company
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address of company
|
||||||
|
*
|
||||||
|
* @var Address
|
||||||
|
*/
|
||||||
|
protected $address;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bank account of company
|
||||||
|
*
|
||||||
|
* @var BankAccount
|
||||||
|
*/
|
||||||
|
protected $bankAccount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class constructor
|
||||||
|
*
|
||||||
|
* @param string $name Name of company
|
||||||
|
* @param Address $address Address of company
|
||||||
|
* @param BankAccount|null $bankAccount (optional) Bank account of company
|
||||||
|
*/
|
||||||
|
public function __construct($name, Address $address, BankAccount $bankAccount = null)
|
||||||
|
{
|
||||||
|
$this->name = $name;
|
||||||
|
$this->address = $address;
|
||||||
|
$this->bankAccount = $bankAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns representation of object as string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
$values = [
|
||||||
|
$this->name,
|
||||||
|
$this->address,
|
||||||
|
$this->bankAccount,
|
||||||
|
];
|
||||||
|
|
||||||
|
return Arrays::getNonEmptyValuesAsString($values);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns name of company
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns address of company
|
||||||
|
*
|
||||||
|
* @return Address
|
||||||
|
*/
|
||||||
|
public function getAddress()
|
||||||
|
{
|
||||||
|
return $this->address;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns bank account of company
|
||||||
|
*
|
||||||
|
* @return BankAccount|null
|
||||||
|
*/
|
||||||
|
public function getBankAccount()
|
||||||
|
{
|
||||||
|
return $this->bankAccount;
|
||||||
|
}
|
||||||
|
}
|
||||||
22
src/ValueObject/Human.php
Normal file
22
src/ValueObject/Human.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Common\ValueObject;
|
||||||
|
|
||||||
|
use Meritoo\Common\Traits\ValueObject\HumanTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Human
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class Human
|
||||||
|
{
|
||||||
|
use HumanTrait;
|
||||||
|
}
|
||||||
179
src/ValueObject/Version.php
Normal file
179
src/ValueObject/Version.php
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Common\ValueObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Version of software
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class Version
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The "major" part.
|
||||||
|
* Incremented when you make incompatible API changes.
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $majorPart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The "minor" part.
|
||||||
|
* Incremented when you add functionality in a backwards-compatible manner.
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $minorPart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The "patch" part.
|
||||||
|
* Incremented when you make backwards-compatible bug fixes.
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $patchPart;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class constructor
|
||||||
|
*
|
||||||
|
* @param int $majorPart The "major" part. Incremented when you make incompatible API changes.
|
||||||
|
* @param int $minorPart The "minor" part. Incremented when you add functionality in a backwards-compatible manner.
|
||||||
|
* @param int $patchPart The "patch" part. Incremented when you make backwards-compatible bug fixes.
|
||||||
|
*/
|
||||||
|
public function __construct($majorPart, $minorPart, $patchPart)
|
||||||
|
{
|
||||||
|
$this->majorPart = $majorPart;
|
||||||
|
$this->minorPart = $minorPart;
|
||||||
|
$this->patchPart = $patchPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the "major" part.
|
||||||
|
* Incremented when you make incompatible API changes.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getMajorPart()
|
||||||
|
{
|
||||||
|
return $this->majorPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the "minor" part.
|
||||||
|
* Incremented when you add functionality in a backwards-compatible manner.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getMinorPart()
|
||||||
|
{
|
||||||
|
return $this->minorPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the "patch" part.
|
||||||
|
* Incremented when you make backwards-compatible bug fixes.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getPatchPart()
|
||||||
|
{
|
||||||
|
return $this->patchPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns representation of object as string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
return sprintf('%d.%d.%d', $this->getMajorPart(), $this->getMinorPart(), $this->getPatchPart());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns new instance based on given version as string.
|
||||||
|
* Given version should contain 3 dot-separated integers, 1 per each part ("major", "minor" and "patch").
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
* "1.0.2";
|
||||||
|
* "10.4.0";
|
||||||
|
*
|
||||||
|
* @param string $version The version
|
||||||
|
* @return Version|null
|
||||||
|
*/
|
||||||
|
public static function fromString($version)
|
||||||
|
{
|
||||||
|
$version = trim($version);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* No version provided?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($version)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$matches = [];
|
||||||
|
$pattern = '/^(\d+)\.(\d+)\.(\d+)$/'; // e.g. "1.0.2"
|
||||||
|
$matched = preg_match($pattern, $version, $matches);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Incorrect version?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (0 === $matched || false === $matched) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$majorPart = (int)$matches[1];
|
||||||
|
$minorPart = (int)$matches[2];
|
||||||
|
$patchPart = (int)$matches[3];
|
||||||
|
|
||||||
|
return new static($majorPart, $minorPart, $patchPart);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns new instance based on given version as array.
|
||||||
|
* Given version should contain 3 integers, 1 per each part ("major", "minor" and "patch").
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
* [1, 0, 2];
|
||||||
|
* [10, 4, 0];
|
||||||
|
*
|
||||||
|
* @param array $version The version
|
||||||
|
* @return Version|null
|
||||||
|
*/
|
||||||
|
public static function fromArray(array $version)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* No version provided?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (empty($version)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = count($version);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Incorrect version?
|
||||||
|
* Nothing to do
|
||||||
|
*/
|
||||||
|
if (3 !== $count) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$majorPart = (int)$version[0];
|
||||||
|
$minorPart = (int)$version[1];
|
||||||
|
$patchPart = (int)$version[2];
|
||||||
|
|
||||||
|
return new static($majorPart, $minorPart, $patchPart);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,9 +6,10 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Collection;
|
namespace Meritoo\Test\Common\Collection;
|
||||||
|
|
||||||
use ArrayIterator;
|
use ArrayIterator;
|
||||||
|
use Generator;
|
||||||
use Meritoo\Common\Collection\Collection;
|
use Meritoo\Common\Collection\Collection;
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
use Meritoo\Common\Type\OopVisibilityType;
|
use Meritoo\Common\Type\OopVisibilityType;
|
||||||
@@ -16,8 +17,8 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of the collection of elements
|
* Test case of the collection of elements
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class CollectionTest extends BaseTestCase
|
class CollectionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
@@ -44,12 +45,12 @@ class CollectionTest extends BaseTestCase
|
|||||||
|
|
||||||
public function testEmptyCollection()
|
public function testEmptyCollection()
|
||||||
{
|
{
|
||||||
static::assertEquals(0, $this->emptyCollection->count());
|
static::assertSame(0, $this->emptyCollection->count());
|
||||||
static::assertCount(0, $this->emptyCollection);
|
static::assertCount(0, $this->emptyCollection);
|
||||||
static::assertEmpty($this->emptyCollection);
|
static::assertEmpty($this->emptyCollection);
|
||||||
|
|
||||||
static::assertTrue($this->emptyCollection->isEmpty());
|
static::assertTrue($this->emptyCollection->isEmpty());
|
||||||
static::assertEquals([], $this->emptyCollection->toArray());
|
static::assertSame([], $this->emptyCollection->toArray());
|
||||||
static::assertEmpty($this->emptyCollection->toArray());
|
static::assertEmpty($this->emptyCollection->toArray());
|
||||||
|
|
||||||
static::assertNull($this->emptyCollection->getFirst());
|
static::assertNull($this->emptyCollection->getFirst());
|
||||||
@@ -60,23 +61,23 @@ class CollectionTest extends BaseTestCase
|
|||||||
|
|
||||||
public function testNotEmptyCollection()
|
public function testNotEmptyCollection()
|
||||||
{
|
{
|
||||||
static::assertEquals(4, $this->simpleCollection->count());
|
static::assertSame(4, $this->simpleCollection->count());
|
||||||
static::assertCount(4, $this->simpleCollection);
|
static::assertCount(4, $this->simpleCollection);
|
||||||
static::assertNotEmpty($this->simpleCollection);
|
static::assertNotEmpty($this->simpleCollection);
|
||||||
|
|
||||||
static::assertFalse($this->simpleCollection->isEmpty());
|
static::assertFalse($this->simpleCollection->isEmpty());
|
||||||
static::assertEquals($this->simpleElements, $this->simpleCollection->toArray());
|
static::assertSame($this->simpleElements, $this->simpleCollection->toArray());
|
||||||
static::assertNotEmpty($this->simpleCollection->toArray());
|
static::assertNotEmpty($this->simpleCollection->toArray());
|
||||||
|
|
||||||
static::assertEquals('lorem', $this->simpleCollection->getFirst());
|
static::assertSame('lorem', $this->simpleCollection->getFirst());
|
||||||
static::assertEquals('sit', $this->simpleCollection->getLast());
|
static::assertSame('sit', $this->simpleCollection->getLast());
|
||||||
static::assertEquals('dolor', $this->simpleCollection[123]);
|
static::assertSame('dolor', $this->simpleCollection[123]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCount()
|
public function testCount()
|
||||||
{
|
{
|
||||||
static::assertEquals(0, $this->emptyCollection->count());
|
static::assertSame(0, $this->emptyCollection->count());
|
||||||
static::assertEquals(4, $this->simpleCollection->count());
|
static::assertSame(4, $this->simpleCollection->count());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testOffsetExists()
|
public function testOffsetExists()
|
||||||
@@ -93,8 +94,8 @@ class CollectionTest extends BaseTestCase
|
|||||||
static::assertNull($this->emptyCollection['abc']);
|
static::assertNull($this->emptyCollection['abc']);
|
||||||
static::assertNull($this->simpleCollection['abc']);
|
static::assertNull($this->simpleCollection['abc']);
|
||||||
|
|
||||||
static::assertEquals('lorem', $this->simpleCollection[0]);
|
static::assertSame('lorem', $this->simpleCollection[0]);
|
||||||
static::assertEquals('sit', $this->simpleCollection[345]);
|
static::assertSame('sit', $this->simpleCollection[345]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testOffsetSet()
|
public function testOffsetSet()
|
||||||
@@ -103,10 +104,10 @@ class CollectionTest extends BaseTestCase
|
|||||||
$this->simpleCollection['test2'] = 5678;
|
$this->simpleCollection['test2'] = 5678;
|
||||||
|
|
||||||
static::assertTrue($this->emptyCollection->has(1234));
|
static::assertTrue($this->emptyCollection->has(1234));
|
||||||
static::assertEquals(1234, $this->emptyCollection['test1']);
|
static::assertSame(1234, $this->emptyCollection['test1']);
|
||||||
|
|
||||||
static::assertTrue($this->simpleCollection->has(5678));
|
static::assertTrue($this->simpleCollection->has(5678));
|
||||||
static::assertEquals(5678, $this->simpleCollection['test2']);
|
static::assertSame(5678, $this->simpleCollection['test2']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testOffsetUnset()
|
public function testOffsetUnset()
|
||||||
@@ -114,14 +115,14 @@ class CollectionTest extends BaseTestCase
|
|||||||
unset($this->simpleCollection[0]);
|
unset($this->simpleCollection[0]);
|
||||||
|
|
||||||
static::assertFalse($this->simpleCollection->has('lorem'));
|
static::assertFalse($this->simpleCollection->has('lorem'));
|
||||||
static::assertEquals('ipsum', $this->simpleCollection[1]);
|
static::assertSame('ipsum', $this->simpleCollection[1]);
|
||||||
static::assertEquals(3, $this->simpleCollection->count());
|
static::assertSame(3, $this->simpleCollection->count());
|
||||||
|
|
||||||
unset($this->simpleCollection[123]);
|
unset($this->simpleCollection[123]);
|
||||||
|
|
||||||
static::assertFalse($this->simpleCollection->has('dolor'));
|
static::assertFalse($this->simpleCollection->has('dolor'));
|
||||||
static::assertEquals('ipsum', $this->simpleCollection[1]);
|
static::assertSame('ipsum', $this->simpleCollection[1]);
|
||||||
static::assertEquals(2, $this->simpleCollection->count());
|
static::assertSame(2, $this->simpleCollection->count());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetIterator()
|
public function testGetIterator()
|
||||||
@@ -129,29 +130,46 @@ class CollectionTest extends BaseTestCase
|
|||||||
static::assertInstanceOf(ArrayIterator::class, $this->simpleCollection->getIterator());
|
static::assertInstanceOf(ArrayIterator::class, $this->simpleCollection->getIterator());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testAdd()
|
/**
|
||||||
|
* @param mixed $element The element to add
|
||||||
|
* @param int $expectedCount Expected count of elements in collection
|
||||||
|
* @param int $expectedIndex Expected index of added element in collection
|
||||||
|
* @param Collection $collection The collection
|
||||||
|
*
|
||||||
|
* @dataProvider provideElementToAdd
|
||||||
|
*/
|
||||||
|
public function testAddWithoutIndex($element, $expectedCount, $expectedIndex, Collection $collection)
|
||||||
{
|
{
|
||||||
$this->emptyCollection->add('test1');
|
$collection->add($element);
|
||||||
|
|
||||||
static::assertTrue($this->emptyCollection->has('test1'));
|
static::assertTrue($collection->has($element));
|
||||||
static::assertEquals(1, $this->emptyCollection->count());
|
static::assertSame($expectedCount, $collection->count());
|
||||||
static::assertEquals('test1', $this->emptyCollection[0]);
|
static::assertSame($element, $collection[$expectedIndex]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testAddWithIndex()
|
/**
|
||||||
|
* @param mixed $element The element to add
|
||||||
|
* @param mixed $index Index of element to add
|
||||||
|
* @param int $expectedCount Expected count of elements in collection
|
||||||
|
* @param int $expectedIndex Expected index of added element in collection
|
||||||
|
* @param Collection $collection The collection
|
||||||
|
*
|
||||||
|
* @dataProvider provideElementToAddWithIndex
|
||||||
|
*/
|
||||||
|
public function testAddWithIndex($element, $index, $expectedCount, $expectedIndex, Collection $collection)
|
||||||
{
|
{
|
||||||
$this->emptyCollection->add('test2', 1234);
|
$collection->add($element, $index);
|
||||||
|
|
||||||
static::assertTrue($this->emptyCollection->has('test2'));
|
static::assertTrue($collection->has($element));
|
||||||
static::assertEquals(1, $this->emptyCollection->count());
|
static::assertSame($expectedCount, $collection->count());
|
||||||
static::assertEquals('test2', $this->emptyCollection[1234]);
|
static::assertSame($element, $collection[$expectedIndex]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testAddMultipleUsingEmptyArray()
|
public function testAddMultipleUsingEmptyArray()
|
||||||
{
|
{
|
||||||
$this->emptyCollection->addMultiple([]);
|
$this->emptyCollection->addMultiple([]);
|
||||||
|
|
||||||
static::assertEquals(0, $this->emptyCollection->count());
|
static::assertSame(0, $this->emptyCollection->count());
|
||||||
static::assertTrue($this->emptyCollection->isEmpty());
|
static::assertTrue($this->emptyCollection->isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,12 +185,12 @@ class CollectionTest extends BaseTestCase
|
|||||||
$this->emptyCollection->addMultiple($elements);
|
$this->emptyCollection->addMultiple($elements);
|
||||||
|
|
||||||
static::assertFalse($this->emptyCollection->isEmpty());
|
static::assertFalse($this->emptyCollection->isEmpty());
|
||||||
static::assertEquals(4, $this->emptyCollection->count());
|
static::assertSame(4, $this->emptyCollection->count());
|
||||||
|
|
||||||
static::assertEquals('test1', $this->emptyCollection[0]);
|
static::assertSame('test1', $this->emptyCollection[0]);
|
||||||
static::assertEquals('test2', $this->emptyCollection[1]);
|
static::assertSame('test2', $this->emptyCollection[1]);
|
||||||
static::assertEquals('test3', $this->emptyCollection[2]);
|
static::assertSame('test3', $this->emptyCollection[2]);
|
||||||
static::assertEquals('test4', $this->emptyCollection[3]);
|
static::assertSame('test4', $this->emptyCollection[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testAddMultipleUsingIndexes()
|
public function testAddMultipleUsingIndexes()
|
||||||
@@ -187,12 +205,12 @@ class CollectionTest extends BaseTestCase
|
|||||||
$this->emptyCollection->addMultiple($elements, true);
|
$this->emptyCollection->addMultiple($elements, true);
|
||||||
|
|
||||||
static::assertFalse($this->emptyCollection->isEmpty());
|
static::assertFalse($this->emptyCollection->isEmpty());
|
||||||
static::assertEquals(4, $this->emptyCollection->count());
|
static::assertSame(4, $this->emptyCollection->count());
|
||||||
|
|
||||||
static::assertEquals('test1', $this->emptyCollection[0]);
|
static::assertSame('test1', $this->emptyCollection[0]);
|
||||||
static::assertEquals('test2', $this->emptyCollection[1]);
|
static::assertSame('test2', $this->emptyCollection[1]);
|
||||||
static::assertEquals('test3', $this->emptyCollection[1234]);
|
static::assertSame('test3', $this->emptyCollection[1234]);
|
||||||
static::assertEquals('test4', $this->emptyCollection[5678]);
|
static::assertSame('test4', $this->emptyCollection[5678]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testPrepend()
|
public function testPrepend()
|
||||||
@@ -200,14 +218,14 @@ class CollectionTest extends BaseTestCase
|
|||||||
$this->emptyCollection->prepend('lorem-ipsum');
|
$this->emptyCollection->prepend('lorem-ipsum');
|
||||||
|
|
||||||
static::assertFalse($this->emptyCollection->isEmpty());
|
static::assertFalse($this->emptyCollection->isEmpty());
|
||||||
static::assertEquals(1, $this->emptyCollection->count());
|
static::assertSame(1, $this->emptyCollection->count());
|
||||||
static::assertEquals('lorem-ipsum', $this->emptyCollection[0]);
|
static::assertSame('lorem-ipsum', $this->emptyCollection[0]);
|
||||||
|
|
||||||
$this->simpleCollection->prepend('lorem-ipsum');
|
$this->simpleCollection->prepend('lorem-ipsum');
|
||||||
|
|
||||||
static::assertFalse($this->simpleCollection->isEmpty());
|
static::assertFalse($this->simpleCollection->isEmpty());
|
||||||
static::assertEquals(5, $this->simpleCollection->count());
|
static::assertSame(5, $this->simpleCollection->count());
|
||||||
static::assertEquals('lorem-ipsum', $this->simpleCollection[0]);
|
static::assertSame('lorem-ipsum', $this->simpleCollection[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testRemoveNotExistingElement()
|
public function testRemoveNotExistingElement()
|
||||||
@@ -215,24 +233,24 @@ class CollectionTest extends BaseTestCase
|
|||||||
$this->emptyCollection->remove('abc');
|
$this->emptyCollection->remove('abc');
|
||||||
|
|
||||||
static::assertTrue($this->emptyCollection->isEmpty());
|
static::assertTrue($this->emptyCollection->isEmpty());
|
||||||
static::assertEquals(0, $this->emptyCollection->count());
|
static::assertSame(0, $this->emptyCollection->count());
|
||||||
|
|
||||||
$this->simpleCollection->remove('abc');
|
$this->simpleCollection->remove('abc');
|
||||||
|
|
||||||
static::assertFalse($this->simpleCollection->isEmpty());
|
static::assertFalse($this->simpleCollection->isEmpty());
|
||||||
static::assertEquals(4, $this->simpleCollection->count());
|
static::assertSame(4, $this->simpleCollection->count());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testRemove()
|
public function testRemove()
|
||||||
{
|
{
|
||||||
static::assertFalse($this->simpleCollection->isEmpty());
|
static::assertFalse($this->simpleCollection->isEmpty());
|
||||||
static::assertEquals(4, $this->simpleCollection->count());
|
static::assertSame(4, $this->simpleCollection->count());
|
||||||
static::assertEquals('ipsum', $this->simpleCollection[1]);
|
static::assertSame('ipsum', $this->simpleCollection[1]);
|
||||||
|
|
||||||
$this->simpleCollection->remove('ipsum');
|
$this->simpleCollection->remove('ipsum');
|
||||||
|
|
||||||
static::assertFalse($this->simpleCollection->isEmpty());
|
static::assertFalse($this->simpleCollection->isEmpty());
|
||||||
static::assertEquals(3, $this->simpleCollection->count());
|
static::assertSame(3, $this->simpleCollection->count());
|
||||||
static::assertNull($this->simpleCollection[1]);
|
static::assertNull($this->simpleCollection[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,8 +290,8 @@ class CollectionTest extends BaseTestCase
|
|||||||
static::assertNull($this->simpleCollection->getPrevious('abc'));
|
static::assertNull($this->simpleCollection->getPrevious('abc'));
|
||||||
static::assertNull($this->simpleCollection->getPrevious('lorem'));
|
static::assertNull($this->simpleCollection->getPrevious('lorem'));
|
||||||
|
|
||||||
static::assertEquals('lorem', $this->simpleCollection->getPrevious('ipsum'));
|
static::assertSame('lorem', $this->simpleCollection->getPrevious('ipsum'));
|
||||||
static::assertEquals('dolor', $this->simpleCollection->getPrevious('sit'));
|
static::assertSame('dolor', $this->simpleCollection->getPrevious('sit'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetNext()
|
public function testGetNext()
|
||||||
@@ -282,26 +300,26 @@ class CollectionTest extends BaseTestCase
|
|||||||
static::assertNull($this->simpleCollection->getNext('abc'));
|
static::assertNull($this->simpleCollection->getNext('abc'));
|
||||||
static::assertNull($this->simpleCollection->getNext('sit'));
|
static::assertNull($this->simpleCollection->getNext('sit'));
|
||||||
|
|
||||||
static::assertEquals('dolor', $this->simpleCollection->getNext('ipsum'));
|
static::assertSame('dolor', $this->simpleCollection->getNext('ipsum'));
|
||||||
static::assertEquals('sit', $this->simpleCollection->getNext('dolor'));
|
static::assertSame('sit', $this->simpleCollection->getNext('dolor'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetFirst()
|
public function testGetFirst()
|
||||||
{
|
{
|
||||||
static::assertNull($this->emptyCollection->getFirst());
|
static::assertNull($this->emptyCollection->getFirst());
|
||||||
static::assertEquals('lorem', $this->simpleCollection->getFirst());
|
static::assertSame('lorem', $this->simpleCollection->getFirst());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetLast()
|
public function testGetLast()
|
||||||
{
|
{
|
||||||
static::assertNull($this->emptyCollection->getLast());
|
static::assertNull($this->emptyCollection->getLast());
|
||||||
static::assertEquals('sit', $this->simpleCollection->getLast());
|
static::assertSame('sit', $this->simpleCollection->getLast());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testToArray()
|
public function testToArray()
|
||||||
{
|
{
|
||||||
static::assertEquals([], $this->emptyCollection->toArray());
|
static::assertSame([], $this->emptyCollection->toArray());
|
||||||
static::assertEquals($this->simpleElements, $this->simpleCollection->toArray());
|
static::assertSame($this->simpleElements, $this->simpleCollection->toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testExistsVisibilityAndArguments()
|
public function testExistsVisibilityAndArguments()
|
||||||
@@ -309,6 +327,87 @@ class CollectionTest extends BaseTestCase
|
|||||||
static::assertMethodVisibilityAndArguments(Collection::class, 'exists', OopVisibilityType::IS_PRIVATE, 1, 1);
|
static::assertMethodVisibilityAndArguments(Collection::class, 'exists', OopVisibilityType::IS_PRIVATE, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides element to add to collection
|
||||||
|
*
|
||||||
|
* @return Generator
|
||||||
|
*/
|
||||||
|
public function provideElementToAdd()
|
||||||
|
{
|
||||||
|
$collection = new Collection();
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test1',
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
$collection,
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test2',
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
$collection,
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test3',
|
||||||
|
3,
|
||||||
|
2,
|
||||||
|
$collection,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides element with index to add to collection
|
||||||
|
*
|
||||||
|
* @return Generator
|
||||||
|
*/
|
||||||
|
public function provideElementToAddWithIndex()
|
||||||
|
{
|
||||||
|
$collection = new Collection();
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test1',
|
||||||
|
'aa',
|
||||||
|
1,
|
||||||
|
'aa',
|
||||||
|
$collection,
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test2',
|
||||||
|
'oo',
|
||||||
|
2,
|
||||||
|
'oo',
|
||||||
|
$collection,
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test3',
|
||||||
|
null,
|
||||||
|
3,
|
||||||
|
0,
|
||||||
|
$collection,
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test4',
|
||||||
|
'',
|
||||||
|
4,
|
||||||
|
1,
|
||||||
|
$collection,
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test5',
|
||||||
|
'vv',
|
||||||
|
5,
|
||||||
|
'vv',
|
||||||
|
$collection,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Base;
|
namespace Meritoo\Test\Common\Exception\Base;
|
||||||
|
|
||||||
use Meritoo\Common\Exception\Base\UnknownTypeException;
|
use Meritoo\Common\Exception\Base\UnknownTypeException;
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
@@ -16,14 +16,14 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of the exception used while type of something is unknown
|
* Test case of the exception used while type of something is unknown
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class UnknownTypeExceptionTest extends BaseTestCase
|
class UnknownTypeExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(UnknownTestTypeException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
static::assertConstructorVisibilityAndArguments(UnknownTestTypeException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testWithoutException()
|
public function testWithoutException()
|
||||||
@@ -41,8 +41,8 @@ class UnknownTypeExceptionTest extends BaseTestCase
|
|||||||
/**
|
/**
|
||||||
* Type of something (for testing purposes)
|
* Type of something (for testing purposes)
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class TestType extends BaseType
|
class TestType extends BaseType
|
||||||
{
|
{
|
||||||
@@ -54,27 +54,31 @@ class TestType extends BaseType
|
|||||||
/**
|
/**
|
||||||
* An exception used while type of something is unknown (for testing purposes)
|
* An exception used while type of something is unknown (for testing purposes)
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class UnknownTestTypeException extends UnknownTypeException
|
class UnknownTestTypeException extends UnknownTypeException
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Class constructor
|
* Creates exception
|
||||||
*
|
*
|
||||||
* @param int|string $unknownType The unknown type of something (for testing purposes)
|
* @param string $unknownType The unknown type of something (for testing purposes)
|
||||||
|
* @return UnknownTestTypeException
|
||||||
*/
|
*/
|
||||||
public function __construct($unknownType)
|
public static function createException($unknownType)
|
||||||
{
|
{
|
||||||
parent::__construct($unknownType, new TestType(), 'type of something used for testing');
|
/* @var UnknownTestTypeException $exception */
|
||||||
|
$exception = parent::create($unknownType, new TestType(), 'type of something used for testing');
|
||||||
|
|
||||||
|
return $exception;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service used together with type of something (for testing purposes)
|
* Service used together with type of something (for testing purposes)
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class TestService
|
class TestService
|
||||||
{
|
{
|
||||||
|
|||||||
74
tests/Exception/Bundle/IncorrectBundleNameExceptionTest.php
Normal file
74
tests/Exception/Bundle/IncorrectBundleNameExceptionTest.php
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Test\Common\Exception\Bundle;
|
||||||
|
|
||||||
|
use Meritoo\Common\Exception\Bundle\IncorrectBundleNameException;
|
||||||
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
|
use Meritoo\Common\Type\OopVisibilityType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test case of an exception used while name of bundle is incorrect
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class IncorrectBundleNameExceptionTest extends BaseTestCase
|
||||||
|
{
|
||||||
|
public function testConstructor()
|
||||||
|
{
|
||||||
|
static::assertConstructorVisibilityAndArguments(
|
||||||
|
IncorrectBundleNameException::class,
|
||||||
|
OopVisibilityType::IS_PUBLIC,
|
||||||
|
3
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $description Description of test
|
||||||
|
* @param string $bundleName Incorrect name of bundle
|
||||||
|
* @param string $expectedMessage Expected exception's message
|
||||||
|
*
|
||||||
|
* @dataProvider provideBundleNameAndMessage
|
||||||
|
*/
|
||||||
|
public function testCreate($description, $bundleName, $expectedMessage)
|
||||||
|
{
|
||||||
|
$exception = IncorrectBundleNameException::create($bundleName);
|
||||||
|
static::assertSame($expectedMessage, $exception->getMessage(), $description);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideBundleNameAndMessage()
|
||||||
|
{
|
||||||
|
$template = 'Name of bundle \'%s\' is incorrect. It should start with big letter and end with "Bundle". Is'
|
||||||
|
. ' there everything ok?';
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'An empty string as name of bundle',
|
||||||
|
'',
|
||||||
|
sprintf($template, ''),
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'Null as name of bundle',
|
||||||
|
null,
|
||||||
|
sprintf($template, ''),
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'String with spaces as name of bundle',
|
||||||
|
'This is test',
|
||||||
|
sprintf($template, 'This is test'),
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'String without spaces as name of bundle',
|
||||||
|
'ThisIsTest',
|
||||||
|
sprintf($template, 'ThisIsTest'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,10 +6,10 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Date;
|
namespace Meritoo\Test\Common\Exception\Date;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Date\UnknownDatePartTypeException;
|
use Meritoo\Common\Exception\Type\UnknownDatePartTypeException;
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
use Meritoo\Common\Type\DatePartType;
|
use Meritoo\Common\Type\DatePartType;
|
||||||
use Meritoo\Common\Type\OopVisibilityType;
|
use Meritoo\Common\Type\OopVisibilityType;
|
||||||
@@ -17,14 +17,14 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of an exception used while type of date part, e.g. "year", is unknown
|
* Test case of an exception used while type of date part, e.g. "year", is unknown
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class UnknownDatePartTypeExceptionTest extends BaseTestCase
|
class UnknownDatePartTypeExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(UnknownDatePartTypeException::class, OopVisibilityType::IS_PUBLIC, 2, 2);
|
static::assertConstructorVisibilityAndArguments(UnknownDatePartTypeException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,10 +34,10 @@ class UnknownDatePartTypeExceptionTest extends BaseTestCase
|
|||||||
*
|
*
|
||||||
* @dataProvider provideDatePartAndValue
|
* @dataProvider provideDatePartAndValue
|
||||||
*/
|
*/
|
||||||
public function testConstructorMessage($unknownDatePart, $value, $expectedMessage)
|
public function testMessage($unknownDatePart, $value, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new UnknownDatePartTypeException($unknownDatePart, $value);
|
$exception = UnknownDatePartTypeException::createException($unknownDatePart, $value);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\File;
|
namespace Meritoo\Test\Common\Exception\File;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\File\EmptyFileException;
|
use Meritoo\Common\Exception\File\EmptyFileException;
|
||||||
@@ -16,14 +16,14 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of an exception used while file with given path is empty (has no content)
|
* Test case of an exception used while file with given path is empty (has no content)
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class EmptyFileExceptionTest extends BaseTestCase
|
class EmptyFileExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(EmptyFileException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
static::assertConstructorVisibilityAndArguments(EmptyFileException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,10 +32,10 @@ class EmptyFileExceptionTest extends BaseTestCase
|
|||||||
*
|
*
|
||||||
* @dataProvider providePathOfFile
|
* @dataProvider providePathOfFile
|
||||||
*/
|
*/
|
||||||
public function testConstructorMessage($emptyFilePath, $expectedMessage)
|
public function testMessage($emptyFilePath, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new EmptyFileException($emptyFilePath);
|
$exception = EmptyFileException::create($emptyFilePath);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\File;
|
namespace Meritoo\Test\Common\Exception\File;
|
||||||
|
|
||||||
use Meritoo\Common\Exception\File\EmptyFilePathException;
|
use Meritoo\Common\Exception\File\EmptyFilePathException;
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
@@ -15,19 +15,19 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of an exception used while path of given file is empty
|
* Test case of an exception used while path of given file is empty
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class EmptyFilePathExceptionTest extends BaseTestCase
|
class EmptyFilePathExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(EmptyFilePathException::class, OopVisibilityType::IS_PUBLIC);
|
static::assertConstructorVisibilityAndArguments(EmptyFilePathException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testConstructorMessage()
|
public function testConstructorMessage()
|
||||||
{
|
{
|
||||||
$exception = new EmptyFilePathException();
|
$exception = EmptyFilePathException::create();
|
||||||
static::assertEquals('Path of the file is empty. Did you provide path of proper file?', $exception->getMessage());
|
static::assertSame('Path of the file is empty. Did you provide path of proper file?', $exception->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\File;
|
namespace Meritoo\Test\Common\Exception\File;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\File\NotExistingFileException;
|
use Meritoo\Common\Exception\File\NotExistingFileException;
|
||||||
@@ -16,14 +16,14 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of an exception used while file with given path does not exist
|
* Test case of an exception used while file with given path does not exist
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class NotExistingFileExceptionTest extends BaseTestCase
|
class NotExistingFileExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(NotExistingFileException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
static::assertConstructorVisibilityAndArguments(NotExistingFileException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,8 +34,8 @@ class NotExistingFileExceptionTest extends BaseTestCase
|
|||||||
*/
|
*/
|
||||||
public function testConstructorMessage($notExistingFilePath, $expectedMessage)
|
public function testConstructorMessage($notExistingFilePath, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new NotExistingFileException($notExistingFilePath);
|
$exception = NotExistingFileException::create($notExistingFilePath);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Method;
|
namespace Meritoo\Test\Common\Exception\Method;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Method\DisabledMethodException;
|
use Meritoo\Common\Exception\Method\DisabledMethodException;
|
||||||
@@ -16,14 +16,14 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of an exception used while method cannot be called, because is disabled
|
* Test case of an exception used while method cannot be called, because is disabled
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class DisabledMethodExceptionTest extends BaseTestCase
|
class DisabledMethodExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(DisabledMethodException::class, OopVisibilityType::IS_PUBLIC, 2, 1);
|
static::assertConstructorVisibilityAndArguments(DisabledMethodException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,8 +36,8 @@ class DisabledMethodExceptionTest extends BaseTestCase
|
|||||||
*/
|
*/
|
||||||
public function testConstructorMessage($disabledMethod, $alternativeMethod, $expectedMessage)
|
public function testConstructorMessage($disabledMethod, $alternativeMethod, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new DisabledMethodException($disabledMethod, $alternativeMethod);
|
$exception = DisabledMethodException::create($disabledMethod, $alternativeMethod);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Reflection;
|
namespace Meritoo\Test\Common\Exception\Reflection;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Reflection\CannotResolveClassNameException;
|
use Meritoo\Common\Exception\Reflection\CannotResolveClassNameException;
|
||||||
@@ -16,14 +16,14 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of an exception used while name of class or trait cannot be resolved
|
* Test case of an exception used while name of class or trait cannot be resolved
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class CannotResolveClassNameExceptionTest extends BaseTestCase
|
class CannotResolveClassNameExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(CannotResolveClassNameException::class, OopVisibilityType::IS_PUBLIC, 2, 1);
|
static::assertConstructorVisibilityAndArguments(CannotResolveClassNameException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -37,8 +37,8 @@ class CannotResolveClassNameExceptionTest extends BaseTestCase
|
|||||||
*/
|
*/
|
||||||
public function testConstructorMessage($source, $forClass, $expectedMessage)
|
public function testConstructorMessage($source, $forClass, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new CannotResolveClassNameException($source, $forClass);
|
$exception = CannotResolveClassNameException::create($source, $forClass);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Reflection;
|
namespace Meritoo\Test\Common\Exception\Reflection;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Reflection\MissingChildClassesException;
|
use Meritoo\Common\Exception\Reflection\MissingChildClassesException;
|
||||||
@@ -16,14 +16,14 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of an exception used while given class has no child classes
|
* Test case of an exception used while given class has no child classes
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class MissingChildClassesExceptionTest extends BaseTestCase
|
class MissingChildClassesExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(MissingChildClassesException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
static::assertConstructorVisibilityAndArguments(MissingChildClassesException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,8 +35,8 @@ class MissingChildClassesExceptionTest extends BaseTestCase
|
|||||||
*/
|
*/
|
||||||
public function testConstructorMessage($parentClass, $expectedMessage)
|
public function testConstructorMessage($parentClass, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new MissingChildClassesException($parentClass);
|
$exception = MissingChildClassesException::create($parentClass);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Test\Common\Exception\Reflection;
|
||||||
|
|
||||||
|
use Meritoo\Common\Exception\Reflection\NotExistingPropertyException;
|
||||||
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
|
use Meritoo\Common\Type\OopVisibilityType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class NotExistingPropertyExceptionTest
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class NotExistingPropertyExceptionTest extends BaseTestCase
|
||||||
|
{
|
||||||
|
public function testConstructor()
|
||||||
|
{
|
||||||
|
static::assertConstructorVisibilityAndArguments(
|
||||||
|
NotExistingPropertyException::class,
|
||||||
|
OopVisibilityType::IS_PUBLIC,
|
||||||
|
3
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $description Description of test
|
||||||
|
* @param mixed $object Object that should contains given property
|
||||||
|
* @param string $property Name of the property
|
||||||
|
* @param string $expectedMessage Expected exception's message
|
||||||
|
*
|
||||||
|
* @dataProvider provideObjectPropertyAndMessage
|
||||||
|
*/
|
||||||
|
public function testCreate($description, $object, $property, $expectedMessage)
|
||||||
|
{
|
||||||
|
$exception = NotExistingPropertyException::create($object, $property);
|
||||||
|
static::assertSame($expectedMessage, $exception->getMessage(), $description);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideObjectPropertyAndMessage()
|
||||||
|
{
|
||||||
|
$template = 'Property \'%s\' does not exist in instance of class \'%s\'. Did you use proper name of property?';
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'An empty string as name of property',
|
||||||
|
new \stdClass(),
|
||||||
|
'',
|
||||||
|
sprintf($template, '', get_class(new \stdClass())),
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'Null as name of property',
|
||||||
|
new \stdClass(),
|
||||||
|
null,
|
||||||
|
sprintf($template, '', get_class(new \stdClass())),
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'String with spaces as name of property',
|
||||||
|
new \stdClass(),
|
||||||
|
'This is test',
|
||||||
|
sprintf($template, 'This is test', get_class(new \stdClass())),
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'String without spaces as name of property',
|
||||||
|
new \stdClass(),
|
||||||
|
'ThisIsTest',
|
||||||
|
sprintf($template, 'ThisIsTest', get_class(new \stdClass())),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Reflection;
|
namespace Meritoo\Test\Common\Exception\Reflection;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Reflection\TooManyChildClassesException;
|
use Meritoo\Common\Exception\Reflection\TooManyChildClassesException;
|
||||||
@@ -16,14 +16,14 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of an exception used while given class has more than one child class
|
* Test case of an exception used while given class has more than one child class
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class TooManyChildClassesExceptionTest extends BaseTestCase
|
class TooManyChildClassesExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(TooManyChildClassesException::class, OopVisibilityType::IS_PUBLIC, 2, 2);
|
static::assertConstructorVisibilityAndArguments(TooManyChildClassesException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,8 +36,8 @@ class TooManyChildClassesExceptionTest extends BaseTestCase
|
|||||||
*/
|
*/
|
||||||
public function testConstructorMessage($parentClass, array $childClasses, $expectedMessage)
|
public function testConstructorMessage($parentClass, array $childClasses, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new TooManyChildClassesException($parentClass, $childClasses);
|
$exception = TooManyChildClassesException::create($parentClass, $childClasses);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Regex;
|
namespace Meritoo\Test\Common\Exception\Regex;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException;
|
use Meritoo\Common\Exception\Regex\IncorrectColorHexLengthException;
|
||||||
@@ -16,14 +16,14 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of an exception used while length of given hexadecimal value of color is incorrect
|
* Test case of an exception used while length of given hexadecimal value of color is incorrect
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class IncorrectColorHexLengthExceptionTest extends BaseTestCase
|
class IncorrectColorHexLengthExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(IncorrectColorHexLengthException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
static::assertConstructorVisibilityAndArguments(IncorrectColorHexLengthException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,8 +34,8 @@ class IncorrectColorHexLengthExceptionTest extends BaseTestCase
|
|||||||
*/
|
*/
|
||||||
public function testConstructorMessage($color, $expectedMessage)
|
public function testConstructorMessage($color, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new IncorrectColorHexLengthException($color);
|
$exception = IncorrectColorHexLengthException::create($color);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,28 +6,24 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Regex;
|
namespace Meritoo\Test\Common\Exception\Regex;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
|
use Meritoo\Common\Exception\Regex\InvalidColorHexValueException;
|
||||||
use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException;
|
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
use Meritoo\Common\Type\OopVisibilityType;
|
use Meritoo\Common\Type\OopVisibilityType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test case of an exception used while given hexadecimal value of color is invalid
|
* Test case of an exception used while given hexadecimal value of color is invalid
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class InvalidColorHexValueExceptionTest extends BaseTestCase
|
class InvalidColorHexValueExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @throws UnknownOopVisibilityTypeException
|
|
||||||
*/
|
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(InvalidColorHexValueException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
static::assertConstructorVisibilityAndArguments(InvalidColorHexValueException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -38,8 +34,8 @@ class InvalidColorHexValueExceptionTest extends BaseTestCase
|
|||||||
*/
|
*/
|
||||||
public function testConstructorMessage($color, $expectedMessage)
|
public function testConstructorMessage($color, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new InvalidColorHexValueException($color);
|
$exception = InvalidColorHexValueException::create($color);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,28 +6,24 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Regex;
|
namespace Meritoo\Test\Common\Exception\Regex;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Regex\InvalidHtmlAttributesException;
|
use Meritoo\Common\Exception\Regex\InvalidHtmlAttributesException;
|
||||||
use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException;
|
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
use Meritoo\Common\Type\OopVisibilityType;
|
use Meritoo\Common\Type\OopVisibilityType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test case of an exception used while html attributes are invalid
|
* Test case of an exception used while html attributes are invalid
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class InvalidHtmlAttributesExceptionTest extends BaseTestCase
|
class InvalidHtmlAttributesExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @throws UnknownOopVisibilityTypeException
|
|
||||||
*/
|
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(InvalidHtmlAttributesException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
static::assertConstructorVisibilityAndArguments(InvalidHtmlAttributesException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -38,8 +34,8 @@ class InvalidHtmlAttributesExceptionTest extends BaseTestCase
|
|||||||
*/
|
*/
|
||||||
public function testConstructorMessage($htmlAttributes, $expectedMessage)
|
public function testConstructorMessage($htmlAttributes, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new InvalidHtmlAttributesException($htmlAttributes);
|
$exception = InvalidHtmlAttributesException::create($htmlAttributes);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Regex;
|
namespace Meritoo\Test\Common\Exception\Regex;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Regex\InvalidUrlException;
|
use Meritoo\Common\Exception\Regex\InvalidUrlException;
|
||||||
@@ -16,14 +16,14 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of an exception used while url is invalid
|
* Test case of an exception used while url is invalid
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class InvalidUrlExceptionTest extends BaseTestCase
|
class InvalidUrlExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(InvalidUrlException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
static::assertConstructorVisibilityAndArguments(InvalidUrlException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,8 +34,8 @@ class InvalidUrlExceptionTest extends BaseTestCase
|
|||||||
*/
|
*/
|
||||||
public function testConstructorMessage($url, $expectedMessage)
|
public function testConstructorMessage($url, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new InvalidUrlException($url);
|
$exception = InvalidUrlException::create($url);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Exception\Type;
|
namespace Meritoo\Test\Common\Exception\Type;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException;
|
use Meritoo\Common\Exception\Type\UnknownOopVisibilityTypeException;
|
||||||
@@ -17,14 +17,14 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
* Test case of an exception used while the visibility of a property, a method or (as of PHP 7.1.0) a constant is
|
* Test case of an exception used while the visibility of a property, a method or (as of PHP 7.1.0) a constant is
|
||||||
* unknown
|
* unknown
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class UnknownOopVisibilityTypeExceptionTest extends BaseTestCase
|
class UnknownOopVisibilityTypeExceptionTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
public function testConstructorVisibilityAndArguments()
|
public function testConstructorVisibilityAndArguments()
|
||||||
{
|
{
|
||||||
static::assertConstructorVisibilityAndArguments(UnknownOopVisibilityTypeException::class, OopVisibilityType::IS_PUBLIC, 1, 1);
|
static::assertConstructorVisibilityAndArguments(UnknownOopVisibilityTypeException::class, OopVisibilityType::IS_PUBLIC, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,8 +35,8 @@ class UnknownOopVisibilityTypeExceptionTest extends BaseTestCase
|
|||||||
*/
|
*/
|
||||||
public function testConstructorMessage($unknownType, $expectedMessage)
|
public function testConstructorMessage($unknownType, $expectedMessage)
|
||||||
{
|
{
|
||||||
$exception = new UnknownOopVisibilityTypeException($unknownType);
|
$exception = UnknownOopVisibilityTypeException::createException($unknownType);
|
||||||
static::assertEquals($expectedMessage, $exception->getMessage());
|
static::assertSame($expectedMessage, $exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
0
tests/Resources/var/cache/.gitkeep
vendored
Normal file
0
tests/Resources/var/cache/.gitkeep
vendored
Normal file
0
tests/Resources/var/log/.gitkeep
Normal file
0
tests/Resources/var/log/.gitkeep
Normal file
0
tests/Resources/var/sessions/.gitkeep
Normal file
0
tests/Resources/var/sessions/.gitkeep
Normal file
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Test\Base;
|
namespace Meritoo\Test\Common\Test\Base;
|
||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use Generator;
|
use Generator;
|
||||||
@@ -17,8 +17,8 @@ use Meritoo\Common\Utilities\GeneratorUtility;
|
|||||||
/**
|
/**
|
||||||
* Test case of the base test case with common methods and data providers
|
* Test case of the base test case with common methods and data providers
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class BaseTestCaseTest extends BaseTestCase
|
class BaseTestCaseTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
@@ -168,8 +168,8 @@ class BaseTestCaseTest extends BaseTestCase
|
|||||||
/**
|
/**
|
||||||
* Simple test case
|
* Simple test case
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class SimpleTestCase extends BaseTestCase
|
class SimpleTestCase extends BaseTestCase
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Type\Base;
|
namespace Meritoo\Test\Common\Type\Base;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Test\Base\BaseTestCase;
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
@@ -15,8 +15,8 @@ use Meritoo\Common\Type\Base\BaseType;
|
|||||||
/**
|
/**
|
||||||
* Test case of the base / abstract type of something
|
* Test case of the base / abstract type of something
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class BaseTypeTest extends BaseTestCase
|
class BaseTypeTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
@@ -184,8 +184,8 @@ class BaseTypeTest extends BaseTestCase
|
|||||||
/**
|
/**
|
||||||
* Empty type of something used for testing
|
* Empty type of something used for testing
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class TestEmptyType extends BaseType
|
class TestEmptyType extends BaseType
|
||||||
{
|
{
|
||||||
@@ -194,8 +194,8 @@ class TestEmptyType extends BaseType
|
|||||||
/**
|
/**
|
||||||
* Type of something used for testing
|
* Type of something used for testing
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class TestType extends BaseType
|
class TestType extends BaseType
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Type;
|
namespace Meritoo\Test\Common\Type;
|
||||||
|
|
||||||
use Meritoo\Common\Test\Base\BaseTypeTestCase;
|
use Meritoo\Common\Test\Base\BaseTypeTestCase;
|
||||||
use Meritoo\Common\Type\DatePartType;
|
use Meritoo\Common\Type\DatePartType;
|
||||||
@@ -14,34 +14,11 @@ use Meritoo\Common\Type\DatePartType;
|
|||||||
/**
|
/**
|
||||||
* Test case of the type of date part, e.g. "year"
|
* Test case of the type of date part, e.g. "year"
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class DatePartTypeTest extends BaseTypeTestCase
|
class DatePartTypeTest extends BaseTypeTestCase
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
protected function getAllExpectedTypes()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'DAY' => DatePartType::DAY,
|
|
||||||
'HOUR' => DatePartType::HOUR,
|
|
||||||
'MINUTE' => DatePartType::MINUTE,
|
|
||||||
'MONTH' => DatePartType::MONTH,
|
|
||||||
'SECOND' => DatePartType::SECOND,
|
|
||||||
'YEAR' => DatePartType::YEAR,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
protected function getTestedTypeInstance()
|
|
||||||
{
|
|
||||||
return new DatePartType();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
@@ -97,4 +74,27 @@ class DatePartTypeTest extends BaseTypeTestCase
|
|||||||
true,
|
true,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function getAllExpectedTypes()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'DAY' => DatePartType::DAY,
|
||||||
|
'HOUR' => DatePartType::HOUR,
|
||||||
|
'MINUTE' => DatePartType::MINUTE,
|
||||||
|
'MONTH' => DatePartType::MONTH,
|
||||||
|
'SECOND' => DatePartType::SECOND,
|
||||||
|
'YEAR' => DatePartType::YEAR,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function getTestedTypeInstance()
|
||||||
|
{
|
||||||
|
return new DatePartType();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Type;
|
namespace Meritoo\Test\Common\Type;
|
||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use Generator;
|
use Generator;
|
||||||
@@ -17,8 +17,8 @@ use Meritoo\Common\Type\OopVisibilityType;
|
|||||||
/**
|
/**
|
||||||
* Test case of date's period
|
* Test case of date's period
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class DatePeriodTest extends BaseTypeTestCase
|
class DatePeriodTest extends BaseTypeTestCase
|
||||||
{
|
{
|
||||||
@@ -214,34 +214,6 @@ class DatePeriodTest extends BaseTypeTestCase
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns all expected types of the tested type
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
protected function getAllExpectedTypes()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'LAST_MONTH' => DatePeriod::LAST_MONTH,
|
|
||||||
'LAST_WEEK' => DatePeriod::LAST_WEEK,
|
|
||||||
'LAST_YEAR' => DatePeriod::LAST_YEAR,
|
|
||||||
'NEXT_MONTH' => DatePeriod::NEXT_MONTH,
|
|
||||||
'NEXT_WEEK' => DatePeriod::NEXT_WEEK,
|
|
||||||
'NEXT_YEAR' => DatePeriod::NEXT_YEAR,
|
|
||||||
'THIS_MONTH' => DatePeriod::THIS_MONTH,
|
|
||||||
'THIS_WEEK' => DatePeriod::THIS_WEEK,
|
|
||||||
'THIS_YEAR' => DatePeriod::THIS_YEAR,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
protected function getTestedTypeInstance()
|
|
||||||
{
|
|
||||||
return new DatePeriod();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
@@ -277,4 +249,32 @@ class DatePeriodTest extends BaseTypeTestCase
|
|||||||
true,
|
true,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all expected types of the tested type
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function getAllExpectedTypes()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'LAST_MONTH' => DatePeriod::LAST_MONTH,
|
||||||
|
'LAST_WEEK' => DatePeriod::LAST_WEEK,
|
||||||
|
'LAST_YEAR' => DatePeriod::LAST_YEAR,
|
||||||
|
'NEXT_MONTH' => DatePeriod::NEXT_MONTH,
|
||||||
|
'NEXT_WEEK' => DatePeriod::NEXT_WEEK,
|
||||||
|
'NEXT_YEAR' => DatePeriod::NEXT_YEAR,
|
||||||
|
'THIS_MONTH' => DatePeriod::THIS_MONTH,
|
||||||
|
'THIS_WEEK' => DatePeriod::THIS_WEEK,
|
||||||
|
'THIS_YEAR' => DatePeriod::THIS_YEAR,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
protected function getTestedTypeInstance()
|
||||||
|
{
|
||||||
|
return new DatePeriod();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
46
tests/Utilities/Arrays/SimpleToString.php
Normal file
46
tests/Utilities/Arrays/SimpleToString.php
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Test\Common\Utilities\Arrays;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple class convertible to string.
|
||||||
|
* Used for testing the Arrays class.
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class SimpleToString
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Identifier
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class constructor
|
||||||
|
*
|
||||||
|
* @param string $id Identifier
|
||||||
|
*/
|
||||||
|
public function __construct($id)
|
||||||
|
{
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns representation of object as string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
return sprintf('Instance with ID: %s', $this->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
185
tests/Utilities/Bootstrap4CssSelectorTest.php
Normal file
185
tests/Utilities/Bootstrap4CssSelectorTest.php
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (c) Meritoo.pl, http://www.meritoo.pl
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Meritoo\Test\Common\Utilities;
|
||||||
|
|
||||||
|
use Meritoo\Common\Test\Base\BaseTestCase;
|
||||||
|
use Meritoo\Common\Utilities\Bootstrap4CssSelector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test case of the useful methods related to CSS selectors and the Bootstrap4 (front-end component library)
|
||||||
|
*
|
||||||
|
* @author Meritoo <github@meritoo.pl>
|
||||||
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
|
*/
|
||||||
|
class Bootstrap4CssSelectorTest extends BaseTestCase
|
||||||
|
{
|
||||||
|
public function testConstructor()
|
||||||
|
{
|
||||||
|
static::assertHasNoConstructor(Bootstrap4CssSelector::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $emptyValue Name of form (value of the "name" attribute)
|
||||||
|
* @dataProvider provideEmptyScalarValue
|
||||||
|
*/
|
||||||
|
public function testGetRadioButtonErrorSelectorUsingEmptyFormName($emptyValue)
|
||||||
|
{
|
||||||
|
$fieldSetIndex = 1;
|
||||||
|
static::assertSame('', Bootstrap4CssSelector::getRadioButtonErrorSelector($emptyValue, $fieldSetIndex));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetRadioButtonErrorSelectorUsingNegativeFieldSetIndex()
|
||||||
|
{
|
||||||
|
static::assertSame('', Bootstrap4CssSelector::getRadioButtonErrorSelector('test-test', -1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $formName Name of form (value of the "name" attribute)
|
||||||
|
* @param int $fieldSetIndex Index/Position of the field-set
|
||||||
|
* @param string $expected Expected selector
|
||||||
|
*
|
||||||
|
* @dataProvider provideFormNameFieldSetIndexAndSelector
|
||||||
|
*/
|
||||||
|
public function testGetRadioButtonErrorSelector($formName, $fieldSetIndex, $expected)
|
||||||
|
{
|
||||||
|
static::assertSame($expected, Bootstrap4CssSelector::getRadioButtonErrorSelector($formName, $fieldSetIndex));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $emptyValue Name of form (value of the "name" attribute)
|
||||||
|
* @dataProvider provideEmptyScalarValue
|
||||||
|
*/
|
||||||
|
public function testGetFieldErrorSelectorUsingEmptyFormName($emptyValue)
|
||||||
|
{
|
||||||
|
$fieldName = 'test';
|
||||||
|
static::assertSame('', Bootstrap4CssSelector::getFieldErrorSelector($emptyValue, $fieldName));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $emptyValue Name of field (value of the "name" attribute)
|
||||||
|
* @dataProvider provideEmptyScalarValue
|
||||||
|
*/
|
||||||
|
public function testGetFieldErrorSelectorUsingEmptyFieldName($emptyValue)
|
||||||
|
{
|
||||||
|
$formName = 'test';
|
||||||
|
static::assertSame('', Bootstrap4CssSelector::getFieldErrorSelector($formName, $emptyValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $formName Name of form (value of the "name" attribute)
|
||||||
|
* @param string $fieldName Name of field (value of the "name" attribute)
|
||||||
|
* @param string $expected Expected selector
|
||||||
|
*
|
||||||
|
* @dataProvider provideFormNameFieldNameAndSelector
|
||||||
|
*/
|
||||||
|
public function testGetFieldErrorSelector($formName, $fieldName, $expected)
|
||||||
|
{
|
||||||
|
static::assertSame($expected, Bootstrap4CssSelector::getFieldErrorSelector($formName, $fieldName));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $emptyValue Name of form (value of the "name" attribute)
|
||||||
|
* @dataProvider provideEmptyScalarValue
|
||||||
|
*/
|
||||||
|
public function testGetFieldGroupSelectorUsingEmptyFormName($emptyValue)
|
||||||
|
{
|
||||||
|
static::assertSame('', Bootstrap4CssSelector::getFieldGroupSelector($emptyValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $formName Name of form (value of the "name" attribute)
|
||||||
|
* @param string $expected Expected selector
|
||||||
|
*
|
||||||
|
* @dataProvider provideFormNameAndSelector
|
||||||
|
*/
|
||||||
|
public function testGetFieldGroupSelector($formName, $expected)
|
||||||
|
{
|
||||||
|
static::assertSame($expected, Bootstrap4CssSelector::getFieldGroupSelector($formName));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetFieldErrorContainerSelector()
|
||||||
|
{
|
||||||
|
static::assertSame('.invalid-feedback .form-error-message', Bootstrap4CssSelector::getFieldErrorContainerSelector());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides name of form, index/position of the field-set and expected selector
|
||||||
|
*
|
||||||
|
* @return \Generator
|
||||||
|
*/
|
||||||
|
public function provideFormNameFieldSetIndexAndSelector()
|
||||||
|
{
|
||||||
|
yield[
|
||||||
|
'test',
|
||||||
|
0,
|
||||||
|
'form[name="test"] fieldset:nth-of-type(0) legend.col-form-label .invalid-feedback .form-error-message',
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test-123-test-456',
|
||||||
|
1,
|
||||||
|
'form[name="test-123-test-456"] fieldset:nth-of-type(1) legend.col-form-label .invalid-feedback .form-error-message',
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test_something_098_different',
|
||||||
|
1245,
|
||||||
|
'form[name="test_something_098_different"] fieldset:nth-of-type(1245) legend.col-form-label .invalid-feedback .form-error-message',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides name of form, name of field and expected selector
|
||||||
|
*
|
||||||
|
* @return \Generator
|
||||||
|
*/
|
||||||
|
public function provideFormNameFieldNameAndSelector()
|
||||||
|
{
|
||||||
|
yield[
|
||||||
|
'test',
|
||||||
|
'test',
|
||||||
|
'form[name="test"] label[for="test"] .invalid-feedback .form-error-message',
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test-123-test-456',
|
||||||
|
'great-000-field',
|
||||||
|
'form[name="test-123-test-456"] label[for="great-000-field"] .invalid-feedback .form-error-message',
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test_something_098_different',
|
||||||
|
'this-is-the-123789-field',
|
||||||
|
'form[name="test_something_098_different"] label[for="this-is-the-123789-field"] .invalid-feedback .form-error-message',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides name of form and expected selector
|
||||||
|
*
|
||||||
|
* @return \Generator
|
||||||
|
*/
|
||||||
|
public function provideFormNameAndSelector()
|
||||||
|
{
|
||||||
|
yield[
|
||||||
|
'test',
|
||||||
|
'form[name="test"] .form-group',
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test-123-test-456',
|
||||||
|
'form[name="test-123-test-456"] .form-group',
|
||||||
|
];
|
||||||
|
|
||||||
|
yield[
|
||||||
|
'test_something_098_different',
|
||||||
|
'form[name="test_something_098_different"] .form-group',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Meritoo\Common\Test\Utilities;
|
namespace Meritoo\Test\Common\Utilities;
|
||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use Meritoo\Common\Exception\Bundle\IncorrectBundleNameException;
|
use Meritoo\Common\Exception\Bundle\IncorrectBundleNameException;
|
||||||
@@ -16,8 +16,8 @@ use Meritoo\Common\Utilities\Bundle;
|
|||||||
/**
|
/**
|
||||||
* Test case of the useful methods for bundle
|
* Test case of the useful methods for bundle
|
||||||
*
|
*
|
||||||
* @author Krzysztof Niziol <krzysztof.niziol@meritoo.pl>
|
* @author Meritoo <github@meritoo.pl>
|
||||||
* @copyright Meritoo.pl
|
* @copyright Meritoo <http://www.meritoo.pl>
|
||||||
*/
|
*/
|
||||||
class BundleTest extends BaseTestCase
|
class BundleTest extends BaseTestCase
|
||||||
{
|
{
|
||||||
@@ -42,7 +42,6 @@ class BundleTest extends BaseTestCase
|
|||||||
* @param string $viewPath Path of the view / template, e.g. "MyDirectory/my-template"
|
* @param string $viewPath Path of the view / template, e.g. "MyDirectory/my-template"
|
||||||
* @param string $bundleName Full name of the bundle, e.g. "MyExtraBundle"
|
* @param string $bundleName Full name of the bundle, e.g. "MyExtraBundle"
|
||||||
*
|
*
|
||||||
* @throws IncorrectBundleNameException
|
|
||||||
* @dataProvider provideViewPathAndIncorrectBundleName
|
* @dataProvider provideViewPathAndIncorrectBundleName
|
||||||
*/
|
*/
|
||||||
public function testGetBundleViewPathUsingIncorrectBundleName($viewPath, $bundleName)
|
public function testGetBundleViewPathUsingIncorrectBundleName($viewPath, $bundleName)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user