PageClassResolver   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
eloc 18
c 1
b 0
f 0
dl 0
loc 43
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A exists() 0 3 1
A create() 0 18 3
A resolveName() 0 9 1
1
<?php
2
3
namespace Knp\FriendlyContexts\Page\Resolver;
4
5
use Behat\Mink\Session;
6
use Behat\Mink\Element\DocumentElement;
7
use Doctrine\Common\Inflector\Inflector;
8
9
class PageClassResolver
10
{
11
    private $namespace;
12
13
    public function __construct($namespace = '')
14
    {
15
        $this->namespace = $namespace;
16
    }
17
18
    public function exists($class)
19
    {
20
        return class_exists($class);
21
    }
22
23
    public function resolveName($name)
24
    {
25
        $class = sprintf(
26
            '%s\\%sPage',
27
            $this->namespace,
28
            ucfirst(Inflector::camelize(str_replace(' ', '_', $name)))
29
        );
30
31
        return $class;
32
    }
33
34
    public function create(Session $session, $class)
35
    {
36
        if (!$this->exists($class)) {
37
            throw new \InvalidArgumentException(sprintf(
38
                'The page class "%s" can not be resolved.',
39
                $class
40
            ));
41
        }
42
43
        $instance = new $class($session);
44
45
        if (!$instance instanceof DocumentElement) {
46
            throw new \InvalidArgumentException(
47
                'A page class must be an instance of Behat\Mink\Element\DocumentElement.'
48
            );
49
        }
50
51
        return $instance;
52
    }
53
}
54