Skip to content

Commit ae45c2c

Browse files
committed
Refactor to image candidate sets
1 parent 67feb85 commit ae45c2c

File tree

10 files changed

+566
-133
lines changed

10 files changed

+566
-133
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
/**
4+
* responsive-images-css
5+
*
6+
* @category Jkphl
7+
* @package Jkphl\Respimgcss
8+
* @subpackage Jkphl\Respimgcss\Application\Contract
9+
* @author Joschi Kuphal <[email protected]> / @jkphl
10+
* @copyright Copyright © 2018 Joschi Kuphal <[email protected]> / @jkphl
11+
* @license http://opensource.org/licenses/MIT The MIT License (MIT)
12+
*/
13+
14+
/***********************************************************************************
15+
* The MIT License (MIT)
16+
*
17+
* Copyright © 2018 Joschi Kuphal <[email protected]> / @jkphl
18+
*
19+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
20+
* this software and associated documentation files (the "Software"), to deal in
21+
* the Software without restriction, including without limitation the rights to
22+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
23+
* the Software, and to permit persons to whom the Software is furnished to do so,
24+
* subject to the following conditions:
25+
*
26+
* The above copyright notice and this permission notice shall be included in all
27+
* copies or substantial portions of the Software.
28+
*
29+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
31+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
32+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
33+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
34+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35+
***********************************************************************************/
36+
37+
namespace Jkphl\Respimgcss\Application\Contract;
38+
39+
/**
40+
* Extended image candidate set interface
41+
*
42+
* @package Jkphl\Respimgcss
43+
* @subpackage Jkphl\Respimgcss\Application
44+
*/
45+
interface ImageCandidateSetInterface extends \Jkphl\Respimgcss\Domain\Contract\ImageCandidateSetInterface
46+
{
47+
/**
48+
* Return all image candidates as an array
49+
*
50+
* @return array
51+
*/
52+
public function toArray(): array;
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<?php
2+
3+
/**
4+
* responsive-images-css
5+
*
6+
* @category Jkphl
7+
* @package Jkphl\Respimgcss
8+
* @subpackage Jkphl\Respimgcss\Application\Model
9+
* @author Joschi Kuphal <[email protected]> / @jkphl
10+
* @copyright Copyright © 2018 Joschi Kuphal <[email protected]> / @jkphl
11+
* @license http://opensource.org/licenses/MIT The MIT License (MIT)
12+
*/
13+
14+
/***********************************************************************************
15+
* The MIT License (MIT)
16+
*
17+
* Copyright © 2018 Joschi Kuphal <[email protected]> / @jkphl
18+
*
19+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
20+
* this software and associated documentation files (the "Software"), to deal in
21+
* the Software without restriction, including without limitation the rights to
22+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
23+
* the Software, and to permit persons to whom the Software is furnished to do so,
24+
* subject to the following conditions:
25+
*
26+
* The above copyright notice and this permission notice shall be included in all
27+
* copies or substantial portions of the Software.
28+
*
29+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
31+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
32+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
33+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
34+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35+
***********************************************************************************/
36+
37+
namespace Jkphl\Respimgcss\Application\Model;
38+
39+
use Jkphl\Respimgcss\Application\Contract\ImageCandidateSetInterface;
40+
use Jkphl\Respimgcss\Application\Exceptions\InvalidArgumentException;
41+
use Jkphl\Respimgcss\Domain\Contract\ImageCandidateInterface;
42+
43+
/**
44+
* Typed and validating image candidate set
45+
*
46+
* @package Jkphl\Respimgcss
47+
* @subpackage Jkphl\Respimgcss\Application
48+
*/
49+
class ImageCandidateSet extends \Jkphl\Respimgcss\Domain\Model\ImageCandidateSet implements ImageCandidateSetInterface
50+
{
51+
/**
52+
* Image candidate set type
53+
*
54+
* @var string
55+
*/
56+
protected $type;
57+
/**
58+
* Image candidate values
59+
*
60+
* @var array
61+
*/
62+
protected $values = [];
63+
64+
/**
65+
* Image candidate set constructor
66+
*
67+
* @param ImageCandidateInterface $imageCandidate Image candidate
68+
*/
69+
public function __construct(ImageCandidateInterface $imageCandidate)
70+
{
71+
$this->type = $imageCandidate->getType();
72+
$this->imageCandidates[] = $imageCandidate;
73+
$this->values[$imageCandidate->getValue()] = true;
74+
}
75+
76+
/**
77+
* Offset to set
78+
*
79+
* @param int $offset Offset
80+
* @param ImageCandidateInterface $value
81+
*
82+
* @return void
83+
* @throws InvalidArgumentException If the value given is not a valid image candidate
84+
* @throws InvalidArgumentException If the image candidate types are inconsistent
85+
* @throws InvalidArgumentException If the image candidate value isn't unique
86+
*/
87+
public function offsetSet($offset, $value): void
88+
{
89+
if (!($value instanceof ImageCandidateInterface)) {
90+
throw new InvalidArgumentException(
91+
InvalidArgumentException::INVALID_IMAGE_CANDIDATE_STR,
92+
InvalidArgumentException::INVALID_IMAGE_CANDIDATE
93+
);
94+
}
95+
96+
// Test if the image candidate type matches the current set type
97+
if ($value->getType() !== $this->type) {
98+
throw new InvalidArgumentException(
99+
InvalidArgumentException::INCONSISTENT_IMAGE_CANDIDATE_TYPES_STR,
100+
InvalidArgumentException::INCONSISTENT_IMAGE_CANDIDATE_TYPES
101+
);
102+
}
103+
104+
if (array_key_exists($value->getValue(), $this->values)) {
105+
throw new InvalidArgumentException(
106+
sprintf(InvalidArgumentException::OVERLAPPING_IMAGE_CANDIDATE_VALUE_STR, $value),
107+
InvalidArgumentException::OVERLAPPING_IMAGE_CANDIDATE_VALUE
108+
);
109+
}
110+
111+
parent::offsetSet($offset, $value);
112+
$this->values[$value->getValue()] = true;
113+
}
114+
115+
/**
116+
* Return all image candidates as an array
117+
*
118+
* @return array
119+
*/
120+
public function toArray(): array
121+
{
122+
return $this->imageCandidates;
123+
}
124+
}

src/Respimgcss/Application/Service/ImageCandidateSetValidator.php

-99
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
/**
4+
* responsive-images-css
5+
*
6+
* @category Jkphl
7+
* @package Jkphl\Respimgcss
8+
* @subpackage Jkphl\Respimgcss\Domain\Contract
9+
* @author Joschi Kuphal <[email protected]> / @jkphl
10+
* @copyright Copyright © 2018 Joschi Kuphal <[email protected]> / @jkphl
11+
* @license http://opensource.org/licenses/MIT The MIT License (MIT)
12+
*/
13+
14+
/***********************************************************************************
15+
* The MIT License (MIT)
16+
*
17+
* Copyright © 2018 Joschi Kuphal <[email protected]> / @jkphl
18+
*
19+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
20+
* this software and associated documentation files (the "Software"), to deal in
21+
* the Software without restriction, including without limitation the rights to
22+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
23+
* the Software, and to permit persons to whom the Software is furnished to do so,
24+
* subject to the following conditions:
25+
*
26+
* The above copyright notice and this permission notice shall be included in all
27+
* copies or substantial portions of the Software.
28+
*
29+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
31+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
32+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
33+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
34+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35+
***********************************************************************************/
36+
37+
namespace Jkphl\Respimgcss\Domain\Contract;
38+
39+
/**
40+
* Image candidate set interface
41+
*
42+
* @package Jkphl\Respimgcss
43+
* @subpackage Jkphl\Respimgcss\Domain\Contract
44+
*/
45+
interface ImageCandidateSetInterface extends \Iterator, \ArrayAccess, \Countable
46+
{
47+
48+
}

src/Respimgcss/Domain/Exceptions/InvalidArgumentException.php

+12-1
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,16 @@
4646
*/
4747
class InvalidArgumentException extends \InvalidArgumentException implements RespimgcssExceptionInterface
4848
{
49-
49+
/**
50+
* Invalid image candidate
51+
*
52+
* @var string
53+
*/
54+
const INVALID_IMAGE_CANDIDATE_STR = 'Invalid image candidate';
55+
/**
56+
* Invalid image candidate
57+
*
58+
* @var int
59+
*/
60+
const INVALID_IMAGE_CANDIDATE = 1522507099;
5061
}

0 commit comments

Comments
 (0)