Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 93 |
Directory | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
240 | |
0.00% |
0 / 93 |
__construct(array $options = array()) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
setDefaultOptions(OptionsResolverInterface $resolver) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 30 |
|||
read() | |
0.00% |
0 / 1 |
90 | |
0.00% |
0 / 43 |
|||
write() | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 14 |
<?php | |
/** | |
* This file is part of the Statistical Classifier package. | |
* | |
* (c) Cam Spiers <camspiers@gmail.com> | |
* | |
* For the full copyright and license information, please view the LICENSE | |
* file that was distributed with this source code. | |
*/ | |
namespace Camspiers\StatisticalClassifier\DataSource; | |
use Symfony\Component\OptionsResolver\OptionsResolver; | |
use Symfony\Component\OptionsResolver\OptionsResolverInterface; | |
/** | |
* @author Cam Spiers <camspiers@gmail.com> | |
* @package Statistical Classifier | |
*/ | |
class Directory extends DataArray | |
{ | |
/** | |
* Used for docs in category folder | |
*/ | |
const MODE_DIRECTORY_AS_CATEGORY = 0; | |
/** | |
* Used for docs named be category | |
*/ | |
const MODE_DOCUMENT_AS_CATEGORY = 1; | |
/** | |
* Stores the configuration options | |
* @var array | |
*/ | |
protected $options; | |
/** | |
* Creates the object from an array of options | |
* @param array $options | |
*/ | |
public function __construct(array $options = array()) | |
{ | |
$resolver = new OptionsResolver(); | |
$this->setDefaultOptions($resolver); | |
$this->options = $resolver->resolve($options); | |
} | |
/** | |
* Sets the configuration for the options resolver | |
* @param OptionsResolverInterface $resolver | |
*/ | |
protected function setDefaultOptions(OptionsResolverInterface $resolver) | |
{ | |
$resolver->setRequired( | |
array( | |
'directory' | |
) | |
); | |
$resolver->setDefaults( | |
array( | |
'mode' => self::MODE_DIRECTORY_AS_CATEGORY, | |
'include' => array(), | |
'limit' => null | |
) | |
); | |
$resolver->setAllowedValues( | |
array( | |
'mode' => array( | |
self::MODE_DOCUMENT_AS_CATEGORY, | |
self::MODE_DIRECTORY_AS_CATEGORY | |
) | |
) | |
); | |
$resolver->setAllowedTypes( | |
array( | |
'directory' => 'string', | |
'mode' => 'int', | |
'include' => 'array' | |
) | |
); | |
} | |
/** | |
* @{inheritdoc} | |
*/ | |
public function read() | |
{ | |
$data = array(); | |
if (file_exists($this->options['directory'])) { | |
$pattern = $this->options['mode'] == self::MODE_DIRECTORY_AS_CATEGORY ? '/*' : ''; | |
if (is_array($this->options['include']) && count($this->options['include']) !== 0) { | |
$files = array(); | |
foreach ($this->options['include'] as $include) { | |
$files = array_merge( | |
$files, | |
array_slice( | |
glob( | |
"{$this->options['directory']}/{$include}{$pattern}", | |
GLOB_NOSORT | |
), | |
0, | |
$this->options['limit'] | |
) | |
); | |
} | |
} else { | |
$files = array_slice( | |
glob("{$this->options['directory']}{$pattern}/*", GLOB_NOSORT), | |
0, | |
$this->options['limit'] | |
); | |
} | |
foreach ($files as $filename) { | |
if (is_file($filename)) { | |
if ($this->options['mode'] === self::MODE_DIRECTORY_AS_CATEGORY) { | |
$categoryPath = dirname($filename); | |
} else { | |
$categoryPath = $filename; | |
} | |
$data[] = array( | |
'category' => basename($categoryPath), | |
'document' => file_get_contents($filename) | |
); | |
} | |
} | |
} | |
return $data; | |
} | |
/** | |
* @{inheritdoc} | |
*/ | |
public function write() | |
{ | |
foreach ($this->data as $category => $documents) { | |
if (!file_exists($this->options['directory'] . '/' . $category)) { | |
mkdir($this->options['directory'] . '/' . $category); | |
} | |
foreach ($documents as $document) { | |
file_put_contents( | |
$this->options['directory'] . '/' . $category . '/' . md5($document), | |
$document | |
); | |
} | |
} | |
} | |
} |