diff --git a/.travis.yml b/.travis.yml index 2f8ddda..c07a6b7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,7 @@ before_script: script: - if [[ $PHPUNIT_TEST ]]; then vendor/bin/phpunit; fi - if [[ $PHPUNIT_COVERAGE_TEST ]]; then phpdbg -qrr vendor/bin/phpunit --coverage-clover=coverage.xml; fi - - if [[ $PHPCS_TEST ]]; then vendor/bin/phpcs --standard=vendor/silverstripe/framework/phpcs.xml.dist code/ tests/; fi + - if [[ $PHPCS_TEST ]]; then vendor/bin/phpcs src/ tests/ *.php; fi after_success: - if [[ $PHPUNIT_COVERAGE_TEST ]]; then bash <(curl -s https://codecov.io/bash) -f coverage.xml; fi diff --git a/.upgrade.yml b/.upgrade.yml index 0fee0b1..fb1a034 100644 --- a/.upgrade.yml +++ b/.upgrade.yml @@ -9,7 +9,7 @@ mappings: RestfulServerTestComment: SilverStripe\RestfulServer\Tests\Stubs\RestfulServerTestComment RestfulServerTestPage: SilverStripe\RestfulServer\Tests\Stubs\RestfulServerTestPage RestfulServerTestSecretThing: SilverStripe\RestfulServer\Tests\Stubs\RestfulServerTestSecretThing - DataFormatter: SilverStripe\RestfulServer\DataFormatter\DataFormatter + DataFormatter: SilverStripe\RestfulServer\DataFormatter FormEncodedDataFormatter: SilverStripe\RestfulServer\DataFormatter\FormEncodedDataFormatter JSONDataFormatter: SilverStripe\RestfulServer\DataFormatter\JSONDataFormatter XMLDataFormatter: SilverStripe\RestfulServer\DataFormatter\XMLDataFormatter diff --git a/composer.json b/composer.json index c83a1dd..f664db8 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,8 @@ }, "require-dev": { "phpunit/PHPUnit": "^5.7", - "squizlabs/php_codesniffer": "^3.0" + "squizlabs/php_codesniffer": "^3.0", + "silverstripe/versioned": "^1" }, "autoload": { "psr-4": { diff --git a/phpunit.xml.dist b/phpunit.xml.dist index f93a537..e190cd3 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -4,7 +4,7 @@ - code/ + src/ tests/ diff --git a/src/DataFormatter/DataFormatter.php b/src/DataFormatter.php similarity index 98% rename from src/DataFormatter/DataFormatter.php rename to src/DataFormatter.php index 7fadd90..6d7e31e 100644 --- a/src/DataFormatter/DataFormatter.php +++ b/src/DataFormatter.php @@ -1,6 +1,6 @@ - * - * @package framework - * @subpackage formatters */ class FormEncodedDataFormatter extends XMLDataFormatter { diff --git a/src/DataFormatter/JSONDataFormatter.php b/src/DataFormatter/JSONDataFormatter.php index 1bf6c97..cb71bfb 100644 --- a/src/DataFormatter/JSONDataFormatter.php +++ b/src/DataFormatter/JSONDataFormatter.php @@ -2,6 +2,7 @@ namespace SilverStripe\RestfulServer\DataFormatter; +use SilverStripe\RestfulServer\DataFormatter; use SilverStripe\ORM\DataObjectInterface; use SilverStripe\Core\Convert; use SilverStripe\View\ArrayData; @@ -9,8 +10,7 @@ use SilverStripe\Control\Director; use SilverStripe\ORM\SS_List; /** - * @package framework - * @subpackage formatters + * Formats a DataObject's member fields into a JSON string */ class JSONDataFormatter extends DataFormatter { diff --git a/src/DataFormatter/XMLDataFormatter.php b/src/DataFormatter/XMLDataFormatter.php index dc70ad9..9463ac7 100644 --- a/src/DataFormatter/XMLDataFormatter.php +++ b/src/DataFormatter/XMLDataFormatter.php @@ -2,6 +2,7 @@ namespace SilverStripe\RestfulServer\DataFormatter; +use SilverStripe\RestfulServer\DataFormatter; use SilverStripe\ORM\DataObjectInterface; use SilverStripe\Control\Controller; use SilverStripe\ORM\DataObject; @@ -10,8 +11,7 @@ use SilverStripe\Core\Convert; use SilverStripe\ORM\SS_List; /** - * @package framework - * @subpackage formatters + * Formats a DataObject's member fields into an XML string */ class XMLDataFormatter extends DataFormatter { diff --git a/src/RestfulServer.php b/src/RestfulServer.php index 18336e7..d675114 100644 --- a/src/RestfulServer.php +++ b/src/RestfulServer.php @@ -12,7 +12,7 @@ use SilverStripe\ORM\DataList; use SilverStripe\Security\Member; use SilverStripe\Security\Security; use SilverStripe\Control\Controller; -use SilverStripe\RestfulServer\DataFormatter\DataFormatter; +use SilverStripe\RestfulServer\DataFormatter; use SilverStripe\Control\HTTPRequest; /** @@ -20,7 +20,6 @@ use SilverStripe\Control\HTTPRequest; * Relies on serialization/deserialization into different formats provided * by the DataFormatter APIs in core. * - * @todo Finish RestfulServerItem and RestfulServerList implementation and re-enable $url_handlers * @todo Implement PUT/POST/DELETE for relations * @todo Access-Control for relations (you might be allowed to view Members and Groups, * but not their relation with each other) @@ -38,21 +37,24 @@ use SilverStripe\Control\HTTPRequest; * @todo i18n integration (e.g. Page/1.xml?lang=de_DE) * @todo Access to extendable methods/relations like SiteTree/1/Versions or SiteTree/1/Version/22 * @todo Respect $api_access array notation in search contexts - * - * @package framework - * @subpackage api */ class RestfulServer extends Controller { private static $url_handlers = array( '$ClassName!/$ID/$Relation' => 'handleAction', '' => 'notFound' - #'$ClassName/#ID' => 'handleItem', - #'$ClassName' => 'handleList', ); + /** + * @config + * @var string root of the api route, MUST have a trailing slash + */ private static $api_base = "api/v1/"; + /** + * @config + * @var string Class name for an authenticator to use on API access + */ private static $authenticator = BasicRestfulAuthenticator::class; /** @@ -81,16 +83,6 @@ class RestfulServer extends Controller 'notFound' ); - /* - function handleItem($request) { - return new RestfulServerItem(DataObject::get_by_id($request->param("ClassName"), $request->param("ID"))); - } - - function handleList($request) { - return new RestfulServerList(DataObject::get($request->param("ClassName"),"")); - } - */ - public function init() { /* This sets up SiteTree the same as when viewing a page through the frontend. Versioned defaults @@ -470,7 +462,8 @@ class RestfulServer extends Controller } $urlSafeClassName = $this->sanitiseClassName(get_class($obj)); - $objHref = Director::absoluteURL(self::$api_base . "$urlSafeClassName/$obj->ID" . $type); + $apiBase = $this->config()->api_base; + $objHref = Director::absoluteURL($apiBase . "$urlSafeClassName/$obj->ID" . $type); $this->getResponse()->addHeader('Location', $objHref); return $responseFormatter->convertDataObject($obj); @@ -540,7 +533,8 @@ class RestfulServer extends Controller } $urlSafeClassName = $this->sanitiseClassName(get_class($obj)); - $objHref = Director::absoluteURL(self::$api_base . "$urlSafeClassName/$obj->ID" . $type); + $apiBase = $this->config()->api_base; + $objHref = Director::absoluteURL($apiBase . "$urlSafeClassName/$obj->ID" . $type); $this->getResponse()->addHeader('Location', $objHref); return $responseFormatter->convertDataObject($obj); diff --git a/src/RestfulServerItem.php b/src/RestfulServerItem.php index 18efc34..1430b7d 100644 --- a/src/RestfulServerItem.php +++ b/src/RestfulServerItem.php @@ -6,9 +6,6 @@ use SilverStripe\ORM\SS_List; /** * Restful server handler for a single DataObject - * - * @package framework - * @subpackage api */ class RestfulServerItem { diff --git a/src/RestfulServerList.php b/src/RestfulServerList.php index ce725d1..757e9fd 100644 --- a/src/RestfulServerList.php +++ b/src/RestfulServerList.php @@ -4,9 +4,6 @@ namespace SilverStripe\RestfulServer; /** * Restful server handler for a SS_List - * - * @package framework - * @subpackage api */ class RestfulServerList { diff --git a/tests/RestfulServerTest.php b/tests/unit/RestfulServerTest.php similarity index 100% rename from tests/RestfulServerTest.php rename to tests/unit/RestfulServerTest.php diff --git a/tests/RestfulServerTest.yml b/tests/unit/RestfulServerTest.yml similarity index 91% rename from tests/RestfulServerTest.yml rename to tests/unit/RestfulServerTest.yml index a9eb6eb..63dd21e 100644 --- a/tests/RestfulServerTest.yml +++ b/tests/unit/RestfulServerTest.yml @@ -49,7 +49,9 @@ SilverStripe\RestfulServer\Tests\Stubs\RestfulServerTestAuthor: Firstname: Author 3 author4: FirstName: Author 4 - RelatedAuthors: =>SilverStripe\RestfulServer\Tests\Stubs\RestfulServerTestAuthor.author2,=>SilverStripe\RestfulServer\Tests\Stubs\RestfulServerTestAuthor.author3 + RelatedAuthors: + - =>SilverStripe\RestfulServer\Tests\Stubs\RestfulServerTestAuthor.author2 + - =>SilverStripe\RestfulServer\Tests\Stubs\RestfulServerTestAuthor.author3 SilverStripe\RestfulServer\Tests\Stubs\RestfulServerTestAuthorRating: rating1: Rating: 3 diff --git a/tests/Stubs/RestfulServerTestAuthor.php b/tests/unit/Stubs/RestfulServerTestAuthor.php similarity index 100% rename from tests/Stubs/RestfulServerTestAuthor.php rename to tests/unit/Stubs/RestfulServerTestAuthor.php diff --git a/tests/Stubs/RestfulServerTestAuthorRating.php b/tests/unit/Stubs/RestfulServerTestAuthorRating.php similarity index 100% rename from tests/Stubs/RestfulServerTestAuthorRating.php rename to tests/unit/Stubs/RestfulServerTestAuthorRating.php diff --git a/tests/Stubs/RestfulServerTestComment.php b/tests/unit/Stubs/RestfulServerTestComment.php similarity index 100% rename from tests/Stubs/RestfulServerTestComment.php rename to tests/unit/Stubs/RestfulServerTestComment.php diff --git a/tests/Stubs/RestfulServerTestPage.php b/tests/unit/Stubs/RestfulServerTestPage.php similarity index 100% rename from tests/Stubs/RestfulServerTestPage.php rename to tests/unit/Stubs/RestfulServerTestPage.php diff --git a/tests/Stubs/RestfulServerTestSecretThing.php b/tests/unit/Stubs/RestfulServerTestSecretThing.php similarity index 100% rename from tests/Stubs/RestfulServerTestSecretThing.php rename to tests/unit/Stubs/RestfulServerTestSecretThing.php