Completed
Push — work-fleets ( 4ec5b3...fe2ede )
by SuperNova.WS
10:06
created

Accessors::haveAccessor()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 3
rs 10
c 3
b 0
f 0
ccs 0
cts 2
cp 0
crap 2
1
<?php
2
/**
3
 * Created by Gorlum 19.08.2016 20:35
4
 */
5
6
namespace Common;
7
8
/**
9
 * Accessors storage
10
 *
11
 * TODO - make magic method access to accessors ????????
12
 *
13
 * @package Common
14
 */
15
class Accessors {
16
17
  /**
18
   * Array of accessors - getters/setters/etc
19
   *
20
   * @var callable[][]
21
   */
22
  protected $accessors = array();
23
24
  /**
25
   * Assign accessor to a named variable
26
   *
27
   * Different accessors have different signatures - you should look carefully before assigning accessor
28
   *
29
   * @param string   $varName
30
   * @param string   $accessor - type of accessor getter/setter/importer/exporter/etc
31
   * @param callable $callable
32
   *
33
   * @throws \Exception
34
   */
35
  public function setAccessor($varName, $accessor, $callable) {
36
    if (empty($callable)) {
37
      return;
38
    }
39
40
    if (is_callable($callable)) {
41
      $this->accessors[$varName][$accessor] = $callable;
42
    } else {
43
      throw new \Exception('Error assigning callable in ' . get_called_class() . '! Callable typed [' . $accessor . '] is not a callable or not accessible in the scope');
44
    }
45
  }
46
47
  /**
48
   * Gets accessor for later use
49
   *
50
   * @param string $varName
51
   * @param string $accessor
52
   *
53
   * @return callable|null
54
   */
55
  public function getAccessor($varName, $accessor) {
56
    return isset($this->accessors[$varName][$accessor]) ? $this->accessors[$varName][$accessor] : null;
57
  }
58
59
  /**
60
   * @param string $varName
61
   * @param string $accessor
62
   *
63
   * @return bool
64
   */
65
  public function haveAccessor($varName, $accessor) {
66
    return isset($this->accessors[$varName][$accessor]);
67
  }
68
69
  /**
70
   * @param string $varName
71
   * @param string $accessor
72
   * @param array  $params
73
   *
74
   * @return mixed
75
   * @throws \Exception
76
   */
77
  public function invokeAccessor($varName, $accessor, $params) {
78
    if (!$this->haveAccessor($varName, $accessor)) {
79
      throw new \Exception("No [{$accessor}] accessor found for variable [{$varName}] on " . get_called_class() . "::" . __METHOD__);
80
    }
81
82
    return call_user_func_array($this->getAccessor($varName, $accessor), $params);
83
  }
84
85
}
86