Ad hoc adapter classes 02
October 9, 2014
In my previous post I've outlined my attempt at creating "smart" wrappers for objects relying on globally defined functions and stopped to remove two constraints: the first is gone.
The problem
A class willing to rely on an ad-hoc adapter object to abstract itself from globally defined functions and variables would have to inject an adapter object, if walking my path, implementing the tad_Adapters_FunctionsInterface
interface.
I foresee scenarios for not doing this and came up with an ad-hoc (abusing the word here) "functions collector and adapter class" generator.
Injecting an adapter acting as an adapter while collecting all the called globally defined functions is part 1 of the two step process of custom adapter class generation I've outlined.
Solution
While still on the unit level ("unit" as "working but with limited usability") I've added a class to the tdd-helpers package, FunctionCallsCollectorGenerator
that will allow code like this:
(new FunctionCallsCollectorGenerator())
->setFileComment('Auto generated')
->setNamespace('my\name\space')
->setClassComment('Works as an adapter and dumps function calls.')
->setClassName('MyCollector')
->setInterfaceName('ProjectWideAdapterInterface')
->setOutputPath($path)
->generate();
to generate a fully working adapter and collector class like:
<?php
/**
* Auto generated
*/
namespace my\name\space;
/**
* Works as an adapter and dumps function calls.
*/
class MyCollector implements ProjectWideAdapterInterface
{
protected $called;
protected $jsonFilePath;
protected $shouldAppend;
public function __construct()
{
$this->called = array();
$this->jsonFilePath = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'functions_dump' . time();
$this->shouldAppend = false;
}
public function __call($function, $arguments)
{
$reflectionFunction = new \ReflectionFunction($function);
...
}
And that's much more likely to make its way into a custom project.
Next
I will be tackling the point 2 on the list.