Fleshing out a bit further
This commit is contained in:
14
.editorconfig
Normal file
14
.editorconfig
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# This is the top-most .editorconfig file; do not search in parent directories.
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# All files.
|
||||||
|
[*]
|
||||||
|
end_of_line = LF
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[Makefile]
|
||||||
|
indent_style = tab
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
/vendor
|
/vendor
|
||||||
composer.lock
|
composer.lock
|
||||||
|
.phpunit.result.cache
|
||||||
|
|||||||
@@ -9,11 +9,21 @@
|
|||||||
"doctrine/orm": "^2.12",
|
"doctrine/orm": "^2.12",
|
||||||
"symfony/framework-bundle": "*"
|
"symfony/framework-bundle": "*"
|
||||||
},
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"vimeo/psalm": "^4.24",
|
||||||
|
"psalm/plugin-symfony": "^3.1",
|
||||||
|
"phpunit/phpunit": "^9.5"
|
||||||
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Pcm\\SearchBundle\\": "src/"
|
"Pcm\\SearchBundle\\": "src/"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"Pcm\\SearchBundle\\": "tests/"
|
||||||
|
}
|
||||||
|
},
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Matt Feeny",
|
"name": "Matt Feeny",
|
||||||
@@ -23,9 +33,5 @@
|
|||||||
"name": "Bradley Goode",
|
"name": "Bradley Goode",
|
||||||
"email": "bg@pcmsystems.co.uk"
|
"email": "bg@pcmsystems.co.uk"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"require-dev": {
|
|
||||||
"vimeo/psalm": "^4.24",
|
|
||||||
"psalm/plugin-symfony": "^3.1"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
4
config/services.yaml
Normal file
4
config/services.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
services:
|
||||||
|
Pcm\SearchBundle\EventSubscriber\SearchableSubscriber:
|
||||||
|
tags:
|
||||||
|
- { name: doctrine.event_subscriber }
|
||||||
13
phpunit.xml
Normal file
13
phpunit.xml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<phpunit colors="true" bootstrap="vendor/autoload.php">
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="Test Suite">
|
||||||
|
<directory suffix="Test.php">./tests/</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
|
<filter>
|
||||||
|
<whitelist>
|
||||||
|
<directory>./src</directory>
|
||||||
|
</whitelist>
|
||||||
|
</filter>
|
||||||
|
</phpunit>
|
||||||
@@ -14,7 +14,14 @@ class SearchService
|
|||||||
{
|
{
|
||||||
public function __construct(private EntityManagerInterface $em) {}
|
public function __construct(private EntityManagerInterface $em) {}
|
||||||
|
|
||||||
public function index($entity)
|
/**
|
||||||
|
* Given an $entity that implements SearchableInterface, this method
|
||||||
|
* creates or updates a SearchIndex $entity
|
||||||
|
*
|
||||||
|
* @param SearchableInterface $entity
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index(SearchableInterface $entity)
|
||||||
{
|
{
|
||||||
$searchIndex = $this->createSearchResult($entity);
|
$searchIndex = $this->createSearchResult($entity);
|
||||||
|
|
||||||
@@ -22,7 +29,14 @@ class SearchService
|
|||||||
$this->em->flush();
|
$this->em->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function unIndex($entity)
|
/**
|
||||||
|
* Given an $entity that implements SearchableInterface, this method removes
|
||||||
|
* the item from the search index
|
||||||
|
*
|
||||||
|
* @param SearchableInterface $entity
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function unIndex(SearchableInterface $entity)
|
||||||
{
|
{
|
||||||
$class = get_class($entity);
|
$class = get_class($entity);
|
||||||
|
|
||||||
@@ -37,6 +51,14 @@ class SearchService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given an entity that implements SearchableInterface, this method first checks
|
||||||
|
* if the relevant SearchIndex entity exists. If it doesn't, it's created. The
|
||||||
|
* title and index data are set based on the methods in the $entity
|
||||||
|
*
|
||||||
|
* @param SearchableInterface $entity
|
||||||
|
* @return SearchIndex
|
||||||
|
*/
|
||||||
public function createSearchResult(SearchableInterface $entity): SearchIndex
|
public function createSearchResult(SearchableInterface $entity): SearchIndex
|
||||||
{
|
{
|
||||||
$values = [];
|
$values = [];
|
||||||
@@ -76,7 +98,8 @@ class SearchService
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds all searchable Doctrine entities.
|
* Finds all searchable Doctrine entities the implement SearchableInterface
|
||||||
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getSearchableClasses(): array
|
public function getSearchableClasses(): array
|
||||||
{
|
{
|
||||||
|
|||||||
0
tests/.gitkeep
Normal file
0
tests/.gitkeep
Normal file
Reference in New Issue
Block a user