Completed
Push — refactor-04-parser-tests ( dc4950...bd4663 )
by John
06:06
created

FieldParserFactory::getFieldParser()   C

Complexity

Conditions 8
Paths 8

Size

Total Lines 35
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 22
CRAP Score 8.0368

Importance

Changes 0
Metric Value
dl 0
loc 35
ccs 22
cts 24
cp 0.9167
rs 5.3846
c 0
b 0
f 0
cc 8
eloc 25
nc 8
nop 1
crap 8.0368
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 6
            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
                break;
0 ignored issues
show
Unused Code introduced by
break; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
52
        }
53
54 7
        return $className::factory();
55
    }
56
}
57