예제 #1
0
 /**
  * @param array $data
  * @return Option
  */
 public function extract($data)
 {
     $result = array();
     foreach ($data as $row) {
         $r = $this->innerExtractor->extract($row)->getOrElse(null);
         if ($r !== null) {
             $result[] = $r;
         }
     }
     return $result ? new Some($this->process($result)) : None::create();
 }
예제 #2
0
 /**
  * @param array $data
  * @return Option
  */
 public function extract($data)
 {
     try {
         $result = array();
         foreach ($this->extractors as $field => $extractor) {
             $result[$field] = $extractor->extract($data)->getOrThrow(new InvalidArgumentException());
         }
         return new Some($result);
     } catch (InvalidArgumentException $e) {
         return None::create();
     }
 }
예제 #3
0
 private function extractInner($path, $data)
 {
     if (!is_array($data)) {
         return None::create();
     }
     $key = array_shift($path);
     if (!array_key_exists($key, $data)) {
         return None::create();
     } elseif ($path) {
         return $this->extractInner($path, $data[$key]);
     } else {
         return new Some($data[$key]);
     }
 }
예제 #4
0
 /**
  * @test
  */
 public function shouldReturnNoneIfAnyExtractorReturnsNone()
 {
     $firstExtractor = new TestExtractor($this->anything(), None::create());
     $secondExtractor = new TestExtractor($this->anything(), null);
     $extractor = new CompositeExtractor($firstExtractor, $secondExtractor);
     $this->assertEquals(None::create(), $extractor->extract(array()));
     $firstExtractor->assertCalled();
     $secondExtractor->assertNotCalled();
     $firstExtractor = new TestExtractor($this->anything(), new Some(array()));
     $secondExtractor = new TestExtractor($this->anything(), None::create());
     $extractor = new CompositeExtractor($firstExtractor, $secondExtractor);
     $this->assertEquals(None::create(), $extractor->extract(array()));
     $firstExtractor->assertCalled();
     $secondExtractor->assertCalled();
 }
예제 #5
0
파일: NoneTest.php 프로젝트: ustream/option
 /**
  * @test
  * @return void
  */
 public function otherwiseTranslatesNoneForVoid()
 {
     $none = new None();
     $this->assertInstanceOf('\\Ustream\\Option\\None', $none->otherwise(function () {
     }));
 }
예제 #6
0
파일: Some.php 프로젝트: ustream/option
 /**
  * @param callable $predicate
  *
  * @return Option
  */
 public function filter($predicate)
 {
     return $predicate($this->value) ? $this : None::create();
 }
예제 #7
0
파일: ArrMapTest.php 프로젝트: ustream/arr
 /**
  * @test
  *
  * @param mixed $empty
  *
  * @dataProvider emptyOrInvalidValues
  *
  * @throws Exception
  * @return void
  */
 public function mapEmptyOrInvalidToNone($empty)
 {
     $this->assertEquals(None::create(), Arr::map($empty, function ($item) {
         throw new Exception();
     }));
 }
예제 #8
0
파일: Option.php 프로젝트: ustream/option
 /**
  * @param mixed $value
  * @param mixed $noneValue
  *
  * @return None|Some
  */
 public static function createFromValue($value, $noneValue = null)
 {
     return $value === $noneValue ? None::create() : new Some($value);
 }