3
0

5 Commits
0.0.1 ... 0.0.3

Author SHA1 Message Date
066e3f0d4b Merge branch 'release/0.0.3' 2022-07-20 20:38:22 +01:00
cf03ff8f89 Fleshing out a bit further 2022-07-20 20:38:09 +01:00
c46af9c4f7 Merge tag '0.0.2' into develop
Fixing autoloader
2022-07-20 09:53:41 +01:00
7e3b74af08 Merge branch 'release/0.0.2' 2022-07-20 09:53:36 +01:00
d4dc1b57c8 Fixing autoloader 2022-07-20 09:53:28 +01:00
8 changed files with 71 additions and 10 deletions

14
.editorconfig Normal file
View 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
View File

@@ -1,2 +1,3 @@
/vendor /vendor
composer.lock composer.lock
.phpunit.result.cache

View File

@@ -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
View File

@@ -0,0 +1,4 @@
services:
Pcm\SearchBundle\EventSubscriber\SearchableSubscriber:
tags:
- { name: doctrine.event_subscriber }

13
phpunit.xml Normal file
View 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>

View File

@@ -3,7 +3,7 @@ namespace Pcm\SearchBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle; use Symfony\Component\HttpKernel\Bundle\Bundle;
class SearchBundle extends Bundle class PcmSearchBundle extends Bundle
{ {
public function getPath(): string public function getPath(): string
{ {

View File

@@ -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
View File