3
0

17 Commits
0.0.1 ... 0.0.7

Author SHA1 Message Date
5d56d98325 Merge branch 'release/0.0.7' 2022-07-20 21:01:06 +01:00
2f6597a957 Working on DependencyInjection 2022-07-20 21:00:54 +01:00
93bb85f69f Merge tag '0.0.6' into develop
Working on DependencyInjection
2022-07-20 20:54:28 +01:00
218b174d4f Merge branch 'release/0.0.6' 2022-07-20 20:54:19 +01:00
2258fa0c96 Working on DependencyInjection 2022-07-20 20:54:10 +01:00
34b0e7f146 Merge tag '0.0.5' into develop
Working on DependencyInjection
2022-07-20 20:47:30 +01:00
ab25540462 Merge branch 'release/0.0.5' 2022-07-20 20:47:22 +01:00
da950685c0 Working on DependencyInjection 2022-07-20 20:47:05 +01:00
954e6aa712 Merge tag '0.0.4' into develop
Working on DependencyInjection
2022-07-20 20:44:45 +01:00
3f410b8f55 Merge branch 'release/0.0.4' 2022-07-20 20:44:36 +01:00
78f356f030 Working on DependencyInjection 2022-07-20 20:44:25 +01:00
c35da20deb Merge tag '0.0.3' into develop
- Adding services.yaml
- Fleshing out the codebase further
2022-07-20 20:38:38 +01:00
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
9 changed files with 95 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
composer.lock
.phpunit.result.cache

View File

@@ -9,11 +9,21 @@
"doctrine/orm": "^2.12",
"symfony/framework-bundle": "*"
},
"require-dev": {
"vimeo/psalm": "^4.24",
"psalm/plugin-symfony": "^3.1",
"phpunit/phpunit": "^9.5"
},
"autoload": {
"psr-4": {
"Pcm\\SearchBundle\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Pcm\\SearchBundle\\": "tests/"
}
},
"authors": [
{
"name": "Matt Feeny",
@@ -23,9 +33,5 @@
"name": "Bradley Goode",
"email": "bg@pcmsystems.co.uk"
}
],
"require-dev": {
"vimeo/psalm": "^4.24",
"psalm/plugin-symfony": "^3.1"
}
]
}

6
config/services.yaml Normal file
View File

@@ -0,0 +1,6 @@
services:
pcm_search.searchable_subscriber:
class: Pcm\SearchBundle\EventSubscriber\SearchableSubscriber
public: true
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

@@ -0,0 +1,22 @@
<?php
declare(strict_types=1);
namespace Pcm\SearchBundle\DependencyInjection;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
class PcmSearchExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$loader = new YamlFileLoader(
$container,
new FileLocator(__DIR__.'/../../config')
);
$loader->load('services.yaml');
}
}

View File

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

View File

@@ -14,7 +14,14 @@ class SearchService
{
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);
@@ -22,7 +29,14 @@ class SearchService
$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);
@@ -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
{
$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
{

0
tests/.gitkeep Normal file
View File