PageClassResolver::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
c 0
b 0
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 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