3
0

20 Commits
0.0.1 ... 0.0.8

Author SHA1 Message Date
bf89b962ec Merge branch 'release/0.0.8' 2022-07-20 21:02:33 +01:00
7de30e78ac Working on DependencyInjection 2022-07-20 21:02:17 +01:00
6d65df0b9c Merge tag '0.0.7' into develop
Working on DependencyInjection
2022-07-20 21:01:11 +01:00
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 98 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"
}
} }

9
config/services.yaml Normal file
View File

@@ -0,0 +1,9 @@
services:
pcm_search.searchable_subscriber:
class: Pcm\SearchBundle\EventSubscriber\SearchableSubscriber
tags:
- { name: doctrine.event_subscriber }
pcm_search.search_service:
class: Pcm\SearchBundle\Service\SearchService
public: true

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; 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