liip / drupalregistrymodule
This module provides an API to by used to persist/cache information.
Installs: 1 444
Dependents: 2
Suggesters: 0
Security: 0
Stars: 3
Watchers: 63
Forks: 2
Open Issues: 5
Type:drupal-module
Requires
- php: >=5.3.8,<5.4
- beberlei/assert: dev-master
- liip/drupalconnectormodule: dev-master
- liip/registryadaptor: dev-master
- ruflin/elastica: 0.20.5.0.RC1
Requires (Dev)
- lapistano/proxy-object: dev-master
Suggests
- ruflin/elastica: Allows the registry to be an elasticsearch index.
This package is not auto-updated.
Last update: 2024-10-26 15:47:31 UTC
README
This module provides an API to store key/value pairs of information.
The Idea came when we had to change the persistence layer of how custom data is stored to be available to the system later.
We started with the standard Drupal 7 way to cache data by implementing a facade to the variable_get()
, variable_set()
, variable_del()
functions. This implementation is
provided as the default and example implementation for the registry.
Restrictions
It is not possible to store other objects than value objects without private members. Keep in mind that objects of any instance will be converted to instances of stdClass.
Current Travis Status
Installation
The source is now PSR-0 compatible. There is no specific installation routine to be followed. Just clone or checkout the source into to your project
and use it.
In case you don't use a PSR-0 compatible autoloader, you only have to add the bootstrap.php
into your bootstrap or
autoloader.
Composer
Add the following lines to your composer.json
file and update your project's composer installation.
{ "require": { "liip/drupalregistrymodule": "dev-master" } }
This composer configuration will checkout the 'cutting eadge' version ('dev-master') of the project. Be alarmed that this might be broken sometimes.
NOTE: In case you do not know what this means the composer project website is a good place to start.
Github
Thus I recommend the composer way to make LiipDrupalRegistryModule a dependency to your project. The sources are also available via github. Just clone it as you might be familiar with.
$ git clone git@github.com:liip/LiipDrupalRegistryModule.git
Dependencies
- LiipDrupalConnector (https://github.com/liip/LiipDrupalConnectorModule.git)
- Assert (http://github.com/beberlei/assert)
Optional
- Elastica (https://github.com/ruflin/elastica)
Usage
A good place to find examples of how this library works is always the Tests folder. For those not familiar with PHPUnit a short intro:
$assertions = new \Assert\Assertion(); $registry = new D7Config('myEvents', $assertions); // put stuff in to the registry. $registry->register('eventItemRegister', $item); // get as single element out of the registry or an empty array if it does not exist. $item = $registry->getContentById('eventItemRegister', array()); // get complete register $items = $register->getContent(); // replace content of an item with a new value $register->replace('eventItemRegister', $newItem); // determine if an element is already registered $inRegister = $register->isRegistered('eventItemRegister'); // get rid of a single element $registry->unregister('eventItemRegister'); // destroy the complete registry $registry->destroy();
Dispatching registry actions
It turned out there is a need to multiply an action to a number of registries. In our case we needed to store data to an ElasticSearch custer and - for backup reasons - to a MySql database. To achieve this the dispatcher was introduced.
Providing a container to attach registries the dispatcher invokes the requested action on every registered registry. Example:
$assertions = new \Assert\Assertion(); $indexName = 'myEvents'; $connection = new \PDO('mysql:host=localhost;dbname=testdb'); $drupalRegistry = new D7Config($indexName, $assertions); $esRegistry = new Elasticsearch($indexName, $assertion, new NoOpDecorator()); $dbRegistry = new MySql($indexName, $assertion, $connection); $dispatcher = new Dispatcher(); $dispatcher->attach($drupalRegistry, 'd7'); $dispatcher->attach($esRegistry, 'es'); $dispatcher->attach($dbRegistry, 'db'); $output = $dispatcher->dispatch('register', 'myDocumentId', array({some content})); if ($dispatcher->hasError()) { throw new RegistryException($dispatcher->getLastErrorMessages()); }
Supported Systems
- D7 configuration array (facade to variable_get(), variable_set(), variable_del())
- Elasticsearch (based on the elastica library)
- Memory
- MySql