Skip to content

Commit

Permalink
adding symfony/finder based reader
Browse files Browse the repository at this point in the history
  • Loading branch information
naneau committed Sep 4, 2014
1 parent 5360958 commit 486464e
Show file tree
Hide file tree
Showing 10 changed files with 217 additions and 1 deletion.
4 changes: 3 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
},

"minimum-stability": "stable",
"require": {},
"require": {
"symfony/finder": "~2.5"
},
"require-dev": {
"phpunit/phpunit": "~4.2"
}
Expand Down
84 changes: 84 additions & 0 deletions src/Naneau/ProjectVersioner/Reader/FileSet.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
<?php
/**
* FileSet.php
*
* @package ProjectVersioner
* @subpackage Reader
*/

namespace Naneau\ProjectVersioner\Reader;

use Naneau\ProjectVersioner\ReaderInterface;

use Symfony\Component\Finder\Finder;

/**
* File
*
* Creates a version based on the highest mtime of a set of files
*
* @category Naneau
* @package ProjectVersioner
* @subpackage Reader
*/
class FileSet implements ReaderInterface
{
/**
* The finder
*
* @var Finder
**/
private $finder;

/**
* Constructor
*
* @param string $files
* @return void
**/
public function __construct($in = '**/*')
{
$this
->setFinder(new Finder);
}

/**
* {@inheritdoc}
**/
public function canRead($directory)
{
$this
->getFinder()->in($directory)
->name($this->getName());
}

/**
* {@inheritdoc}
**/
public function read($directory)
{
}

/**
* Get the sf finder
*
* @return Finder
*/
public function getFinder()
{
return $this->finder;
}

/**
* Set the sf finder
*
* @param Finder $finder
* @return FileSet
*/
public function setFinder(Finder $finder)
{
$this->finder = $finder;

return $this;
}
}
104 changes: 104 additions & 0 deletions src/Naneau/ProjectVersioner/Reader/Finder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<?php
/**
* Finder.php
*
* @package ProjectVersioner
* @subpackage Reader
*/

namespace Naneau\ProjectVersioner\Reader;

use Naneau\ProjectVersioner\ReaderInterface;

use Symfony\Component\Finder\Finder as SfFinder;

/**
* Finder
*
* Uses the highest mtime from a finder as a version
*
* @category Naneau
* @package ProjectVersioner
* @subpackage Reader
*/
class Finder implements ReaderInterface
{
/**
* the finder
*
* @var SfFinder
*/
private $finder;

/**
* Constructor
*
* @param SfFinder $finder
* @return void
**/
public function __construct(SfFinder $finder = null)
{
if ($finder === null) {
$finder = new SfFinder;
}

$this->setFinder($finder);
}

/**
* {@inheritdoc}
**/
public function canRead($directory)
{
$this->getFinder()->in($directory);

// If at least one file/dir can be found, assume we can read
foreach($this->getFinder() as $file) {
return true;
}
return false;
}

/**
* {@inheritdoc}
**/
public function read($directory)
{
$highest = 0;
foreach($this->getFinder() as $file) {

$mtime = filemtime(
$file->getPath()
. DIRECTORY_SEPARATOR . $file->getFilename()
);
if ($mtime > $highest) {
$highest = $mtime;
}
}

return $highest;
}

/**
* Get the finder
*
* @return SfFinder
*/
public function getFinder()
{
return $this->finder;
}

/**
* Set the finder
*
* @param SfFinder $finder
* @return Finder
*/
public function setFinder(SfFinder $finder)
{
$this->finder = $finder;

return $this;
}
}
26 changes: 26 additions & 0 deletions tests/Reader/FinderTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

use Naneau\ProjectVersioner\Versioner;
use Naneau\ProjectVersioner\Reader\Finder as FinderReader;

use Symfony\Component\Finder\Finder;

class FinderTest extends \PHPUnit_Framework_TestCase
{
public function testRead()
{
$directory = __DIR__ . '/../projects/finder';

$time = time();
touch($directory . '/DirectoryOne/FileFour.txt', $time);

$finder = new Finder;
$finder->name('*.txt');

$readers = array(new FinderReader($finder));

$versioner = new Versioner($directory, $readers);

$this->assertEquals($time, $versioner->get());
}
}
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.

0 comments on commit 486464e

Please sign in to comment.