Completed
Push — master ( 5844c1...ab7dfd )
by Shcherbak
02:28
created

Search::process()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 28
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 5.0061

Importance

Changes 3
Bugs 2 Features 2
Metric Value
c 3
b 2
f 2
dl 0
loc 28
ccs 15
cts 16
cp 0.9375
rs 8.439
cc 5
eloc 16
nc 5
nop 2
crap 5.0061
1
<?php
2
3
  namespace Funivan\PhpTokenizer\Strategy;
4
5
  use Funivan\PhpTokenizer\Exception\InvalidArgumentException;
6
7
  /**
8
   *
9
   * @package Funivan\PhpTokenizer\Query\Strategy
10
   */
11
  class Search extends QueryStrategy {
12
13
    /**
14
     * Move forward flag
15
     *
16
     * @var int
17
     */
18
    const FORWARD = 1;
19
20
    /**
21
     * Move backward flag
22
     *
23
     * @var int
24
     */
25
    const BACKWARD = -1;
26
27
    /**
28
     * @var int
29
     */
30
    protected $direction = 1;
31
32
33
    /**
34
     * @inheritdoc
35
     */
36 52
    public function process(\Funivan\PhpTokenizer\Collection $collection, $currentIndex) {
37
38 46
      $result = new StrategyResult();
39
40
      # getProcessor while we can check toke
41
42 52
      $index = $currentIndex;
43 52
      $searchForward = ($this->direction === static::FORWARD);
44
45
      do {
46
47 46
        $token = $collection->offsetGet($index);
48 47
        if ($token === null) {
49
          return $result;
50
        }
51 47
        $index = $searchForward ? ++$index : --$index;
52
53 46
        if ($this->isValid($token)) {
54 46
          $result->setNexTokenIndex($index);
55 46
          $result->setValid(true);
56 46
          $result->setToken($token);
57 52
          break;
58
        }
59
60 47
      } while (!empty($token));
61
62 52
      return $result;
63 6
    }
64
65
66
    /**
67
     * @param int $direction
68
     * @return $this
69
     */
70 5
    public function setDirection($direction) {
71
72 5
      if ($direction !== static::FORWARD and $direction !== static::BACKWARD) {
73 2
        throw new InvalidArgumentException('Invalid direction option');
74
      }
75
76 2
      $this->direction = $direction;
77 2
      return $this;
78
    }
79
80
  }