Skip to content
This repository was archived by the owner on Apr 12, 2020. It is now read-only.

Commit bf16036

Browse files
author
Alexandre Salomé
committed
Merge pull request #2 from gitonomy/version
Version
2 parents 2eff009 + d159d61 commit bf16036

6 files changed

Lines changed: 95 additions & 96 deletions

File tree

src/Gitonomy/ChangeLog/Filter/FeatureFilter.php

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/Gitonomy/ChangeLog/Filter/FilterFactory.php

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,10 @@ static function createFromRequest(Request $request)
1010
{
1111
$parameters = $request->query;
1212

13-
$version = $parameters->get('from_version', 0.0);
14-
$versionFilter = new VersionFilter($version);
13+
$version = $parameters->get('from_version', 0.0);
14+
$stable = $parameters->get('stable', true);
15+
$filter = new VersionFilter($version, ($stable === 'false' ? false : $stable));
1516

16-
if ($parameters->has('levels')) {
17-
$levels = explode(',', $parameters->get('levels'));
18-
$featureFilter = new FeatureFilter($levels);
19-
20-
$versionFilter->setFeatureFilter($featureFilter);
21-
}
22-
23-
return new ChangeLogFilter($versionFilter);
17+
return new ChangeLogFilter($filter);
2418
}
2519
}

src/Gitonomy/ChangeLog/Filter/VersionFilter.php

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,13 @@
66

77
class VersionFilter
88
{
9-
protected $featureFilter;
109
protected $minimumVersion;
10+
protected $stable;
1111

12-
public function __construct($minimumVersion)
12+
public function __construct($minimumVersion, $stable = true)
1313
{
1414
$this->minimumVersion = $minimumVersion;
15-
}
16-
17-
public function setFeatureFilter(FeatureFilter $featureFilter)
18-
{
19-
$this->featureFilter = $featureFilter;
15+
$this->stable = (bool)$stable;
2016
}
2117

2218
public function filter(Version $version)
@@ -28,18 +24,17 @@ public function filter(Version $version)
2824
$result = new Version($version->getVersion(), $version->getDate());
2925

3026
foreach ($version->getFeatures() as $feature) {
31-
if (null === $this->featureFilter) {
32-
$result->addFeature($feature);
33-
} elseif (null !== $filter = $this->featureFilter->filter($feature)) {
34-
$result->addFeature($filter);
35-
}
27+
$result->addFeature($feature);
3628
}
3729

3830
return $result;
3931
}
4032

4133
protected function isTrue(Version $version)
4234
{
43-
return version_compare($this->minimumVersion, $version->getVersion()) < 0;
35+
return (
36+
(!$this->stable && null === $version->getDate()) ||
37+
(version_compare($this->minimumVersion, $version->getVersion()) < 0 && null !== $version->getDate())
38+
);
4439
}
4540
}

src/Gitonomy/ChangeLog/Loader/GithubLoader.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use Buzz\Browser;
66
use Buzz\Client\Curl;
77

8-
use Gitonomy\ChangeLog\Parser\Parser;
8+
use Gitonomy\ChangeLog\Parser\ChangeLogParser;
99

1010
class GithubLoader implements LoaderInterface
1111
{
@@ -22,7 +22,7 @@ public function load()
2222
}
2323

2424
$content = $response->getContent();
25-
$parser = new Parser();
25+
$parser = new ChangeLogParser();
2626

2727
return $parser->parse($content);
2828
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<?php
2+
3+
/**
4+
* This file is part of Gitonomy.
5+
*
6+
* (c) Alexandre Salomé <alexandre.salome@gmail.com>
7+
* (c) Julien DIDIER <genzo.wm@gmail.com>
8+
*
9+
* This source file is subject to the GPL license that is bundled
10+
* with this source code in the file LICENSE.
11+
*/
12+
13+
namespace Gitonomy\ChangeLog\Parser;
14+
15+
use Gitonomy\ChangeLog\ChangeLog;
16+
use Gitonomy\ChangeLog\Node\Version;
17+
use Gitonomy\ChangeLog\Node\Feature;
18+
19+
class ChangeLogParser extends Parser
20+
{
21+
public function parse($content)
22+
{
23+
$this->cursor = 0;
24+
$this->content = $content;
25+
$this->length = strlen($this->content);
26+
27+
$changeLog = new ChangeLog();
28+
29+
while (!$this->isFinished()) {
30+
31+
if ($this->expects('* ')) {
32+
$version = $this->parseVersion($changeLog);
33+
}
34+
35+
if (null !== $version && $this->expects(' * ')) {
36+
$this->parseFeature($version);
37+
}
38+
39+
$this->consumeNewLine();
40+
}
41+
42+
return $changeLog;
43+
}
44+
45+
protected function parseVersion(ChangeLog $changeLog)
46+
{
47+
$version = $this->consumeTo("\n");
48+
49+
preg_match('/^v([0-9\.]+)(?: \((\d{4}-\d{2}-\d{2})\))?$/', $version, $versionData);
50+
51+
if (!$versionData) {
52+
$version = new Version($version);
53+
}
54+
elseif (isset($versionData[2])) {
55+
$version = new Version($versionData[1], $versionData[2]);
56+
} else {
57+
$version = new Version($versionData[1]);
58+
}
59+
60+
$changeLog->addVersion($version);
61+
62+
return $version;
63+
}
64+
65+
protected function parseFeature(Version $version)
66+
{
67+
$feature = $this->consumeTo("\n");
68+
69+
preg_match('#(\w*) (.*)#', $feature, $featureData);
70+
71+
if (!$featureData) {
72+
return;
73+
}
74+
75+
$version->addFeature(new Feature($featureData[1], $featureData[2]));
76+
77+
return $feature;
78+
}
79+
}

src/Gitonomy/ChangeLog/Parser/Parser.php

Lines changed: 2 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -16,53 +16,13 @@
1616
use Gitonomy\ChangeLog\Node\Version;
1717
use Gitonomy\ChangeLog\Node\Feature;
1818

19-
class Parser
19+
abstract class Parser
2020
{
2121
protected $cursor;
2222
protected $content;
2323
protected $length;
2424

25-
public function parse($content)
26-
{
27-
$this->cursor = 0;
28-
$this->content = $content;
29-
$this->length = strlen($this->content);
30-
31-
$changeLog = new ChangeLog();
32-
33-
while (!$this->isFinished()) {
34-
35-
if ($this->expects('* ')) {
36-
$version = $this->consumeTo("\n");
37-
38-
preg_match('#v(?P<version>[^/]+) \((?P<date>[0-9]{4}-[0-9]{2}-[0-9]{2})\)#', $version, $versionData);
39-
40-
if (array() === $versionData) {
41-
$version = new Version($version);
42-
} else {
43-
$version = new Version($versionData['version'], $versionData['date']);
44-
}
45-
46-
$changeLog->addVersion($version);
47-
}
48-
49-
if ($this->expects(' * ')) {
50-
$feature = $this->consumeTo("\n");
51-
52-
preg_match('#(?P<level>\w+) (?P<feature>[^.]+)#', $feature, $featureData);
53-
54-
if (null === $version) {
55-
continue;
56-
}
57-
58-
$version->addFeature(new Feature($featureData['level'], $featureData['feature']));
59-
}
60-
61-
$this->consumeNewLine();
62-
}
63-
64-
return $changeLog;
65-
}
25+
abstract function parse($content);
6626

6727
public function isFinished()
6828
{

0 commit comments

Comments
 (0)