Skip to content

Commit 6836c16

Browse files
committed
Write models refactoring
1 parent 3628ba0 commit 6836c16

11 files changed

+66
-121
lines changed

src/Cursor.php

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/Options/Traits/CachedResolverTrait.php

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,41 @@
22

33
namespace Tequilla\MongoDB\Options\Traits;
44

5+
use Symfony\Component\OptionsResolver\Exception\InvalidArgumentException as OptionsResolverException;
56
use Symfony\Component\OptionsResolver\OptionsResolver;
7+
use Tequilla\MongoDB\Exception\InvalidArgumentException;
68

79
trait CachedResolverTrait
810
{
11+
/**
12+
* @var OptionsResolver
13+
*/
914
private static $cachedResolver;
1015

11-
public static function getCachedResolver()
16+
/**
17+
* @param array $options
18+
* @return array
19+
*/
20+
public static function resolve(array $options)
21+
{
22+
try {
23+
return self::getCachedResolver()->resolve($options);
24+
} catch (OptionsResolverException $e) {
25+
throw new InvalidArgumentException($e->getMessage());
26+
}
27+
}
28+
29+
/**
30+
* @param OptionsResolver $resolver
31+
*/
32+
public static function configureOptions(OptionsResolver $resolver)
33+
{
34+
}
35+
36+
/**
37+
* @return OptionsResolver
38+
*/
39+
private static function getCachedResolver()
1240
{
1341
if (!self::$cachedResolver) {
1442
self::$cachedResolver = new OptionsResolver();
@@ -17,8 +45,4 @@ public static function getCachedResolver()
1745

1846
return self::$cachedResolver;
1947
}
20-
21-
public static function configureOptions(OptionsResolver $resolver)
22-
{
23-
}
2448
}

src/Write/Bulk/BulkWrite.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ class BulkWrite
4343
* @param \Tequilla\MongoDB\Write\Model\WriteModelInterface[] $requests
4444
* @param array $options
4545
*/
46-
public function __construct($requests, array $options)
46+
public function __construct($requests, array $options = [])
4747
{
4848
$this->requests = $requests;
49-
$this->options = BulkWriteOptions::getCachedResolver()->resolve($options);
49+
$this->options = BulkWriteOptions::resolve($options);
5050

5151
if (isset($this->options['writeConcern'])) {
5252
$this->writeConcern = $this->options['writeConcern'];
@@ -127,10 +127,10 @@ public function execute(Connection $connection, $databaseName, $collectionName)
127127
if (!$request instanceof WriteModelInterface) {
128128
throw new InvalidArgumentException(
129129
sprintf(
130-
'Every request in $requests must be an instance of %s, %s given in $requests[%d]',
130+
'$requests[%d] must be an instance of %s, %s given',
131+
$i,
131132
WriteModelInterface::class,
132-
TypeUtils::getType($request),
133-
$i
133+
TypeUtils::getType($request)
134134
)
135135
);
136136
}

src/Write/Model/DeleteOne.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Tequilla\MongoDB\Write\Model;
44

5-
use Tequilla\MongoDB\Write\Options\DeleteOneOptions;
5+
use Tequilla\MongoDB\Write\Options\DeleteOptions;
66

77
class DeleteOne implements WriteModelInterface
88
{
@@ -18,6 +18,6 @@ public function __construct($filter, array $options = [])
1818
$this->ensureValidFilter($filter);
1919

2020
$this->filter = $filter;
21-
$this->options = DeleteOneOptions::getCachedResolver()->resolve($options);
21+
$this->options = DeleteOptions::->resolve($options);
2222
}
2323
}

src/Write/Model/ReplaceOne.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use Tequilla\MongoDB\Exception\InvalidArgumentException;
66
use Tequilla\MongoDB\Util\TypeUtils;
77
use Tequilla\MongoDB\Write\Bulk\BulkWrite;
8-
use Tequilla\MongoDB\Write\Options\ReplaceOneOptions;
8+
use Tequilla\MongoDB\Write\Options\UpdateOptions;
99

1010
class ReplaceOne implements WriteModelInterface
1111
{
@@ -46,9 +46,16 @@ public function __construct($filter, $replacement, array $options = [])
4646

4747
$this->ensureValidDocument($replacement);
4848

49+
$options = UpdateOptions::resolve($options);
50+
if (isset($options['multi']) && $options['multi']) {
51+
throw new InvalidArgumentException(
52+
'ReplaceOne operation does not allow option "multi" to be true'
53+
);
54+
}
55+
4956
$this->filter = $filter;
5057
$this->replacement = $replacement;
51-
$this->options = ReplaceOneOptions::getCachedResolver()->resolve($options);
58+
$this->options = $options;
5259
}
5360

5461
public function writeToBulk(BulkWrite $bulk)

src/Write/Model/Update.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ class Update implements WriteModelInterface
88
{
99
use Traits\EnsureValidFilterTrait;
1010
use Traits\BulkUpdateTrait;
11-
use Traits\EnsureValidUpdateTrait;
1211

1312
/**
1413
* @param array|object $filter
@@ -20,6 +19,6 @@ public function __construct($filter, $update, array $options = [])
2019
$this->ensureValidFilter($filter);
2120
$this->filter = $filter;
2221
$this->update = $update;
23-
$this->options = UpdateOptions::getCachedResolver()->resolve($options);
22+
$this->options = UpdateOptions::resolve($options);
2423
}
2524
}

src/Write/Model/UpdateMany.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
namespace Tequilla\MongoDB\Write\Model;
44

5-
use Tequilla\MongoDB\Write\Options\UpdateManyOptions;
5+
use Tequilla\MongoDB\Exception\InvalidArgumentException;
6+
use Tequilla\MongoDB\Write\Options\UpdateOptions;
67

78
class UpdateMany implements WriteModelInterface
89
{
910
use Traits\EnsureValidFilterTrait;
1011
use Traits\EnsureValidUpdateTrait;
1112
use Traits\BulkUpdateTrait;
12-
use Traits\EnsureValidUpdateTrait;
1313

1414
/**
1515
* Update constructor.
@@ -22,8 +22,15 @@ public function __construct($filter, $update, array $options = [])
2222
$this->ensureValidFilter($filter);
2323
$this->ensureValidUpdate($update);
2424

25+
$options = UpdateOptions::resolve($options);
26+
if (isset($options['multi']) && !$options['multi']) {
27+
throw new InvalidArgumentException(
28+
'UpdateMany operation does not allow option "multi" to be false'
29+
);
30+
}
31+
2532
$this->filter = $filter;
2633
$this->update = $update;
27-
$this->options = UpdateManyOptions::getCachedResolver()->resolve($options);
34+
$this->options = $options;
2835
}
2936
}

src/Write/Model/UpdateOne.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
namespace Tequilla\MongoDB\Write\Model;
44

5-
use Tequilla\MongoDB\Write\Options\UpdateOneOptions;
5+
use Tequilla\MongoDB\Exception\InvalidArgumentException;
6+
use Tequilla\MongoDB\Write\Options\UpdateOptions;
67

78
class UpdateOne implements WriteModelInterface
89
{
910
use Traits\EnsureValidFilterTrait;
1011
use Traits\EnsureValidUpdateTrait;
1112
use Traits\BulkUpdateTrait;
12-
use Traits\EnsureValidUpdateTrait;
1313

1414
/**
1515
* Update constructor.
@@ -22,8 +22,15 @@ public function __construct($filter, $update, array $options = [])
2222
$this->ensureValidFilter($filter);
2323
$this->ensureValidUpdate($update);
2424

25+
$options = UpdateOptions::resolve($options);
26+
if (isset($options['multi']) && $options['multi']) {
27+
throw new InvalidArgumentException(
28+
'UpdateOne operation does not allow option "multi" to be true'
29+
);
30+
}
31+
2532
$this->filter = $filter;
2633
$this->update = $update;
27-
$this->options = UpdateOneOptions::getCachedResolver()->resolve($options);
34+
$this->options = $options;
2835
}
2936
}

src/Write/Options/ReplaceOneOptions.php

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/Write/Options/UpdateManyOptions.php

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/Write/Options/UpdateOneOptions.php

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)