nikolajlovenhardt/laravel-keen-io

View on GitHub
src/LaravelKeenIO/Services/KeenIOService.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
/*
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This software consists of voluntary contributions made by many individuals
 * and is licensed under the MIT license.
 */

namespace LaravelKeenIO\Services;

use KeenIO\Client\KeenIOClient;
use LaravelKeenIO\Exceptions\ConfigurationException;
use LaravelKeenIO\Options\ModuleOptions;
use LaravelKeenIO\Options\Project;

class KeenIOService implements KeenIOServiceInterface
{
    const DEFAULT_VERSION = '3.0';

    /** @var ModuleOptions */
    protected $moduleOptions;

    /**
     * KeenIOService constructor.
     * @param ModuleOptions $moduleOptions
     */
    public function __construct(ModuleOptions $moduleOptions)
    {
        $this->moduleOptions = $moduleOptions;
    }

    /**
     * @param null $project
     * @return KeenIOClient
     * @throws ConfigurationException
     */
    public function client($project = null)
    {
        $moduleOptions = $this->moduleOptions;

        if (is_null($project)) {
            $project = $moduleOptions->get('default');
        }

        $projects = $this->getProjects();

        if (!isset($projects[$project])) {
            throw new ConfigurationException(sprintf(
                'No configuration found for \'%s\'',
                $project
            ));
        }

        $config = $projects[$project];

        // Version
        if (is_null($config->get('version'))) {
            $config->set('version', self::DEFAULT_VERSION);
        }

        return KeenIOClient::factory([
            'projectId' => $config->get('projectId'),
            'masterKey'  => $config->get('masterKey'),
            'writeKey'  => $config->get('writeKey'),
            'readKey'   => $config->get('readKey'),
            'version'   => $config->get('version'),
        ]);
    }

    /**
     * Get projects
     *
     * @return array|\LaravelKeenIO\Options\Project[]
     */
    protected function getProjects()
    {
        /** @var Project[]|array $projects */
        $projects = [];

        foreach ($this->moduleOptions->get('projects') as $title => $project) {
            $projects[$title] = new Project($project);
        }

        return $projects;
    }
}