Skip to content

Commit

Permalink
CouscousPHP#74 Add a currentFile variable to each file
Browse files Browse the repository at this point in the history
That variable contains the relative name of the current file. It can be used for example to link to the GitHub source file (to offer editing the documentation).

Because it was getting out of hand, I had to move back all the steps into the main application config. This is much simpler now, even though that means we can't dynamically add modules.
  • Loading branch information
mnapoli committed Jul 29, 2015
1 parent 76ef35a commit fa3e5d2
Show file tree
Hide file tree
Showing 24 changed files with 132 additions and 108 deletions.
52 changes: 32 additions & 20 deletions src/Application/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,39 @@

return [

// Generation steps are added by modules
'steps.init' => [
],
'steps.before' => [
],
'steps.preprocessing' => [
],
'steps.postprocessing' => [
],
'steps.after' => [
],
'steps' => [
DI\get('Couscous\Module\Config\Step\SetDefaultConfig'),
DI\get('Couscous\Module\Config\Step\LoadConfig'),
DI\get('Couscous\Module\Config\Step\OverrideBaseUrlForPreview'),

DI\get('Couscous\Module\Scripts\Step\ExecuteBeforeScripts'),

DI\get('Couscous\Module\Template\Step\UseDefaultTemplate'),
DI\get('Couscous\Module\Template\Step\FetchRemoteTemplate'),
DI\get('Couscous\Module\Template\Step\ValidateTemplateDirectory'),

'steps' => function (ContainerInterface $c) {
return array_merge(
$c->get('steps.init'),
$c->get('steps.before'),
$c->get('steps.preprocessing'),
$c->get('steps.postprocessing'),
$c->get('steps.after')
);
},
DI\get('Couscous\Module\Bower\Step\RunBowerInstall'),

DI\get('Couscous\Module\Markdown\Step\LoadMarkdownFiles'),
DI\get('Couscous\Module\Template\Step\LoadAssets'),
DI\get('Couscous\Module\Core\Step\AddImages'),

DI\get('Couscous\Module\Core\Step\AddFileNameToMetadata'),

DI\get('Couscous\Module\Markdown\Step\ParseMarkdownFrontMatter'),
DI\get('Couscous\Module\Markdown\Step\ProcessMarkdownFileName'),
DI\get('Couscous\Module\Markdown\Step\RewriteMarkdownLinks'),
DI\get('Couscous\Module\Markdown\Step\RenderMarkdown'),
DI\get('Couscous\Module\Markdown\Step\CreateHeadingIds'),

DI\get('Couscous\Module\Template\Step\AddPageListToLayoutVariables'),
DI\get('Couscous\Module\Template\Step\ProcessTwigLayouts'),

DI\get('Couscous\Module\Core\Step\ClearTargetDirectory'),
DI\get('Couscous\Module\Core\Step\WriteFiles'),

DI\get('Couscous\Module\Scripts\Step\ExecuteAfterScripts'),
],

'Couscous\Generator' => DI\object()
->constructorParameter('steps', DI\get('steps')),
Expand Down
11 changes: 10 additions & 1 deletion src/Model/File.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,15 @@ abstract class File
{
public $relativeFilename;

/**
* @var Metadata
*/
private $metadata;

public function __construct($relativeFilename)
{
$this->relativeFilename = $relativeFilename;
$this->metadata = new Metadata();
}

/**
Expand Down Expand Up @@ -53,5 +59,8 @@ public abstract function getContent();
*
* @return Metadata
*/
public abstract function getMetadata();
public function getMetadata()
{
return $this->metadata;
}
}
5 changes: 0 additions & 5 deletions src/Model/LazyFile.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,4 @@ public function getContent()
{
return file_get_contents($this->fullFilename);
}

public function getMetadata()
{
return new Metadata();
}
}
9 changes: 0 additions & 9 deletions src/Module/Bower/config.php

This file was deleted.

11 changes: 0 additions & 11 deletions src/Module/Config/config.php

This file was deleted.

22 changes: 22 additions & 0 deletions src/Module/Core/Step/AddFileNameToMetadata.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace Couscous\Module\Core\Step;

use Couscous\Model\Project;
use Couscous\Step;

/**
* Add to the current file name to the metadata.
*
* @author Matthieu Napoli <[email protected]>
*/
class AddFileNameToMetadata implements Step
{
public function __invoke(Project $project)
{
foreach ($project->getFiles() as $file) {
$fileMetadata = $file->getMetadata();
$fileMetadata['currentFile'] = $file->relativeFilename;
}
}
}
11 changes: 0 additions & 11 deletions src/Module/Core/config.php

This file was deleted.

15 changes: 2 additions & 13 deletions src/Module/Markdown/Model/MarkdownFile.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,15 @@ class MarkdownFile extends File
*/
public $content;

/**
* @var Metadata
*/
private $metadata;

public function __construct($relativeFilename, $content)
{
parent::__construct($relativeFilename);

$this->content = $content;
$this->metadata = new Metadata();

parent::__construct($relativeFilename);
}

public function getContent()
{
return $this->content;
}

public function getMetadata()
{
return $this->metadata;
}
}
9 changes: 0 additions & 9 deletions src/Module/Markdown/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,6 @@

return [

'steps.preprocessing' => DI\add([
DI\get('Couscous\Module\Markdown\Step\LoadMarkdownFiles'),
DI\get('Couscous\Module\Markdown\Step\ParseMarkdownFrontMatter'),
DI\get('Couscous\Module\Markdown\Step\ProcessMarkdownFileName'),
DI\get('Couscous\Module\Markdown\Step\RewriteMarkdownLinks'),
DI\get('Couscous\Module\Markdown\Step\RenderMarkdown'),
DI\get('Couscous\Module\Markdown\Step\CreateHeadingIds'),
]),

'Mni\FrontYAML\Parser' => DI\object()
->constructorParameter('markdownParser', DI\get('Mni\FrontYAML\Markdown\MarkdownParser')),

Expand Down
12 changes: 0 additions & 12 deletions src/Module/Scripts/config.php

This file was deleted.

2 changes: 1 addition & 1 deletion src/Module/Template/Model/HtmlFile.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,6 @@ public function getContent()

public function getMetadata()
{
return $this->wrappedFile ? $this->wrappedFile->getMetadata() : new Metadata();
return $this->wrappedFile ? $this->wrappedFile->getMetadata() : parent::getMetadata();
}
}
16 changes: 0 additions & 16 deletions src/Module/Template/config.php

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
docs/foo.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
test.md
Empty file.
Empty file.
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{{ currentFile }}
Empty file.
8 changes: 8 additions & 0 deletions tests/FunctionalTest/GenerationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,12 @@ public function testDocumentationImages()
{
$this->assertGeneratedWebsite('images');
}

/**
* Test that the currentFile variable is available.
*/
public function testCurrentFileVariable()
{
$this->assertGeneratedWebsite('current-file');
}
}
23 changes: 23 additions & 0 deletions tests/UnitTest/Model/FileTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace Couscous\Tests\UnitTest\Model;

use Couscous\Model\File;

/**
* @covers \Couscous\Model\File
*/
class FileTest extends \PHPUnit_Framework_TestCase
{
/**
* @test
*/
public function it_should_have_metadata()
{
/** @var File $file */
$file = $this->getMock('Couscous\Model\File', array('getContent'), array('test.md'));

$file->getMetadata()['foo'] = 'test';
$this->assertEquals('test', $file->getMetadata()['foo']);
}
}
30 changes: 30 additions & 0 deletions tests/UnitTest/Module/Core/Step/AddFileNameToMetadata.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace Couscous\Tests\UnitTest\Module\Template\Step;

use Couscous\Module\Core\Step\AddFileNameToMetadata;
use Couscous\Module\Template\Model\HtmlFile;
use Couscous\Tests\UnitTest\Mock\MockProject;

/**
* @covers \Couscous\Module\Core\Step\AddFileNameToMetadata
*/
class AddFileNameToMetadataTest extends \PHPUnit_Framework_TestCase
{
/**
* @test
*/
public function it_should_add_the_metadata_variable()
{
$project = new MockProject();
$project->addFile(new HtmlFile('foo/bar/index.html', ''));

$step = new AddFileNameToMetadata();
$step->__invoke($project);

$files = $project->getFiles();
$file = $files[0];

$this->assertEquals('foo/bar/index.html', $file->getMetadata()['currentFile']);
}
}

0 comments on commit fa3e5d2

Please sign in to comment.