You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
1.9 KiB
103 lines
1.9 KiB
<?php |
|
/** |
|
* Case-insensitive dictionary, suitable for HTTP headers |
|
* |
|
* @package Requests |
|
* @subpackage Utilities |
|
*/ |
|
|
|
/** |
|
* Case-insensitive dictionary, suitable for HTTP headers |
|
* |
|
* @package Requests |
|
* @subpackage Utilities |
|
*/ |
|
class Requests_Utility_CaseInsensitiveDictionary implements ArrayAccess, IteratorAggregate { |
|
/** |
|
* Actual item data |
|
* |
|
* @var array |
|
*/ |
|
protected $data = array(); |
|
|
|
/** |
|
* Creates a case insensitive dictionary. |
|
* |
|
* @param array $data Dictionary/map to convert to case-insensitive |
|
*/ |
|
public function __construct(array $data = array()) { |
|
foreach ($data as $key => $value) { |
|
$this->offsetSet($key, $value); |
|
} |
|
} |
|
|
|
/** |
|
* Check if the given item exists |
|
* |
|
* @param string $key Item key |
|
* @return boolean Does the item exist? |
|
*/ |
|
public function offsetExists($key) { |
|
$key = strtolower($key); |
|
return isset($this->data[$key]); |
|
} |
|
|
|
/** |
|
* Get the value for the item |
|
* |
|
* @param string $key Item key |
|
* @return string Item value |
|
*/ |
|
public function offsetGet($key) { |
|
$key = strtolower($key); |
|
if (!isset($this->data[$key])) { |
|
return null; |
|
} |
|
|
|
return $this->data[$key]; |
|
} |
|
|
|
/** |
|
* Set the given item |
|
* |
|
* @throws Requests_Exception On attempting to use dictionary as list (`invalidset`) |
|
* |
|
* @param string $key Item name |
|
* @param string $value Item value |
|
*/ |
|
public function offsetSet($key, $value) { |
|
if ($key === null) { |
|
throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset'); |
|
} |
|
|
|
$key = strtolower($key); |
|
$this->data[$key] = $value; |
|
} |
|
|
|
/** |
|
* Unset the given header |
|
* |
|
* @param string $key |
|
*/ |
|
public function offsetUnset($key) { |
|
unset($this->data[strtolower($key)]); |
|
} |
|
|
|
/** |
|
* Get an iterator for the data |
|
* |
|
* @return ArrayIterator |
|
*/ |
|
public function getIterator() { |
|
return new ArrayIterator($this->data); |
|
} |
|
|
|
/** |
|
* Get the headers as an array |
|
* |
|
* @return array Header data |
|
*/ |
|
public function getAll() { |
|
return $this->data; |
|
} |
|
}
|
|
|