Chris@0: values = $values; Chris@0: $this->hasDefault = array_filter($this->values, function ($value) { Chris@0: return isset($value); Chris@0: }); Chris@0: $this->descriptions = []; Chris@0: $this->defaultDefault = $defaultDefault; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Return just the key : default values mapping Chris@0: * Chris@0: * @return array Chris@0: */ Chris@0: public function getValues() Chris@0: { Chris@0: return $this->values; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Return true if this set of options is empty Chris@0: * Chris@0: * @return Chris@0: */ Chris@0: public function isEmpty() Chris@0: { Chris@0: return empty($this->values); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Check to see whether the speicifed key exists in the collection. Chris@0: * Chris@0: * @param string $key Chris@0: * @return boolean Chris@0: */ Chris@0: public function exists($key) Chris@0: { Chris@0: return array_key_exists($key, $this->values); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get the value of one entry. Chris@0: * Chris@0: * @param string $key The key of the item. Chris@0: * @return string Chris@0: */ Chris@0: public function get($key) Chris@0: { Chris@0: if (array_key_exists($key, $this->values)) { Chris@0: return $this->values[$key]; Chris@0: } Chris@0: return $this->defaultDefault; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get the description of one entry. Chris@0: * Chris@0: * @param string $key The key of the item. Chris@0: * @return string Chris@0: */ Chris@0: public function getDescription($key) Chris@0: { Chris@0: if (array_key_exists($key, $this->descriptions)) { Chris@0: return $this->descriptions[$key]; Chris@0: } Chris@0: return ''; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Add another argument to this command. Chris@0: * Chris@0: * @param string $key Name of the argument. Chris@0: * @param string $description Help text for the argument. Chris@0: * @param mixed $defaultValue The default value for the argument. Chris@0: */ Chris@0: public function add($key, $description = '', $defaultValue = null) Chris@0: { Chris@0: if (!$this->exists($key) || isset($defaultValue)) { Chris@0: $this->values[$key] = isset($defaultValue) ? $defaultValue : $this->defaultDefault; Chris@0: } Chris@0: unset($this->descriptions[$key]); Chris@0: if (!empty($description)) { Chris@0: $this->descriptions[$key] = $description; Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Change the default value of an entry. Chris@0: * Chris@0: * @param string $key Chris@0: * @param mixed $defaultValue Chris@0: */ Chris@0: public function setDefaultValue($key, $defaultValue) Chris@0: { Chris@0: $this->values[$key] = $defaultValue; Chris@0: $this->hasDefault[$key] = true; Chris@0: return $this; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Check to see if the named argument definitively has a default value. Chris@0: * Chris@0: * @param string $key Chris@0: * @return bool Chris@0: */ Chris@0: public function hasDefault($key) Chris@0: { Chris@0: return array_key_exists($key, $this->hasDefault); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Remove an entry Chris@0: * Chris@0: * @param string $key The entry to remove Chris@0: */ Chris@0: public function clear($key) Chris@0: { Chris@0: unset($this->values[$key]); Chris@0: unset($this->descriptions[$key]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Rename an existing option to something else. Chris@0: */ Chris@0: public function rename($oldName, $newName) Chris@0: { Chris@0: $this->add($newName, $this->getDescription($oldName), $this->get($oldName)); Chris@0: $this->clear($oldName); Chris@0: } Chris@0: }