Source Provider
Data Source Identification
Identify the Data Source with the Symfony Finder Component.
CompatInfo uses the Reflect data source provider mechanism. You may either use the basic Symfony Finder, what we will do next, or use your own.
Provider
is a component from Reflect, and not from CompatInfo. Take care of namespace !Basic Provider with Symfony Finder
<?php
use Bartlett\Reflect\Provider\SymfonyFinderProvider;
use Symfony\Component\Finder\Finder;
$dirs = dirname(__DIR__) . '/sources';
$finder = new Finder();
$finder->files()
->name('*.php')
->in($dirs);
$provider = new SymfonyFinderProvider($finder);
At this step, we have created a data source provider that is allowed to retrieve each element to parse.
CompatInfo need to know it. We attach then the previous provider instance
to a Provider Manager, with a label ( e.g: Single
) to identify it easily.
<?php
use Bartlett\Reflect\ProviderManager;
$pm = new ProviderManager;
$pm->set('Single', $provider);
source-providers
section of the phpcompatinfo.json
configuration file
for the command-line interface.<?php
use Bartlett\Reflect\ProviderManager;
use Bartlett\Reflect\Provider\SymfonyFinderProvider;
use Symfony\Component\Finder\Finder;
$pm = new ProviderManager;
// -- source 1
$source1 = dirname(__DIR__) . '/sources/';
$finder1 = new Finder();
$finder1->files()
->name('sample1.php')
->in($source1);
$pm->set('Sample', new SymfonyFinderProvider($finder1));
// -- source 2
$pharFile = dirname(__DIR__) . '/sources/pirus.phar';
$source2 = 'phar://' . $pharFile;
$finder2 = new Finder();
$finder2->files()
->path('/Pirus/')
->name('*.php')
->in($source2);
$pm->set('Pirus', new SymfonyFinderProvider($finder2));
On this example CompatInfo is able to parse contents
of two data sources: Sample
and Pirus
, all at once (default behavior) or individually.
Parse elements of the provider
We reuse the provider manager instance ($pm
) seen above (unique data source named Single
).
Then we ask CompatInfo to parse its full contents.
<?php
use Bartlett\CompatInfo;
$compatinfo = new CompatInfo;
$compatinfo->setProviderManager($pm);
$compatinfo->parse();
In case of multiple data sources, when you want to parse it individually rather than fully, use the following statements.
Pirus
<?php
use Bartlett\CompatInfo;
$compatinfo = new CompatInfo;
$compatinfo->setProviderManager($pm);
$compatinfo->parse(array('Pirus'));
Pirus
is the data source label used on $pm→set()
statement.
You have identified data sources and parsed its full contents. Now you are ready to handle the results.
Handle Results
Using analysers
To explore and exploit results, we need first to parse the data source, and connect at least one analyser.
On following example, we will use the standard SummaryAnalyser
, but you are free
to use any other analysers available and even your owns.
Bartlett\Reflect\Analyser\AnalyserInterface
and provide a getMetrics()
method (to return results).<?php
require_once 'vendor/autoload.php';
use Bartlett\CompatInfo;
use Bartlett\CompatInfo\Analyser;
use Bartlett\Reflect\ProviderManager;
use Bartlett\Reflect\Provider\SymfonyFinderProvider;
use Bartlett\Reflect\Plugin\Analyser\AnalyserPlugin;
use Symfony\Component\Finder\Finder;
$dirs = '/path/to/source';
$finder = new Finder();
$finder->files()
->name('*.php')
->in($dirs);
$provider = new SymfonyFinderProvider($finder);
$sourceId = 'dataSourceIdent';
$pm = new ProviderManager;
$pm->set($sourceId, $provider);
$compatinfo = new CompatInfo;
$compatinfo->setProviderManager($pm);
$compatinfo->addPlugin(
new AnalyserPlugin(
array(
new Analyser\SummaryAnalyser(),
)
)
);
$compatinfo->parse();
$metrics = $compatinfo->getMetrics();
$versions = $metrics[$sourceId]['sa.versions'];
$classes = $metrics[$sourceId]['sa.classes'];
$functions = $metrics[$sourceId]['sa.functions'];
$extensions = $metrics[$sourceId]['sa.extensions'];
sa.
prefix corresponds to class constant METRICS_PREFIX of SummaryAnalyser.