Skip to content

Commit afbc1ae

Browse files
author
Petr Buchyn
committed
Composition replaced with inheritance for write models
1 parent a7c4ec2 commit afbc1ae

15 files changed

+45
-161
lines changed

src/Collection.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
use MongoDB\Driver\ReadConcern;
88
use MongoDB\Driver\ReadPreference;
99
use MongoDB\Driver\WriteConcern;
10-
use Tequila\MongoDB\OptionsResolver\BulkWrite\UpdateDocumentResolver;
1110
use Tequila\MongoDB\OptionsResolver\CollectionOptionsResolver;
1211
use Tequila\MongoDB\OptionsResolver\Command\FindOneAndDeleteResolver;
1312
use Tequila\MongoDB\OptionsResolver\Command\FindOneAndUpdateResolver;
@@ -429,7 +428,7 @@ public function findOneAndReplace(array $filter, $replacement, array $options =
429428
*/
430429
public function findOneAndUpdate(array $filter, array $update, array $options = [])
431430
{
432-
UpdateDocumentResolver::resolveStatic($update);
431+
\Tequila\MongoDB\ensureValidUpdate($update);
433432

434433
$options = ['update' => (object) $update] + FindOneAndUpdateResolver::resolveStatic($options);
435434

src/OptionsResolver/BulkWrite/DeleteResolver.php renamed to src/OptionsResolver/BulkWrite/DeleteOptionsResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use Tequila\MongoDB\OptionsResolver\Configurator\CollationConfigurator;
66
use Tequila\MongoDB\OptionsResolver\OptionsResolver;
77

8-
class DeleteResolver extends OptionsResolver
8+
class DeleteOptionsResolver extends OptionsResolver
99
{
1010
protected function configureOptions()
1111
{

src/OptionsResolver/BulkWrite/UpdateDocumentResolver.php

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

src/OptionsResolver/BulkWrite/UpdateResolver.php renamed to src/OptionsResolver/BulkWrite/UpdateOptionsResolver.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use Tequila\MongoDB\OptionsResolver\Configurator\CollationConfigurator;
66
use Tequila\MongoDB\OptionsResolver\OptionsResolver;
77

8-
class UpdateResolver extends OptionsResolver
8+
class UpdateOptionsResolver extends OptionsResolver
99
{
1010
protected function configureOptions()
1111
{
@@ -16,7 +16,8 @@ protected function configureOptions()
1616
'multi',
1717
]);
1818

19-
$this->setAllowedTypes('upsert', 'bool');
20-
$this->setAllowedTypes('multi', 'bool');
19+
$this
20+
->setAllowedTypes('upsert', 'bool')
21+
->setAllowedTypes('multi', 'bool');
2122
}
2223
}

src/OptionsResolver/ReadWriteOptionsResolver.php

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

src/Write/Model/Delete.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Tequila\MongoDB\Write\Model;
44

55
use Tequila\MongoDB\BulkWrite;
6-
use Tequila\MongoDB\OptionsResolver\BulkWrite\DeleteResolver;
6+
use Tequila\MongoDB\OptionsResolver\BulkWrite\DeleteOptionsResolver;
77
use Tequila\MongoDB\WriteModelInterface;
88

99
class Delete implements WriteModelInterface
@@ -25,7 +25,7 @@ class Delete implements WriteModelInterface
2525
public function __construct(array $filter, array $options = [])
2626
{
2727
$this->filter = $filter;
28-
$this->options = DeleteResolver::resolveStatic($options);
28+
$this->options = DeleteOptionsResolver::resolveStatic($options);
2929
}
3030

3131
/**

src/Write/Model/DeleteMany.php

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

33
namespace Tequila\MongoDB\Write\Model;
44

5-
use Tequila\MongoDB\Write\Model\Traits\BulkDeleteTrait;
6-
use Tequila\MongoDB\WriteModelInterface;
7-
8-
class DeleteMany implements WriteModelInterface
5+
class DeleteMany extends Delete
96
{
10-
use BulkDeleteTrait;
11-
127
/**
138
* @param array $filter
149
* @param array $options
1510
*/
1611
public function __construct(array $filter, array $options = [])
1712
{
1813
$options = ['limit' => 0] + $options;
19-
$this->delete = new Delete($filter, $options);
14+
parent::__construct($filter, $options);
2015
}
2116
}

src/Write/Model/DeleteOne.php

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

33
namespace Tequila\MongoDB\Write\Model;
44

5-
use Tequila\MongoDB\Write\Model\Traits\BulkDeleteTrait;
6-
use Tequila\MongoDB\WriteModelInterface;
7-
8-
class DeleteOne implements WriteModelInterface
5+
class DeleteOne extends Delete
96
{
10-
use BulkDeleteTrait;
11-
127
/**
138
* @param array $filter
149
* @param array $options
1510
*/
1611
public function __construct(array $filter, array $options = [])
1712
{
1813
$options = ['limit' => 1] + $options;
19-
$this->delete = new Delete($filter, $options);
14+
parent::__construct($filter, $options);
2015
}
2116
}

src/Write/Model/ReplaceOne.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,9 @@
33
namespace Tequila\MongoDB\Write\Model;
44

55
use Tequila\MongoDB\Exception\InvalidArgumentException;
6-
use Tequila\MongoDB\Write\Model\Traits\BulkUpdateTrait;
7-
use function Tequila\MongoDB\ensureValidDocument;
8-
use Tequila\MongoDB\WriteModelInterface;
96

10-
class ReplaceOne implements WriteModelInterface
7+
class ReplaceOne extends Update
118
{
12-
use BulkUpdateTrait;
13-
149
/**
1510
* @param $filter
1611
* @param array|object $replacement
@@ -28,14 +23,15 @@ public function __construct(array $filter, $replacement, array $options = [])
2823
}
2924

3025
try {
31-
ensureValidDocument($replacement);
26+
\Tequila\MongoDB\ensureValidDocument($replacement);
3227
} catch (InvalidArgumentException $e) {
3328
throw new InvalidArgumentException(
3429
sprintf('Invalid $replacement document: %s', $e->getMessage())
3530
);
3631
}
3732

3833
$options = ['multi' => false] + $options;
39-
$this->update = new Update($filter, $replacement, $options);
34+
35+
parent::__construct($filter, $replacement, $options);
4036
}
4137
}

src/Write/Model/Traits/BulkDeleteTrait.php

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

src/Write/Model/Traits/BulkUpdateTrait.php

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

src/Write/Model/Update.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Tequila\MongoDB\Write\Model;
44

55
use Tequila\MongoDB\BulkWrite;
6-
use Tequila\MongoDB\OptionsResolver\BulkWrite\UpdateResolver;
6+
use Tequila\MongoDB\OptionsResolver\BulkWrite\UpdateOptionsResolver;
77
use Tequila\MongoDB\WriteModelInterface;
88

99
class Update implements WriteModelInterface
@@ -32,7 +32,7 @@ public function __construct(array $filter, $update, array $options = [])
3232
{
3333
$this->filter = $filter;
3434
$this->update = $update;
35-
$this->options = UpdateResolver::resolveStatic($options);
35+
$this->options = UpdateOptionsResolver::resolveStatic($options);
3636
}
3737

3838
/**

src/Write/Model/UpdateMany.php

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,18 @@
22

33
namespace Tequila\MongoDB\Write\Model;
44

5-
use Tequila\MongoDB\OptionsResolver\BulkWrite\UpdateDocumentResolver;
6-
use Tequila\MongoDB\Write\Model\Traits\BulkUpdateTrait;
7-
use Tequila\MongoDB\WriteModelInterface;
8-
9-
class UpdateMany implements WriteModelInterface
5+
class UpdateMany extends Update
106
{
11-
use BulkUpdateTrait;
12-
137
/**
148
* @param array $filter
159
* @param array $update
1610
* @param array $options
1711
*/
1812
public function __construct(array $filter, array $update, array $options = [])
1913
{
20-
$update = UpdateDocumentResolver::resolveStatic($update);
14+
\Tequila\MongoDB\ensureValidUpdate($update);
2115
$options = ['multi' => true] + $options;
2216

23-
$this->update = new Update($filter, $update, $options);
17+
parent::__construct($filter, $update, $options);
2418
}
2519
}

src/Write/Model/UpdateOne.php

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,18 @@
22

33
namespace Tequila\MongoDB\Write\Model;
44

5-
use Tequila\MongoDB\OptionsResolver\BulkWrite\UpdateDocumentResolver;
6-
use Tequila\MongoDB\Write\Model\Traits\BulkUpdateTrait;
7-
use Tequila\MongoDB\WriteModelInterface;
8-
9-
class UpdateOne implements WriteModelInterface
5+
class UpdateOne extends Update
106
{
11-
use BulkUpdateTrait;
12-
137
/**
148
* @param array $filter
159
* @param array $update
1610
* @param array $options
1711
*/
1812
public function __construct(array $filter, array $update, array $options = [])
1913
{
20-
$update = UpdateDocumentResolver::resolveStatic($update);
14+
\Tequila\MongoDB\ensureValidUpdate($update);
2115
$options = ['multi' => false] + $options;
2216

23-
$this->update = new Update($filter, $update, $options);
17+
parent::__construct($filter, $update, $options);
2418
}
2519
}

src/functions.php

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,28 @@ function ensureValidDocument($document)
2525
}
2626

2727
$arrayDocument = (array) $document;
28+
$firstFieldName = key($arrayDocument);
29+
if (!preg_match('/^[^$][^\.]*$/', $firstFieldName)) {
30+
throw new InvalidArgumentException(
31+
sprintf(
32+
'Invalid field name "%s": field names cannot start with a dollar sign ("$") and cannot contain dots.',
33+
$firstFieldName
34+
)
35+
);
36+
}
37+
}
38+
39+
function ensureValidUpdate(array $update)
40+
{
41+
$firstOperator = key($update);
2842

29-
foreach ($arrayDocument as $fieldName => $value) {
30-
if (!preg_match('/^[^$][^\.]*$/', $fieldName)) {
31-
throw new InvalidArgumentException(
32-
sprintf(
33-
'Invalid field name "%s": field names cannot start with a dollar sign ("$") and cannot contain dots.',
34-
$fieldName
35-
)
36-
);
37-
}
43+
if ('$' !== substr($firstOperator, 0, 1)) {
44+
throw new InvalidArgumentException(
45+
sprintf(
46+
'Invalid $update document: first key "%s" is not an update operator.',
47+
$firstOperator
48+
)
49+
);
3850
}
3951
}
4052

0 commit comments

Comments
 (0)