Completed
Branch develop (22789e)
by Mariano
08:33
created

AnnotationParserFactory   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 23
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 3
c 2
b 0
f 0
lcom 1
cbo 0
dl 0
loc 23
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A getAnnotationParserFor() 0 9 3
1
<?php
2
namespace Mcustiel\SimpleRequest\Strategies;
3
4
use Mcustiel\SimpleRequest\Annotation\RequestAnnotation;
5
use Mcustiel\SimpleRequest\Annotation\ValidatorAnnotation;
6
use Mcustiel\SimpleRequest\Annotation\FilterAnnotation;
7
use Mcustiel\SimpleRequest\Annotation\ParseAs;
8
use Mcustiel\SimpleRequest\Strategies\Annotations\ValidatorAnnotationParser;
9
use Mcustiel\SimpleRequest\Strategies\Annotations\FilterAnnotationParser;
10
use Mcustiel\SimpleRequest\Strategies\Annotations\ParseAsAnnotationParser;
11
12
class AnnotationParserFactory
13
{
14
    private $map = [
15
        ValidatorAnnotation::class => ValidatorAnnotationParser::class,
16
        FilterAnnotation::class => FilterAnnotationParser::class,
17
        ParseAs::class => ParseAsAnnotationParser::class,
18
    ];
19
20
    /**
21
     * @param RequestAnnotation $annotation
22
     * @throws \Exception
23
     * @return \Mcustiel\SimpleRequest\Strategies\Annotations\AnnotationParser
24
     */
25
    public function getAnnotationParserFor(RequestAnnotation $annotation)
26
    {
27
        foreach ($this->map as $key => $val) {
28
            if ($annotation instanceof  $key) {
29
                return new $val;
30
            }
31
        }
32
        throw new \Exception('Unsupported annotation: ' . get_class($annotation));
33
    }
34
}
35