1: <?php
2:
3: namespace PHPixie\Processors\Processor;
4:
5: abstract class Dispatcher implements Selective
6: {
7: public function process($value)
8: {
9: $processor = $this->getProcessorFor($value);
10: if($processor === null) {
11: throw new \PHPixie\Processors\Exception("No processor found for value");
12: }
13:
14: return $processor->process($value);
15: }
16:
17: public function isProcessable($value)
18: {
19: $processor = $this->getProcessorFor($value);
20: return $processor !== null;
21: }
22:
23: protected function getProcessorFor($value)
24: {
25: $name = $this->getProcessorNameFor($value);
26: if($name === null) {
27: return null;
28: }
29:
30: $processor = $this->processor($name);
31: if($processor instanceof Selective) {
32: if(!$processor->isProcessable($value)) {
33: return null;
34: }
35: }
36:
37: return $processor;
38: }
39:
40: abstract public function processor($name);
41: abstract protected function getProcessorNameFor($value);
42: }