Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
7 / 7 |
CRAP | |
100.00% |
24 / 24 |
| GraphContext | |
100.00% |
1 / 1 |
|
100.00% |
8 / 8 |
11 | |
100.00% |
24 / 24 |
| __construct(array $cfg, LoggerInterface $log) | |
100.00% |
1 / 1 |
2 | |
100.00% |
9 / 9 |
|||
| findVertex($type, $key) | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| existsVertex($type, $key) | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| findAllMethodSameName($method) | |
100.00% |
1 / 1 |
1 | ||||||
| anonymous function($val) use ($method) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| indicesVertex($type, $index, Vertex $v) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getExcludedCall($class, $method) | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
| logFallbackCall($class, $method, $called) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| <?php | |
| /* | |
| * Mondrian | |
| */ | |
| namespace Trismegiste\Mondrian\Transform; | |
| use Trismegiste\Mondrian\Graph\Graph; | |
| use Trismegiste\Mondrian\Graph\Vertex; | |
| use Trismegiste\Mondrian\Transform\Logger\LoggerInterface; | |
| /** | |
| * GraphContext is a context for building a graph. | |
| * Indexing the vertices by name | |
| */ | |
| class GraphContext | |
| { | |
| protected $vertex; | |
| protected $fineTuning; | |
| protected $buildLogger; | |
| /** | |
| * Build the context | |
| * | |
| * @param array $cfg the config | |
| * @param \Trismegiste\Mondrian\Transform\Logger\LoggerInterface $log a logger | |
| * @throws \InvalidArgumentException if config is invalid | |
| */ | |
| public function __construct(array $cfg, LoggerInterface $log) | |
| { | |
| if (!array_key_exists('calling', $cfg)) { | |
| throw new \InvalidArgumentException("No 'calling' key in the config param"); | |
| } | |
| $this->fineTuning = $cfg; | |
| $this->vertex = array('class' => array(), 'interface' => array(), | |
| 'method' => array(), 'impl' => array(), | |
| 'param' => array(), 'trait' => [] | |
| ); | |
| $this->buildLogger = $log; | |
| } | |
| /** | |
| * Find a vertex by its type and name | |
| * | |
| * @param string $type | |
| * @param string $key | |
| * | |
| * @return Vertex or null | |
| */ | |
| public function findVertex($type, $key) | |
| { | |
| if (array_key_exists($key, $this->vertex[$type])) { | |
| return $this->vertex[$type][$key]; | |
| } | |
| return null; | |
| } | |
| /** | |
| * Returns if a vertex of the type $type with the index $key exists | |
| * | |
| * @param string $type | |
| * @param string $key | |
| * | |
| * @return bool | |
| */ | |
| public function existsVertex($type, $key) | |
| { | |
| return array_key_exists($key, $this->vertex[$type]); | |
| } | |
| /** | |
| * Find all methods with the same name whatever its class | |
| * | |
| * @param string $method | |
| * | |
| * @return Vertex[] | |
| */ | |
| public function findAllMethodSameName($method) | |
| { | |
| return array_filter($this->vertex['method'], function($val) use ($method) { | |
| return preg_match("#::$method$#", $val->getName()); | |
| }); | |
| } | |
| /** | |
| * Maintains a hashmap : ( type , index ) => Vertex obj | |
| * | |
| * @param string $type [interface|class|method|param|impl|trait] | |
| * @param string $index the unique index in this type | |
| * @param Vertex $v the vertex to index | |
| */ | |
| public function indicesVertex($type, $index, Vertex $v) | |
| { | |
| $this->vertex[$type][$index] = $v; | |
| } | |
| /** | |
| * Get the list of excluded calls for this Class::Method | |
| * | |
| * @param string $class | |
| * @param string $method | |
| * | |
| * @return array list of excluded methods "fqcn::methodName" | |
| */ | |
| public function getExcludedCall($class, $method) | |
| { | |
| $ret = array(); | |
| if (array_key_exists("$class::$method", $this->fineTuning['calling'])) { | |
| $ret = $this->fineTuning['calling']["$class::$method"]['ignore']; | |
| } | |
| return $ret; | |
| } | |
| /** | |
| * Log a call found by the fallback | |
| * | |
| * @param string $class | |
| * @param string $method | |
| * @param string $called | |
| */ | |
| public function logFallbackCall($class, $method, $called) | |
| { | |
| $this->buildLogger->logCallTo("$class::$method", $called); | |
| } | |
| } |