Behavior.php

Namespace

TYPO3\PharStreamWrapper

File

misc/typo3/phar-stream-wrapper/src/Behavior.php

View source
<?php

namespace TYPO3\PharStreamWrapper;


/*
 * This file is part of the TYPO3 project.
 *
 * It is free software; you can redistribute it and/or modify it under the terms
 * of the MIT License (MIT). For the full copyright and license information,
 * please read the LICENSE file that was distributed with this source code.
 *
 * The TYPO3 project - inspiring people to share!
 */
class Behavior implements Assertable {
    const COMMAND_DIR_OPENDIR = 'dir_opendir';
    const COMMAND_MKDIR = 'mkdir';
    const COMMAND_RENAME = 'rename';
    const COMMAND_RMDIR = 'rmdir';
    const COMMAND_STEAM_METADATA = 'stream_metadata';
    const COMMAND_STREAM_OPEN = 'stream_open';
    const COMMAND_UNLINK = 'unlink';
    const COMMAND_URL_STAT = 'url_stat';
    
    /**
     * @var string[]
     */
    private $availableCommands = array(
        self::COMMAND_DIR_OPENDIR,
        self::COMMAND_MKDIR,
        self::COMMAND_RENAME,
        self::COMMAND_RMDIR,
        self::COMMAND_STEAM_METADATA,
        self::COMMAND_STREAM_OPEN,
        self::COMMAND_UNLINK,
        self::COMMAND_URL_STAT,
    );
    
    /**
     * @var Assertable[]
     */
    private $assertions;
    
    /**
     * @param Assertable $assertable
     * @return static
     */
    public function withAssertion(Assertable $assertable) {
        $commands = func_get_args();
        array_shift($commands);
        $this->assertCommands($commands);
        $commands = $commands ?: $this->availableCommands;
        $target = clone $this;
        foreach ($commands as $command) {
            $target->assertions[$command] = $assertable;
        }
        return $target;
    }
    
    /**
     * @param string $path
     * @param string $command
     * @return bool
     */
    public function assert($path, $command) {
        $this->assertCommand($command);
        $this->assertAssertionCompleteness();
        return $this->assertions[$command]
            ->assert($path, $command);
    }
    
    /**
     * @param array $commands
     */
    private function assertCommands(array $commands) {
        $unknownCommands = array_diff($commands, $this->availableCommands);
        if (empty($unknownCommands)) {
            return;
        }
        throw new \LogicException(sprintf('Unknown commands: %s', implode(', ', $unknownCommands)), 1535189881);
    }
    private function assertCommand($command) {
        if (in_array($command, $this->availableCommands, true)) {
            return;
        }
        throw new \LogicException(sprintf('Unknown command "%s"', $command), 1535189882);
    }
    private function assertAssertionCompleteness() {
        $undefinedAssertions = array_diff($this->availableCommands, array_keys($this->assertions));
        if (empty($undefinedAssertions)) {
            return;
        }
        throw new \LogicException(sprintf('Missing assertions for commands: %s', implode(', ', $undefinedAssertions)), 1535189883);
    }

}

Classes

Title Deprecated Summary
Behavior

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.