protected function get($key, $value = false)
    {
        if (is_null($key)) {
            throw new \InvalidArgumentException('Null argument passed to '.__METHOD__);
        }

        $config = [];
        $config = static::$config;

        if (empty($config)) {
            throw new \Exception('Config stack is empty!');
        }

        if ($value == false && array_key_exists($key, $config)) {
            return isset($config[$key]) ? $config[$key] : null;
        }

        if (array_key_exists($key, $config) && $value == true) {
            return $config[$key][$value];
        }

        /*
         | We will access array value as string with dot separator
         | 'module.config' => [
         |    "config"  => [
         |        "name" => "Welcome To Module"
         |    ]
         | ]
         | Config::get('module-config.config.name');
         */
        return ArrayAccessor::make($config, function ($a) use ($key) {
            return $a->toString($key);
        });
    }