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

Search   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 70
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 95.24%

Importance

Changes 6
Bugs 3 Features 3
Metric Value
wmc 8
c 6
b 3
f 3
lcom 1
cbo 4
dl 0
loc 70
ccs 20
cts 21
cp 0.9524
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A setDirection() 0 9 3
B process() 0 28 5
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
  }