Blame view

vendor/fzaninotto/faker/src/Faker/UniqueGenerator.php 1.29 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
  <?php
  
  namespace Faker;
  
  /**
   * Proxy for other generators, to return only unique values. Works with
   * Faker\Generator\Base->unique()
   */
  class UniqueGenerator
  {
      protected $generator;
      protected $maxRetries;
      protected $uniques = array();
  
      public function __construct(Generator $generator, $maxRetries)
      {
          $this->generator = $generator;
          $this->maxRetries = $maxRetries;
      }
  
      /**
       * Catch and proxy all generator calls but return only unique values
       */
      public function __get($attribute)
      {
          return $this->__call($attribute, array());
      }
  
      /**
       * Catch and proxy all generator calls with arguments but return only unique values
       */
      public function __call($name, $arguments)
      {
          if (!isset($this->uniques[$name])) {
              $this->uniques[$name] = array();
          }
          $i = 0;
          do {
              $res = call_user_func_array(array($this->generator, $name), $arguments);
              $i++;
              if ($i > $this->maxRetries) {
                  throw new \OverflowException(sprintf('Maximum retries of %d reached without finding a unique value', $this->maxRetries));
              }
          } while (array_key_exists($res, $this->uniques[$name]));
          $this->uniques[$name][$res]= null;
  
          return $res;
      }
  }