function it_puts_the_supplied_ids_into_a_resource(Parser $parser) { $resource = '/sites/{random_id}/products/{random_id}/images/{random_id}'; $ids = [1, 2, 3]; $expected = '/sites/1/products/2/images/3/'; $parser->entities($resource, '{random_id}')->shouldBeCalled()->willReturn(['sites', 'products', 'images']); $this->putIdsInUri($resource, $ids)->shouldReturn($expected); }
/** * @inheritdoc */ public function putIdsInUri($uri, array $ids, $idPlaceholder = '{random_id}') { $entities = $this->uriParser->entities($uri, $idPlaceholder); if (abs(count($entities) - count($ids)) > 1) { throw new \RuntimeException('Ids and entities count must be off by no more than 1'); } return array_reduce($entities, function ($carry, $item) use(&$ids) { $id = array_shift($ids); if ($id) { return $carry . $item . '/' . $id . '/'; } return $carry . $item; }, '/'); }
/** * @return array */ protected function entities() { return $this->parser->entities($this->uri()); }
function it_returns_an_item_name(Request $request, Parser $parser, TableHelper $tableHelper) { $uri = '/sites/1/products/2/images/1,4,5'; $entities = ['sites', 'products', 'images']; $rawItem = 'images'; $expected = 'Image'; $request->getRequestUri()->shouldBeCalled()->willReturn($uri); $parser->entities($uri)->shouldBeCalled()->willReturn($entities); $tableHelper->singularize($rawItem)->shouldBeCalled()->willReturn($expected); $this->itemName()->shouldReturn($expected); }