Completed
Push — refactor-04-parser-tests ( bd4663...403d11 )
by John
02:57
created

FieldParserFactory   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Test Coverage

Coverage 88%

Importance

Changes 0
Metric Value
wmc 8
lcom 0
cbo 1
dl 0
loc 41
ccs 22
cts 25
cp 0.88
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
C getFieldParser() 0 34 8
1
<?php
2
3
namespace Graze\CiffRenderer\Parser\FieldParser;
4
5
use Graze\CiffRenderer\Parser\SimpleXmlElement\SimpleXmlElementInterface;
6
use Graze\CiffRenderer\Parser\FieldType;
7
use Graze\CiffRenderer\Parser\FieldParser\FieldParserFixedText;
8
use Graze\CiffRenderer\Parser\FieldParser\FieldParserBarcode;
9
use Graze\CiffRenderer\Parser\FieldParser\FieldParserDate;
10
use Graze\CiffRenderer\Parser\FieldParser\FieldParserDateOffset;
11
use Graze\CiffRenderer\Parser\FieldParser\FieldParserStaticGraphic;
12
use Graze\CiffRenderer\Parser\FieldParser\FieldParserGraphicPrimitive;
13
use Graze\CiffRenderer\Exception\UnsupportedFieldTypeException;
14
15
class FieldParserFactory
16
{
17
    /**
18
     * @param SimpleXmlElementInterface $xml
19
     * @return FieldParserInterface
20
     */
21 7
    public function getFieldParser(SimpleXmlElementInterface $xml)
22
    {
23 7
        switch ((string) $xml->FldType) { // @codingStandardsIgnoreLine
0 ignored issues
show
Bug introduced by
Accessing FldType on the interface Graze\CiffRenderer\Parse...mpleXmlElementInterface suggest that you code against a concrete implementation. How about adding an instanceof check?

If you access a property on an interface, you most likely code against a concrete implementation of the interface.

Available Fixes

  1. Adding an additional type check:

    interface SomeInterface { }
    class SomeClass implements SomeInterface {
        public $a;
    }
    
    function someFunction(SomeInterface $object) {
        if ($object instanceof SomeClass) {
            $a = $object->a;
        }
    }
    
  2. Changing the type hint:

    interface SomeInterface { }
    class SomeClass implements SomeInterface {
        public $a;
    }
    
    function someFunction(SomeClass $object) {
        $a = $object->a;
    }
    
Loading history...
24 7
            case FieldType::FIELD_FIXED_TEXT:
25 7
            case FieldType::FIELD_MERGE_FIELD:
26 2
                $className = FieldParserFixedText::class;
27 2
                break;
28
29 5
            case FieldType::FIELD_BARCODE:
30 1
                $className = FieldParserBarcode::class;
31 1
                break;
32
33 4
            case FieldType::FIELD_DATE:
34 1
                $className = FieldParserDate::class;
35 1
                break;
36
37 3
            case FieldType::FIELD_OFFSET_DATE:
38 1
                $className = FieldParserDateOffset::class;
39 1
                break;
40
41 2
            case FieldType::FIELD_STATIC_GRAPHIC:
42 1
                $className = FieldParserStaticGraphic::class;
43 1
                break;
44
45 1
            case FieldType::FIELD_GRAPHIC_PRIMITIVE:
46 1
                $className = FieldParserGraphicPrimitive::class;
47 1
                break;
48
49
            default:
50
                throw new UnsupportedFieldTypeException($fieldType);
51
        }
52
53 7
        return $className::factory();
54
    }
55
}
56