<commit_before><?php
namespace Kwkm\MkLiveStatusClient;

use \InvalidArgumentException;

/**
 * Class Configuration
 *
 * @package Kwkm\MkLiveStatusClient
 * @property-read string $socketType      接続方式(unix or tcp)
 * @property-read string $socketPath      ソケットファイル
 * @property-read string $socketAddress   TCP接続時のIPアドレス
 * @property-read string $socketPort      TCP接続時のポート
 * @property-read array $socketTimeout    TCP接続時のタイムアウト秒数
 * @author <NAME> <<EMAIL>>
 * @license MIT
 */
class Configuration
{
    /**
     * 接続方式(unix or tcp)
     * @var string
     */
    protected $socketType = "unix";

    /**
     * ソケットファイル
     * @var string
     */
    protected $socketPath = "/var/run/nagios/rw/live";

    /**
     * TCP接続時のIPアドレス
     * @var string
     */
    protected $socketAddress = "";

    /**
     * TCP接続時のポート
     * @var string
     */
    protected $socketPort = "";

    /**
     * TCP接続時のタイムアウト秒数
     * @var array
     * @link http://php.net/manual/en/function.socket-set-option.php
     */
    protected $socketTimeout = array();

    /**
     * コンストラクタ
     *
     * @param array $conf
     * @throw \BadFunctionCallException
     * @throw \InvalidArgumentException
     */
    public function __construct(array $conf)
    {
        $this->assignProperty($conf);

        $this->validateProperty();
    }

    public function __get($property)
    {
        if (property_exists($this, $property)) {
            return $this->{$property};
        }

        throw new InvalidArgumentException("The option '$property' is not recognised.");
    }

    /**
     * 設定をプロパティに割り当て
     *
     * @param array $conf
     */
    private function assignProperty($conf)
    {
        foreach ($conf as $key => $value) {
            $this->setProperty($key, $value);
        }
    }

    /**
     * プロパティに値をセット
     * @param $property
     * @param $value
     */
    private function setProperty($property, $value)
    {
        if (property_exists($this, $property)) {
            $this->{$property} = $value;
        }

        throw new InvalidArgumentException("The option '$property' is not recognised.");
    }

    /**
     * プロパティの値の妥当性を確認
     */
    private function validateProperty()
    {
        switch ($this->socketType) {
            case "unix":
                $this->validatePropetrySocketPath();
                $this->checkAccessSocketPath();
                break;
            case "tcp":
                $this->validatePropetrySocketAddress();
                $this->validatePropetrySocketPort();<commit_msg>Failure of a unit test is corrected.<commit_after><?php
namespace Kwkm\MkLiveStatusClient;

use \InvalidArgumentException;

/**
 * Class Configuration
 *
 * @package Kwkm\MkLiveStatusClient
 * @property-read string $socketType      接続方式(unix or tcp)
 * @property-read string $socketPath      ソケットファイル
 * @property-read string $socketAddress   TCP接続時のIPアドレス
 * @property-read string $socketPort      TCP接続時のポート
 * @property-read array $socketTimeout    TCP接続時のタイムアウト秒数
 * @author <NAME> <<EMAIL>>
 * @license MIT
 */
class Configuration
{
    /**
     * 接続方式(unix or tcp)
     * @var string
     */
    protected $socketType = "unix";

    /**
     * ソケットファイル
     * @var string
     */
    protected $socketPath = "/var/run/nagios/rw/live";

    /**
     * TCP接続時のIPアドレス
     * @var string
     */
    protected $socketAddress = "";

    /**
     * TCP接続時のポート
     * @var string
     */
    protected $socketPort = "";

    /**
     * TCP接続時のタイムアウト秒数
     * @var array
     * @link http://php.net/manual/en/function.socket-set-option.php
     */
    protected $socketTimeout = array();

    /**
     * コンストラクタ
     *
     * @param array $conf
     * @throw \BadFunctionCallException
     * @throw \InvalidArgumentException
     */
    public function __construct(array $conf)
    {
        $this->assignProperty($conf);

        $this->validateProperty();
    }

    public function __get($property)
    {
        if (property_exists($this, $property)) {
            return $this->{$property};
        }

        throw new InvalidArgumentException("The option '$property' is not recognised.");
    }

    /**
     * 設定をプロパティに割り当て
     *
     * @param array $conf
     */
    private function assignProperty($conf)
    {
        foreach ($conf as $key => $value) {
            $this->setProperty($key, $value);
        }
    }

    /**
     * プロパティに値をセット
     * @param $property
     * @param $value
     */
    private function setProperty($property, $value)
    {
        if (false === property_exists($this, $property)) {
            throw new InvalidArgumentException("The option '$property' is not recognised.");
        }

        $this->{$property} = $value;
    }

    /**
     * プロパティの値の妥当性を確認
     */
    private function validateProperty()
    {
        switch ($this->socketType) {
            case "unix":
                $this->validatePropetrySocketPath();
                $this->checkAccessSocketPath();
                break;
            case "tcp":
                $this->validatePropetrySocketAddress();
                $this->validatePropetrySocketPort();
{'fraction_non_alphanumeric': 0.12825024437927665, 'fraction_numerical': 0.0, 'mean_word_length': 2.0598086124401913, 'pattern_counts': {'":': 4, '<': 11, '<?xml version=': 0, '>': 31, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '405196', 'n_tokens_mistral': 1665, 'n_tokens_neox': 1638, 'n_words': 308}