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

Search::setDirection()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 9
ccs 5
cts 5
cp 1
rs 9.6666
cc 3
eloc 5
nc 2
nop 1
crap 3
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
  }