/**
  * Register bindings in the container.
  */
 public function register()
 {
     Collection::macro('clean', function ($class = null) {
         return $this->map(function ($item) use($class) {
             return $item->clean($class);
         });
     });
     $this->registerCommands();
 }
 /**
  * Register the service provider.
  *
  * @return void
  */
 public function register()
 {
     Collection::macro('pipe', function ($callback) {
         return $callback($this);
     });
     Collection::macro('dd', function () {
         dd($this);
     });
     Collection::macro('clear', function () {
         return [];
     });
     Collection::macro('recollect', function ($items) {
         return collect($items);
     });
 }
 public function boot()
 {
     Collection::macro('associate', function ($key = null, $value = null) {
         return $this->reduce(function ($items, $values) use($key, $value) {
             $values = collect($values);
             list($key, $value) = is_null($key) ? $values->take(2)->values()->toArray() : [$values->get($key), $values->get($value)];
             return $items->put($key, $value);
         }, new static());
     });
     Collection::macro('fail', function ($rules = []) {
         return $this->filter(function ($item) use($rules) {
             return validator()->make($item, $rules)->fails();
         });
     });
     Collection::macro('ifAny', function ($callback) {
         if (!$this->isEmpty()) {
             return $callback($this);
         }
         return $this;
     });
     Collection::macro('ifEmpty', function ($callback) {
         if ($this->isEmpty()) {
             return $callback($this);
         }
         return $this;
     });
     Collection::macro('pass', function ($rules = []) {
         return $this->filter(function ($item) use($rules) {
             return validator()->make($item, $rules)->passes();
         });
     });
     Collection::macro('then', function ($callback) {
         return $callback($this);
     });
     Collection::macro('transpose', function () {
         $items = array_map(function (...$items) {
             return $items;
         }, ...$this->values());
         return new static($items);
     });
     Collection::macro('validate', function ($rules = []) {
         return $this->each(function ($item) use($rules) {
             if (validator()->make($item, $rules)->fails()) {
                 throw new ValidationException($this);
             }
         });
     });
 }
Example #4
0
 public function testMacroable()
 {
     // Foo() macro : unique values starting with A
     Collection::macro('foo', function () {
         return $this->filter(function ($item) {
             return strpos($item, 'a') === 0;
         })->unique()->values();
     });
     $c = new Collection(['a', 'a', 'aa', 'aaa', 'bar']);
     $this->assertSame(['a', 'aa', 'aaa'], $c->foo()->all());
 }
 /**
  * Register pagination macro.
  *
  * @return void
  */
 protected function registerMacro()
 {
     $name = $this->app['config']->get('lighthouse.pagination_macro') ?: 'toConnection';
     $decodeCursor = function (array $args) {
         return $this->decodeCursor($args);
     };
     Collection::macro($name, function (array $args) use($decodeCursor) {
         $first = isset($args['first']) ? $args['first'] : 15;
         $after = $decodeCursor($args);
         $currentPage = $first && $after ? floor(($first + $after) / $first) : 1;
         return new LengthAwarePaginator(collect($this->items)->forPage($currentPage, $first), count($this->items), $first, $currentPage);
     });
     Collection::macro('fetch', function ($relations) {
         if (count($this->items) > 0) {
             if (is_string($relations)) {
                 $relations = [$relations];
             }
             $query = $this->first()->newQuery()->with($relations);
             $this->items = app(QueryBuilder::class)->eagerLoadRelations($query, $this->items);
         }
         return $this;
     });
 }
     */
    Collection::macro('transpose', function () : Collection {
        $values = $this->values();
        $expectedLength = count($this->first());
        $diffLength = count(array_intersect_key(...$values));
        if ($expectedLength !== $diffLength) {
            throw new \LengthException("Element's length must be equal.");
        }
        $items = array_map(function (...$items) {
            return new static($items);
        }, ...$values);
        return new static($items);
    });
}
if (!Collection::hasMacro('partition')) {
    /*
     * Output a collection with two elements. Items in the first element did pass
     * the given $callback, items in the second element did not.
     *
     * @param callable $callback
     *
     * @return \Illuminate\Support\Collection
     */
    Collection::macro('partition', function (callable $callback) : Collection {
        $partitions = [new static(), new static()];
        foreach ($this->items as $item) {
            $partitions[!(int) $callback($item)][] = $item;
        }
        return new static($partitions);
    });
}
    });
}
if (!Collection::hasMacro('toEloquent')) {
    /**
     * Get a Database Eloquent collection instance from this collection.
     * Filters out any items that are not Models.
     *
     * @return \Illuminate\Database\Eloquent\Collection
     */
    Collection::macro('toEloquent', function () {
        return EloquentCollection::make($this->filter(function ($item) {
            return $item instanceof Model;
        })->all());
    });
}
if (!Collection::hasMacro('transpose')) {
    /**
     * Transpose a collection. Rows become columns, columns become rows.
     * E.g.     becomes
     *  [1,2]    [1,3]
     *  [3,4]    [2,4]
     *
     * @return \Illuminate\Support\Collection
     */
    Collection::macro('transpose', function () {
        $type = get_class($this);
        return $type::make(array_map(function (...$items) {
            return $items;
        }, ...$this->values()));
    });
}