Introduced role, description and space separated URIs to the author tag.

This commit is contained in:
Vasil Rangelov
2012-11-10 16:50:39 +02:00
parent ad32c225c5
commit 038a5f3150
2 changed files with 185 additions and 10 deletions
@@ -26,8 +26,11 @@ class AuthorTag extends Tag
/** @var string The name of the author */ /** @var string The name of the author */
protected $name = ''; protected $name = '';
/** @var string The email of the author */ /** @var array Array of URIs belonging to the author, including email */
protected $email = ''; protected $uris = array();
/** @var string The role of the author */
protected $role = '';
/** /**
* Parses a tag and populates the member variables. * Parses a tag and populates the member variables.
@@ -37,12 +40,36 @@ class AuthorTag extends Tag
*/ */
public function __construct($type, $content) public function __construct($type, $content)
{ {
parent::__construct($type, $content); $this->tag = $type;
if (preg_match('/^([^\<]*)(\<([^\>]*)\>)?$/', $content, $matches)) { $this->content = $content;
if (preg_match(
'/^
# Name
([^\<]*)
(?:
# URIs
\<([^>]*)\>\s*
# Role
(?:
\(([^\)]*)\)
)?
# Description
(.*)
)?
$/sux',
$content,
$matches
)
) {
$this->name = trim($matches[1]); $this->name = trim($matches[1]);
if (isset($matches[3])) { if (isset($matches[2])) {
$this->email = trim($matches[3]); $matches[2] = trim($matches[2]);
if ('' !== $matches[2]) {
$this->uris = preg_split('/\s+/u', $matches[2]);
}
} }
$this->role = isset($matches[3]) ? trim($matches[3]) : '';
$this->description = isset($matches[4]) ? trim($matches[4]) : '';
} }
} }
@@ -57,12 +84,22 @@ class AuthorTag extends Tag
} }
/** /**
* Gets the author's email. * Gets the author's URIs.
* *
* @return string The author's email. * @return array Array of URIs belonging to the author, including email.
*/ */
public function getAuthorEmail() public function getAuthorURIs()
{ {
return $this->email; return $this->uris;
}
/**
* Gets the author's role.
*
* @return string The role of the author.
*/
public function getAuthorRole()
{
return $this->role;
} }
} }
@@ -0,0 +1,138 @@
<?php
/**
* phpDocumentor Author tag test.
*
* PHP version 5.3
*
* @author Vasil Rangelov <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
namespace phpDocumentor\Reflection\DocBlock\Tag;
/**
* Test class for \phpDocumentor\Reflection\DocBlock\AuthorTag.
*
* @author Vasil Rangelov <[email protected]>
* @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
* @license http://www.opensource.org/licenses/mit-license.php MIT
* @link http://phpdoc.org
*/
class AuthorTagTest extends \PHPUnit_Framework_TestCase
{
/**
* Test that the \phpDocumentor\Reflection\DocBlock\Tag\AuthorTag can
* understand the @author DocBlock.
*
* @param string $type
* @param string $content
* @param string $extractedType
* @param string $extractedVarName
* @param string $extractedDescription
*
* @dataProvider provideDataForConstructor
*
* @return void
*/
public function testConstructorParsesInputsIntoCorrectFields(
$type,
$content,
$extractedName,
$extractedURIs,
$extractedRole,
$extractedDescription
) {
$tag = new AuthorTag($type, $content);
$this->assertEquals($extractedName, $tag->getAuthorName());
$this->assertEquals($extractedURIs, $tag->getAuthorURIs());
$this->assertEquals($extractedRole, $tag->getAuthorRole());
$this->assertEquals($extractedDescription, $tag->getDescription());
}
/**
* Data provider for testConstructorParsesInputsIntoCorrectFields()
*
* @return array
*/
public function provideDataForConstructor()
{
return array(
array('author', 'Mike van Riel', 'Mike van Riel', array(), '', ''),
array(
'author',
'Mike van Riel <[email protected]>',
'Mike van Riel',
array('[email protected]'),
'',
''
),
array(
'author',
'Mike van Riel <[email protected] >',
'Mike van Riel',
array('[email protected]'),
'',
''
),
array(
'author',
'Mike van Riel < [email protected]>',
'Mike van Riel',
array('[email protected]'),
'',
''
),
array(
'author',
'Mike van Riel < [email protected] >',
'Mike van Riel',
array('[email protected]'),
'',
''
),
array(
'author',
'Mike van Riel <[email protected] @mvriel>',
'Mike van Riel',
array('[email protected]', '@mvriel'),
'',
''
),
array(
'author',
'Mike van Riel <[email protected]> (lead)',
'Mike van Riel',
array('[email protected]'),
'lead',
''
),
array(
'author',
'Mike van Riel <[email protected]> (lead) The one',
'Mike van Riel',
array('[email protected]'),
'lead',
'The one'
),
array(
'author',
'Mike van Riel <[email protected]> The one',
'Mike van Riel',
array('[email protected]'),
'',
'The one'
),
array(
'author',
'Mike van Riel <> The one',
'Mike van Riel',
array(),
'',
'The one'
)
);
}
}