DevGroup-ru/yii2-tag-dependency-helper

View on GitHub
src/NamingHelper.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace DevGroup\TagDependencyHelper;

use Yii;
use yii\base\InvalidParamException;
use yii\db\ActiveRecord;

class NamingHelper
{
    /**
     * Get object tag name.
     * @param string|ActiveRecord $class
     * @param mixed $id
     * @return string
     * @throws \yii\base\InvalidParamException
     */
    public static function getObjectTag($class, $id)
    {
        if (is_object($class) && $class instanceof ActiveRecord) {
            $class = $class->className();
        } elseif (!is_string($class)) {
            throw new InvalidParamException('Param $class must be a string or an object.');
        }
        return $class . '[ObjectTag:' . self::getCacheKeyById($id) . ']';
    }

    /**
     * Get common tag name.
     * @param string|ActiveRecord $class
     * @return string
     * @throws \yii\base\InvalidParamException
     */
    public static function getCommonTag($class)
    {
        if (is_object($class) && $class instanceof ActiveRecord) {
            $class = $class->className();
        } elseif (!is_string($class)) {
            throw new InvalidParamException('Param $class must be a string or an object.');
        }
        return $class . '[CommonTag]';
    }

    /**
     * Get composite tag name from model fields.
     * @param string|ActiveRecord $class
     * @param array $fields - ['field_model' => 'value']
     * @return string
     * @throws \yii\base\InvalidParamException
     */
    public static function getCompositeTag($class, $fields)
    {
        if (is_object($class) && $class instanceof ActiveRecord) {
            $class = $class->className();
        } elseif (!is_string($class)) {
            throw new InvalidParamException('Param $class must be a string or an object.');
        }

        return $class .
            '[CompositeTag(' .
            self::getCacheKeyById($fields, true) .
            '):(' .
            self::getCacheKeyById($fields) .
            ')]';
    }

    /**
     * Return string for cache-key from varios primary key
     * @param mixed $id
     * @param bool $keys if true, will used keys array for build the cache key
     * @return string
     */
    public static function getCacheKeyById($id, $keys = false)
    {
        if (is_array($id)) {
            ksort($id);
            $id = ($keys) ? array_keys($id) : array_values($id);

            return implode('|', $id);
        }

        return (string)$id;
    }


}