Completed
Pull Request — 1.11.x (#1599)
by José
28:19
created

Requests_Response_Headers::getIterator()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Case-insensitive dictionary, suitable for HTTP headers
4
 *
5
 * @package Requests
6
 */
7
8
/**
9
 * Case-insensitive dictionary, suitable for HTTP headers
10
 *
11
 * @package Requests
12
 */
13
class Requests_Response_Headers extends Requests_Utility_CaseInsensitiveDictionary {
14
	/**
15
	 * Get the given header
16
	 *
17
	 * Unlike {@see self::getValues()}, this returns a string. If there are
18
	 * multiple values, it concatenates them with a comma as per RFC2616.
19
	 *
20
	 * Avoid using this where commas may be used unquoted in values, such as
21
	 * Set-Cookie headers.
22
	 *
23
	 * @param string $key
24
	 * @return string Header value
25
	 */
26 View Code Duplication
	public function offsetGet($key) {
27
		$key = strtolower($key);
28
		if (!isset($this->data[$key])) {
29
			return null;
30
		}
31
32
		return $this->flatten($this->data[$key]);
33
	}
34
35
	/**
36
	 * Set the given item
37
	 *
38
	 * @throws Requests_Exception On attempting to use dictionary as list (`invalidset`)
39
	 *
40
	 * @param string $key Item name
41
	 * @param string $value Item value
42
	 */
43
	public function offsetSet($key, $value) {
44
		if ($key === null) {
45
			throw new Requests_Exception('Object is a dictionary, not a list', 'invalidset');
46
		}
47
48
		$key = strtolower($key);
49
50
		if (!isset($this->data[$key])) {
51
			$this->data[$key] = array();
52
		}
53
54
		$this->data[$key][] = $value;
55
	}
56
57
	/**
58
	 * Get all values for a given header
59
	 *
60
	 * @param string $key
61
	 * @return array Header values
62
	 */
63 View Code Duplication
	public function getValues($key) {
64
		$key = strtolower($key);
65
		if (!isset($this->data[$key])) {
66
			return null;
67
		}
68
69
		return $this->data[$key];
70
	}
71
72
	/**
73
	 * Flattens a value into a string
74
	 *
75
	 * Converts an array into a string by imploding values with a comma, as per
76
	 * RFC2616's rules for folding headers.
77
	 *
78
	 * @param string|array $value Value to flatten
79
	 * @return string Flattened value
80
	 */
81
	public function flatten($value) {
82
		if (is_array($value)) {
83
			$value = implode(',', $value);
84
		}
85
86
		return $value;
87
	}
88
89
	/**
90
	 * Get an iterator for the data
91
	 *
92
	 * Converts the internal
93
	 * @return ArrayIterator
94
	 */
95
	public function getIterator() {
96
		return new Requests_Utility_FilteredIterator($this->data, array($this, 'flatten'));
97
	}
98
}
99