-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
vagrant
committed
Mar 17, 2015
0 parents
commit 8dec905
Showing
16 changed files
with
642 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
/vendor | ||
composer.phar | ||
composer.lock | ||
.DS_Store |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
language: php | ||
|
||
php: | ||
- 5.4 | ||
- 5.5 | ||
- 5.6 | ||
- hhvm | ||
|
||
before_script: | ||
- travis_retry composer self-update | ||
- travis_retry composer install --prefer-source --no-interaction --dev | ||
|
||
script: phpunit |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
{ | ||
"name": "cyvelnet/laravel5-fractal", | ||
"description": "", | ||
"authors": [ | ||
{ | ||
"name": "Cyvelnet", | ||
"email": "cyvelnet@gmail.com" | ||
} | ||
], | ||
"require": { | ||
"php": ">=5.4.0", | ||
"illuminate/support": "5.0.*", | ||
"league/fractal" :"0.11.*" | ||
}, | ||
"autoload": { | ||
"classmap": [ | ||
"src/migrations" | ||
], | ||
"psr-0": { | ||
"Cyvelnet\\Laravel5Fractal\\": "src/" | ||
} | ||
}, | ||
"minimum-stability": "stable" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<phpunit backupGlobals="false" | ||
backupStaticAttributes="false" | ||
bootstrap="vendor/autoload.php" | ||
colors="true" | ||
convertErrorsToExceptions="true" | ||
convertNoticesToExceptions="true" | ||
convertWarningsToExceptions="true" | ||
processIsolation="false" | ||
stopOnFailure="false" | ||
syntaxCheck="false" | ||
> | ||
<testsuites> | ||
<testsuite name="Package Test Suite"> | ||
<directory suffix=".php">./tests/</directory> | ||
</testsuite> | ||
</testsuites> | ||
</phpunit> |
159 changes: 159 additions & 0 deletions
159
src/Cyvelnet/Laravel5Fractal/Commands/TransformerGeneratorCommand.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
<?php namespace Cyvelnet\Laravel5Fractal\Commands; | ||
|
||
use Illuminate\Config\Repository as Config; | ||
use Illuminate\Console\Command; | ||
use Illuminate\Filesystem\Filesystem as File; | ||
use Illuminate\View\Factory as View; | ||
use Symfony\Component\Console\Input\InputArgument; | ||
use Symfony\Component\Console\Input\InputOption; | ||
|
||
/** | ||
* Class TransformerGeneratorCommand | ||
* @package Cyvelnet\Laravel5Fractal\Commands | ||
*/ | ||
class TransformerGeneratorCommand extends Command | ||
{ | ||
|
||
/** | ||
* The console command name. | ||
* | ||
* @var string | ||
*/ | ||
protected $name = 'make:transformer'; | ||
|
||
/** | ||
* The console command description. | ||
* | ||
* @var string | ||
*/ | ||
protected $description = 'Display an inspiring quote'; | ||
/** | ||
* @var | ||
*/ | ||
private $view; | ||
/** | ||
* @var | ||
*/ | ||
private $namespace; | ||
/** | ||
* @var | ||
*/ | ||
private $directory; | ||
/** | ||
* @var Config | ||
*/ | ||
private $config; | ||
/** | ||
* @var File | ||
*/ | ||
private $file; | ||
|
||
/** | ||
* @param View $view | ||
*/ | ||
function __construct(Config $config, View $view, File $file) | ||
{ | ||
parent::__construct(); | ||
$this->config = $config; | ||
$this->view = $view; | ||
$this->file = $file; | ||
} | ||
|
||
/** | ||
* Execute the console command. | ||
* | ||
* @return mixed | ||
*/ | ||
public function handle() | ||
{ | ||
try { | ||
|
||
// replace all space after ucwords | ||
$classname = preg_replace('/\s+/', '', ucwords($this->argument('name'))); | ||
|
||
//retrieves store directory configuration | ||
$directory = app_path($this->option('directory') ? $this->option('directory') : $this->config->get('fractal | ||
.directory')); | ||
//retrieves namespace configuration | ||
$namespace = $this->option('namespace') ? $this->option('namespace') : $this->config->get('fractal.namespace'); | ||
is_dir($directory) ?: $this->file->makeDirectory($directory, 0755, true); | ||
|
||
$create = true; | ||
|
||
if ($this->file->exists("{$directory}/{$classname}.php")) { | ||
if ($usrResponse = strtolower($this->ask("The file ['{$classname}'] already exists, overwrite? [y/n]", | ||
null)) | ||
) { | ||
switch ($usrResponse) { | ||
case 'y' : | ||
$tempFileName = "{$directory}/{$classname}.php"; | ||
|
||
$prefix = '_'; | ||
while ($this->file->exists($tempFileName)) { | ||
$prefix .= '_'; | ||
$tempFileName = "{$directory}/{$prefix}{$classname}.php"; | ||
} | ||
rename("{$directory}/{$classname}.php", $tempFileName); | ||
break; | ||
default: | ||
$this->info('No file has been created.'); | ||
$create = false; | ||
} | ||
} | ||
|
||
} | ||
|
||
// loading transformers template from views | ||
$view = \View::make('fractal::transformer', | ||
['namespace' => $namespace, 'classname' => $classname]); | ||
|
||
|
||
if ($create) { | ||
$this->file->put("{$directory}/{$classname}.php", $view->render()); | ||
$this->info("The class {$classname} generated successfully."); | ||
} | ||
|
||
|
||
} catch (\Exception $e) { | ||
$this->error('Transformer creation failed.'); | ||
} | ||
|
||
|
||
} | ||
|
||
/** | ||
* @return array | ||
*/ | ||
protected function getArguments() | ||
{ | ||
return array( | ||
array('name', InputArgument::REQUIRED, 'Name of the transformer class'), | ||
); | ||
} | ||
|
||
/** | ||
* @return array | ||
*/ | ||
protected function getOptions() | ||
{ | ||
|
||
return array( | ||
array( | ||
'directory', | ||
null, | ||
InputOption::VALUE_OPTIONAL, | ||
'transformer store directory (relative to App\)', | ||
null | ||
), | ||
array( | ||
'namespace', | ||
null, | ||
InputOption::VALUE_OPTIONAL, | ||
'transformer namespace', | ||
null | ||
), | ||
); | ||
} | ||
|
||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
<?php namespace Cyvelnet\Laravel5Fractal\Facades; | ||
|
||
use Illuminate\Support\Facades\Facade; | ||
|
||
/** | ||
* Class Fractal | ||
* @package Cyvelnet\Laravel5Fractal\Facades | ||
*/ | ||
class Fractal extends Facade | ||
{ | ||
/** | ||
* @return string | ||
*/ | ||
protected static function getFacadeAccessor() | ||
{ | ||
return 'fractal'; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
<?php namespace Cyvelnet\Laravel5Fractal; | ||
|
||
use Cyvelnet\Laravel5Fractal\Paginators\IlluminateLengthAwarePaginatorAdapter; | ||
use Illuminate\Pagination\LengthAwarePaginator; | ||
use Illuminate\Pagination\Paginator; | ||
use League\Fractal\Manager; | ||
use League\Fractal\Pagination\IlluminatePaginatorAdapter; | ||
use League\Fractal\Pagination\PaginatorInterface; | ||
use League\Fractal\Resource\Collection; | ||
use League\Fractal\Resource\Item; | ||
use League\Fractal\Resource\ResourceInterface; | ||
use League\Fractal\TransformerAbstract; | ||
use Response; | ||
|
||
/** | ||
* Class FractalServices | ||
* @package Cyvelnet\Laravel5Fractal | ||
*/ | ||
class FractalServices | ||
{ | ||
|
||
/** | ||
* @var Manager | ||
*/ | ||
private $manager; | ||
|
||
/** | ||
* @param Manager $fractalManager | ||
*/ | ||
public function __construct(Manager $manager) | ||
{ | ||
$this->manager = $manager; | ||
} | ||
|
||
/** | ||
* @return mixed | ||
*/ | ||
public function getManager() | ||
{ | ||
return $this->manager; | ||
} | ||
|
||
/** | ||
* includes sub level data transformer. | ||
* @param array $includes | ||
* @return $this | ||
*/ | ||
public function includes($includes = []) | ||
{ | ||
$this->manager->parseIncludes($includes); | ||
return $this; | ||
} | ||
|
||
/** | ||
* set data transformation recursion limit | ||
* @param $limit | ||
* @return $this | ||
*/ | ||
public function setRecursionLimit($limit) | ||
{ | ||
$this->manager->setRecursionLimit($limit); | ||
return $this; | ||
} | ||
|
||
/** | ||
* set data serializer | ||
* @param \League\Fractal\Serializer\SerializerAbstract $serializer | ||
* @return $this | ||
*/ | ||
public function setSerializer(\League\Fractal\Serializer\SerializerAbstract $serializer) | ||
{ | ||
$this->manager->setSerializer($serializer); | ||
return $this; | ||
} | ||
|
||
/** | ||
* transform item | ||
* @param $item | ||
* @param TransformerAbstract $transformer | ||
* @param null $resourceKey | ||
* @return mixed | ||
*/ | ||
public function item($item, TransformerAbstract $transformer, $resourceKey = null) | ||
{ | ||
$resource = new Item($item, $transformer, $resourceKey); | ||
|
||
return $this->response($resource); | ||
} | ||
|
||
/** | ||
* transform a collection | ||
* @param $items | ||
* @param TransformerAbstract $transformer | ||
* @param null $resourceKey | ||
* @param PaginatorInterface $adapter | ||
* @return mixed | ||
* @internal param Closure $callback | ||
*/ | ||
public function collection( | ||
$items, | ||
TransformerAbstract $transformer, | ||
$resourceKey = null, | ||
PaginatorInterface $adapter = null | ||
) { | ||
$resources = new Collection($items, $transformer, $resourceKey); | ||
|
||
if ($items instanceof Paginator OR $items instanceof LengthAwarePaginator) { | ||
|
||
// for some reason in laravel5, we might not always receive a LengthAwarePaginator | ||
if ($items instanceof LengthAwarePaginator and is_null($adapter)) { | ||
$adapter = new IlluminateLengthAwarePaginatorAdapter($items); | ||
} else { | ||
if ($items instanceof Paginator and is_null($adapter)) { | ||
$adapter = new IlluminatePaginatorAdapter($items); | ||
} | ||
} | ||
|
||
$resources->setPaginator($adapter); | ||
|
||
} | ||
return $this->response($resources); | ||
} | ||
|
||
/** | ||
* return result array as json | ||
* @param ResourceInterface $resource | ||
* @return mixed | ||
*/ | ||
private function response(ResourceInterface $resource) | ||
{ | ||
$fratalData = $this->manager->createData($resource); | ||
return Response::json($fratalData->toArray()); | ||
} | ||
} |
Oops, something went wrong.