Skip to content

Commit d164805

Browse files
committed
Adding Parameters value related methods
1 parent 9af43a4 commit d164805

File tree

9 files changed

+66
-25
lines changed

9 files changed

+66
-25
lines changed

CHANGELOG.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ All Notable changes to `bakame/http-strucured-fields` will be documented in this
1111
- `InnerList::from` named constructor which accepts a variadic list of members items
1212
- `OrderedList::from` named constructor which accepts a variadic list of members items
1313
- `Token::fromString` named constructor which accepts `string` and `Stringable` object
14+
- `Parameter::values` returns an array of all the values contained inside the `Parameters` instance
1415
- [BC Break] `InnerList::fromList` to replace `InnerList::fromMembers`
1516
- [BC Break] `OrderedList::fromList` to replace `OrderedList::fromMembers`
17+
- [BC Break] `Parameter::value` to replace `InnerList::parameter` and `Item::parameter`
1618

1719
### Fixed
1820

@@ -28,8 +30,10 @@ All Notable changes to `bakame/http-strucured-fields` will be documented in this
2830

2931
### Removed
3032

31-
- [BC Break] `InnerList::fromMembers` to replace `InnerList::fromList`
32-
- [BC Break] `OrderedList::fromMembers` to replace `OrderedList::fromList`
33+
- [BC Break] `InnerList::fromMembers` replaced by `InnerList::fromList`
34+
- [BC Break] `OrderedList::fromMembers` replaced by `OrderedList::fromList`
35+
- [BC Break] `Item::parameter` replaced by `Parameter::value`
36+
- [BC Break] `InnerList::parameter` replaced by `Parameter::value`
3337

3438
## [0.1.0] - 2022-03-18
3539

README.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ key to its members as such they expose the following methods:
189189
- `append` always add an element at the end of the container, if already present the previous value is removed;
190190
- `prepend` always add an element at the beginning of the container, if already present the previous value is removed;
191191
- `delete` to remove elements based on their associated keys;
192+
- `keys` to list all existing keys for the ordered maps as an array list;
192193

193194
```php
194195
use Bakame\Http\StructuredFields\Dictionary;
@@ -215,6 +216,25 @@ echo $dictionary->toHttpValue(); //returns "a=?0, z=42.0"
215216
- `Parameters` can only contains `Item` instances
216217
- `Dictionary` instance can contain `Item` and `InnerList` instances.
217218

219+
The `Parameters` instance exposes the following methods:
220+
221+
- `Parameters::values` to list all existing Bare Items value as an array list;
222+
- `Parameters::value($key)` to return the value of the Bare Item associated to the `$key` or throw if the key is unknown or invalid;
223+
224+
```php
225+
use Bakame\Http\StructuredFields\Parameters;
226+
use Bakame\Http\StructuredFields\Item;
227+
use Bakame\Http\StructuredFields\Token;
228+
229+
$parameters = Parameters::fromAssociative(['b' => true, 'foo' => 'bar']);
230+
$parameters->keys(); // returns ['b', 'foo']
231+
$parameters->values(); // returns [true, 'bar']
232+
$parameters->value('b'); // returns true
233+
$parameters->get('b'); // returns Item::from(true)
234+
iterator_to_array($parameters->toPairs(), true); // returns [['b', Item::from(true)], ['foo', Item::from('bar')]]
235+
iterator_to_array($parameters, true); // returns ['b' => Item::from(true), 'foo' => Item::from('bar')]
236+
```
237+
218238
#### Lists
219239

220240
The `OrderedList` and the `InnerList` classes are list of members
@@ -264,8 +284,8 @@ use Bakame\Http\StructuredFields\InnerList;
264284
use Bakame\Http\StructuredFields\Parameters;
265285

266286
$innerList = InnerList::fromList([42, 42.0, "42"], ["a" => true]);
267-
$innerList->parameter('a'); //returns true
268287
$innerList->parameters(); //returns a Parameters object
288+
$innerList->parameters()->value('a'); // returns true
269289
```
270290

271291
Contributing

src/InnerList.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,6 @@ public function parameters(): Parameters
7474
return $this->parameters;
7575
}
7676

77-
public function parameter(string $key): Item|Token|ByteSequence|float|int|bool|string
78-
{
79-
return $this->parameters->get($key)->value();
80-
}
81-
8277
/**
8378
* @param Parameters|iterable<array-key, Item|Token|ByteSequence|float|int|bool|string> $parameters
8479
*/

src/InnerListTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ public function it_can_access_its_parameter_values(): void
176176
{
177177
$instance = InnerList::fromList([false], ['foo' => 'bar']);
178178

179-
self::assertSame('bar', $instance->parameter('foo'));
179+
self::assertSame('bar', $instance->parameters()->value('foo'));
180180
}
181181

182182
/**
@@ -187,7 +187,7 @@ public function it_fails_to_access_unknown_parameter_values(): void
187187
$this->expectException(InvalidOffset::class);
188188

189189
$instance = InnerList::fromList([false], ['foo' => 'bar']);
190-
$instance->parameter('bar');
190+
$instance->parameters()->value('bar');
191191
}
192192

193193
/**
@@ -202,6 +202,6 @@ public function it_can_exchange_parameters(): void
202202
$instance->exchangeParameters(['foo' => 'bar']);
203203

204204
self::assertCount(1, $instance->parameters());
205-
self::assertSame('bar', $instance->parameter('foo'));
205+
self::assertSame('bar', $instance->parameters()->value('foo'));
206206
}
207207
}

src/Item.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -273,11 +273,6 @@ public function parameters(): Parameters
273273
return $this->parameters;
274274
}
275275

276-
public function parameter(string $key): Item|Token|ByteSequence|float|int|bool|string
277-
{
278-
return $this->parameters->get($key)->value();
279-
}
280-
281276
/**
282277
* @param Parameters|iterable<array-key, Item|Token|ByteSequence|float|int|bool|string> $parameters
283278
*/

src/ItemTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ public function it_can_access_its_parameter_values(): void
228228
{
229229
$instance = Item::fromHttpValue('1; a; b=?0');
230230

231-
self::assertTrue($instance->parameter('a'));
231+
self::assertTrue($instance->parameters()->value('a'));
232232
}
233233

234234
/**
@@ -239,7 +239,7 @@ public function it_fails_to_access_unknown_parameter_values(): void
239239
$this->expectException(InvalidOffset::class);
240240

241241
$instance = Item::fromHttpValue('1; a; b=?0');
242-
$instance->parameter('bar');
242+
$instance->parameters()->value('bar');
243243
}
244244

245245
/**
@@ -254,6 +254,6 @@ public function it_can_exchange_parameters(): void
254254
$instance->exchangeParameters(['foo' => 'bar']);
255255

256256
self::assertCount(1, $instance->parameters());
257-
self::assertSame('bar', $instance->parameter('foo'));
257+
self::assertSame('bar', $instance->parameters()->value('foo'));
258258
}
259259
}

src/Parameters.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,25 @@ public function keys(): array
160160
return array_keys($this->members);
161161
}
162162

163+
/**
164+
* @return array<string, Token|ByteSequence|float|int|bool|string>
165+
*/
166+
public function values(): array
167+
{
168+
return array_map(fn (Item $item): Token|ByteSequence|float|int|bool|string => $item->value(), $this->members);
169+
}
170+
171+
public function value(string $key): Token|ByteSequence|float|int|bool|string
172+
{
173+
self::validateKey($key);
174+
175+
if (!array_key_exists($key, $this->members)) {
176+
throw InvalidOffset::dueToKeyNotFound($key);
177+
}
178+
179+
return $this->members[$key]->value();
180+
}
181+
163182
public function has(string $key): bool
164183
{
165184
return array_key_exists($key, $this->members);

src/ParametersTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,4 +232,18 @@ public function it_can_be_regenerated_with_eval(): void
232232

233233
self::assertEquals($instance, $generatedInstance);
234234
}
235+
236+
/**
237+
* @test
238+
*/
239+
public function it_can_return_bare_items_values(): void
240+
{
241+
$instance = Parameters::fromAssociative([
242+
'string' => Item::from('helloWorld'),
243+
'boolean' => Item::from(true),
244+
]);
245+
246+
self::assertSame('helloWorld', $instance->value('string'));
247+
self::assertSame(['string' => 'helloWorld', 'boolean' => true], $instance->values());
248+
}
235249
}

src/SupportsParameters.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,5 @@ interface SupportsParameters
88
{
99
public function parameters(): Parameters;
1010

11-
/**
12-
* @throws SyntaxError if the key used is invalid according to RFC8941
13-
* @throws InvalidOffset If no value is found for the given key
14-
*/
15-
public function parameter(string $key): Item|Token|ByteSequence|float|int|bool|string;
16-
1711
public function exchangeParameters(Parameters $parameters): void;
1812
}

0 commit comments

Comments
 (0)