spotonlive/laravel-facebook-ads

View on GitHub
src/LaravelFacebookAds/LaravelFacebookAdsProvider.php

Summary

Maintainability
A
0 mins
Test Coverage
F
0%
<?php

namespace LaravelFacebookAds;

use Illuminate\Foundation\Application;
use Illuminate\Support\ServiceProvider;
use LaravelFacebookAds\Options\ModuleOptions;
use LaravelFacebookAds\Services\FacebookAdsService;
use LaravelFacebookAds\Http\Controllers\TokenController;
use LaravelFacebookAds\Services\FacebookAdsServiceInterface;
use LaravelFacebookAds\Exceptions\MissingConfigurationException;

/**
 * Class LaravelFacebookAdsProvider
 * @package LaravelFacebookAds
 */
class LaravelFacebookAdsProvider extends ServiceProvider
{
    /**
     * Boot
     */
    public function boot()
    {
        $this->publishes([
            __DIR__ . '/../../config/config.php' => config_path('facebook-ads.php'),
        ]);

        $this->loadViewsFrom(
            __DIR__ . '/../../resources/views',
            'fb-token'
        );

        // Routes
        if (! $this->app->routesAreCached()) {
            require __DIR__ . '/Http/routes.php';
        }
    }

    /**
     * Register package
     */
    public function register()
    {
        $this->mergeConfig();
        $this->registerServices();
        $this->registerControllers();
        $this->registerCommands();
    }

    /**
     * Merge config
     */
    private function mergeConfig()
    {
        $this->mergeConfigFrom(
            __DIR__ . '/../../config/config.php',
            'facebook-ads'
        );
    }

    /**
     * Register services
     */
    protected function registerServices()
    {
        // Service: \LaravelFacebookAds\Services\FacebookAdsService
        $this->app->bind(FacebookAdsService::class, function () {
            return new FacebookAdsService($this->getModuleOptions());
        });

        // Client: \LaravelFacebookAds\Clients\Facebook
        $this->app->bind(Clients\Facebook::class, function (Application $app) {
            /** @var FacebookAdsServiceInterface $facebookAdsService */
            $facebookAdsService = $app->make(FacebookAdsService::class);

            return new Clients\Facebook($facebookAdsService);
        });
    }

    /**
     * Register controllers
     */
    protected function registerControllers()
    {
        // Service: \LaravelFacebookAds\Http\Controllers\TokenController
        $this->app->bind(TokenController::class, function () {
            return new TokenController($this->getModuleOptions());
        });
    }

    /**
     * Register commands
     */
    protected function registerCommands()
    {
        $this->commands([
            Console\App\GenerateTokenCommand::class,
            Console\User\GenerateTokenCommand::class,
        ]);
    }

    /**
     * Get module options
     *
     * @return ModuleOptions
     * @throws MissingConfigurationException
     */
    protected function getModuleOptions()
    {
        if (!$config = config('facebook-ads')) {
            throw new MissingConfigurationException();
        }

        return new ModuleOptions($config);
    }
}