Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add the possibility to filter on an UUID in the SearchBuilder #10

Merged
merged 1 commit into from
Mar 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,14 @@ Note that you can filter on contexts. By default if you have multiple filter for
$searchBuilder->contextCondition('OR');
```

You can also search a file by giving an uuid. If you do this king of search you don't need to filter by categories but you still can if you want.

Here is an example on how to search a file with it's uuid :

```php
$builder->uuid()->equal('bck1:30d6a8ed-f9cf-4a6d-a76e-04ec941d1f45');
```

### Upload a new file

You can upload a file instance with `Filer::upload($file, $flags)`:
Expand Down
7 changes: 5 additions & 2 deletions examples/search.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,24 @@
use Fei\ApiClient\Transport\BasicTransport;
use Fei\Service\Filer\Entity\File;

$filer = new Filer([Filer::OPTION_BASEURL => 'http://127.0.0.1:8020']);
$filer = new Filer([Filer::OPTION_BASEURL => 'http://10.7.0.1:8020']);

$filer->setTransport(new BasicTransport());

try {
$searchBuilder = new SearchBuilder();

$searchBuilder->category()->equal(File::CATEGORY_CLIENT);
$searchBuilder->category()->equal(File::CATEGORY_IMG);
$searchBuilder->category()->equal(File::CATEGORY_SUPPLIER);
$searchBuilder->context()->key('test 1')->equal('test 1');

$searchBuilder->context()->key('AAA')->equal('AAA');
$searchBuilder->context()->key('CCC')->equal('CCC');

$searchBuilder->contextCondition('OR');

$searchBuilder->uuid()->equal('bck1:30d6a8ed-f9cf-4a6d-a76e-04ec941d1f45');

$results = $filer->search($searchBuilder);

echo '<pre>';
Expand Down
58 changes: 58 additions & 0 deletions src/Builder/Fields/Uuid.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php
namespace Fei\Service\Filer\Client\Builder\Fields;

use Fei\Service\Filer\Client\Builder\SearchBuilder;

class Uuid
{
protected $builder;

public function __construct(SearchBuilder $builder)
{
$this->builder = $builder;
}

public function build($value)
{
$search = $this->builder->getParams();
$search['uuid'] = $value;

$this->builder->setParams($search);
}

/**
* Set the equal operator for the current filter
*
* @param $value
* @return $this
*/
public function equal($value)
{
$this->build("$value");

return $this;
}

/**
* Get Builder
*
* @return SearchBuilder
*/
public function getBuilder()
{
return $this->builder;
}

/**
* Set Builder
*
* @param SearchBuilder $builder
*
* @return $this
*/
public function setBuilder($builder)
{
$this->builder = $builder;
return $this;
}
}
11 changes: 11 additions & 0 deletions src/Builder/SearchBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
use Fei\Service\Filer\Client\Builder\Fields\Category;
use Fei\Service\Filer\Client\Builder\Fields\Context;
use Fei\Service\Filer\Client\Builder\Fields\Filename;
use Fei\Service\Filer\Client\Builder\Fields\Uuid;

class SearchBuilder
{
Expand All @@ -19,6 +20,16 @@ public function filename()
return new Filename($this);
}

/**
* Add a filter the the uuid field
*
* @return Uuid
*/
public function uuid()
{
return new Uuid($this);
}

/**
* Set the condition type for the contexts
*
Expand Down
45 changes: 45 additions & 0 deletions tests/unit/Builder/Fields/UuidTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php
namespace Tests\Fei\Service\Filer\Client\Builder\Fields;

use Codeception\Test\Unit;
use Codeception\Util\Stub;
use Fei\Service\Filer\Client\Builder\Fields\Category;
use Fei\Service\Filer\Client\Builder\Fields\Context;
use Fei\Service\Filer\Client\Builder\Fields\Filename;
use Fei\Service\Filer\Client\Builder\Fields\Uuid;
use Fei\Service\Filer\Client\Builder\OperatorBuilder;
use Fei\Service\Filer\Client\Builder\SearchBuilder;

class UuidTest extends Unit
{
public function testBuild()
{
$builder = new SearchBuilder();
$category = new Uuid($builder);

$category->build('fake');

$this->assertAttributeEquals([
'uuid' => 'fake',
], 'params', $builder);
}

public function testBuilderAccessors()
{
$searchBuilder = new SearchBuilder();
$uuid = new Uuid($searchBuilder);

$uuid->setBuilder($searchBuilder);
$this->assertEquals($uuid->getBuilder(), $searchBuilder);
$this->assertAttributeEquals($uuid->getBuilder(), 'builder', $uuid);
}

public function testEqual()
{
$uuid = Stub::make(Uuid::class, [
'build' => Stub::once()
]);

$this->assertEquals($uuid, $uuid->equal('fake-uuid'));
}
}