Blame view

vendor/phpunit/php-file-iterator/src/Factory.php 2.38 KB
ad2e91f7   Mihail   move multyparser ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  <?php
  /*
   * This file is part of the File_Iterator package.
   *
   * (c) Sebastian Bergmann <sebastian@phpunit.de>
   *
   * For the full copyright and license information, please view the LICENSE
   * file that was distributed with this source code.
   */
  
  /**
   * Factory Method implementation that creates a File_Iterator that operates on
   * an AppendIterator that contains an RecursiveDirectoryIterator for each given
   * path.
   *
   * @since     Class available since Release 1.1.0
   */
  class File_Iterator_Factory
  {
      /**
       * @param  array|string   $paths
       * @param  array|string   $suffixes
       * @param  array|string   $prefixes
       * @param  array          $exclude
       * @return AppendIterator
       */
      public function getFileIterator($paths, $suffixes = '', $prefixes = '', array $exclude = array())
      {
          if (is_string($paths)) {
              $paths = array($paths);
          }
  
          $paths   = $this->getPathsAfterResolvingWildcards($paths);
          $exclude = $this->getPathsAfterResolvingWildcards($exclude);
  
          if (is_string($prefixes)) {
              if ($prefixes != '') {
                  $prefixes = array($prefixes);
              } else {
                  $prefixes = array();
              }
          }
  
          if (is_string($suffixes)) {
              if ($suffixes != '') {
                  $suffixes = array($suffixes);
              } else {
                  $suffixes = array();
              }
          }
  
          $iterator = new AppendIterator;
  
          foreach ($paths as $path) {
              if (is_dir($path)) {
                  $iterator->append(
                    new File_Iterator(
                      new RecursiveIteratorIterator(
                        new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::FOLLOW_SYMLINKS)
                      ),
                      $suffixes,
                      $prefixes,
                      $exclude,
                      $path
                    )
                  );
              }
          }
  
          return $iterator;
      }
  
      /**
       * @param  array $paths
       * @return array
       */
      protected function getPathsAfterResolvingWildcards(array $paths)
      {
          $_paths = array();
  
          foreach ($paths as $path) {
              if ($locals = glob($path, GLOB_ONLYDIR)) {
                  $_paths = array_merge($_paths, $locals);
              } else {
                  $_paths[] = $path;
              }
          }
  
          return $_paths;
      }
  }