Sha256: 2b6fb5d3b3861601a6b4ff6d65689f0f65223f228a05d705c08ba224880513a2

Contents?: true

Size: 1.22 KB

Versions: 7

Compression:

Stored size: 1.22 KB

Contents

<?php

namespace Predis\Options;

class CustomOption implements IOption {
    private $_validate;
    private $_default;

    public function __construct(Array $options) {
        $this->_validate = $this->filterCallable($options, 'validate');
        $this->_default  = $this->filterCallable($options, 'default');
    }

    private function filterCallable($options, $key) {
        if (!isset($options[$key])) {
            return;
        }
        $callable = $options[$key];
        if (is_callable($callable)) {
            return $callable;
        }
        throw new \InvalidArgumentException("The parameter $key must be callable");
    }

    public function validate($value) {
        if (isset($value)) {
            if ($this->_validate === null) {
                return $value;
            }
            $validator = $this->_validate;
            return $validator($value);
        }
    }

    public function getDefault() {
        if (!isset($this->_default)) {
            return;
        }
        $default = $this->_default;
        return $default();
    }

    public function __invoke($value) {
        if (isset($value)) {
            return $this->validate($value);
        }
        return $this->getDefault();
    }
}

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
appstats-0.25.1 doc/benchmarks/Predis/Options/CustomOption.php
appstats-0.25.0 doc/benchmarks/Predis/Options/CustomOption.php
appstats-0.24.0 doc/benchmarks/Predis/Options/CustomOption.php
appstats-0.23.5 doc/benchmarks/Predis/Options/CustomOption.php
appstats-0.23.4 doc/benchmarks/Predis/Options/CustomOption.php
appstats-0.23.3 doc/benchmarks/Predis/Options/CustomOption.php
appstats-0.23.2 doc/benchmarks/Predis/Options/CustomOption.php