Skip to content

Commit

Permalink
feat: Add pagination support
Browse files Browse the repository at this point in the history
  • Loading branch information
AuditeMarlow committed Nov 12, 2018
1 parent 1e13618 commit c0e3849
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 1 deletion.
3 changes: 2 additions & 1 deletion composer.json
Expand Up @@ -12,8 +12,9 @@
],
"require": {
"php": "^7.0",
"illuminate/console": "^5.5",
"illuminate/database": "^5.5",
"illuminate/console": "^5.5"
"illuminate/pagination": "^5.5"
},
"require-dev": {
"phpunit/phpunit": "^6.0"
Expand Down
17 changes: 17 additions & 0 deletions src/AbstractRepository.php
Expand Up @@ -2,6 +2,7 @@

namespace Guardian360\Repository;

use Illuminate\Pagination\Paginator;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Container\Container as App;
use Guardian360\Repository\Exceptions\RepositoryException;
Expand Down Expand Up @@ -116,6 +117,22 @@ public function findAllBy(string $attribute, $value, array $columns = ['*'])
return $this->buildQuery()->where($attribute, $value)->get($columns);
}

/**
* @param int $perPage
* @param int $page
* @return \Illuminate\Pagination\Paginator
*/
public function paginate(int $perPage = 10, int $page = 1)
{
Paginator::currentPageResolver(function () use ($perPage, $page) {
$start = ($page - 1) * $perPage;

return $start / $perPage + 1;
});

return $this->buildQuery()->paginate($perPage);
}

/**
* @param array $data
* @return \Illuminate\Database\Eloquent\Model
Expand Down
7 changes: 7 additions & 0 deletions src/Contracts/RepositoryContract.php
Expand Up @@ -32,6 +32,13 @@ public function findBy(string $attribute, $value, array $columns = ['*']);
*/
public function findAllBy(string $attribute, $value, array $columns = ['*']);

/**
* @param int $perPage
* @param int $page
* @return mixed
*/
public function paginate(int $perPage = 10, int $page = 1);

/**
* @param array $data
* @return mixed
Expand Down
10 changes: 10 additions & 0 deletions tests/UserRepositoryTest.php
Expand Up @@ -77,6 +77,16 @@ public function itCanFindAllUsersByAttribute()
$this->assertCount(6, $this->users->findAllBy('role', ['admin', 'user']));
}

/** @test */
public function itCanPaginateUsers()
{
$users = $this->users->paginate(5, 2);

$this->assertCount(1, $users->items());
$this->assertEquals(2, $users->currentPage());
$this->assertEquals(6, $users->total());
}

/** @test */
public function itCanAddNewUsersToItsCollection()
{
Expand Down

0 comments on commit c0e3849

Please sign in to comment.