Skip to content

Commit 3c3b412

Browse files
committed
change to addResource, getResource and removeResource
1 parent 0c3e92b commit 3c3b412

3 files changed

Lines changed: 49 additions & 38 deletions

File tree

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ The package object has some useful methods to access and manipulate the resource
7676
```php
7777
$package = Package::load("tests/fixtures/multi_data_datapackage.json");
7878
$package->resources(); // array of resource name => Resource object (see below for Resource class reference)
79-
$package->resource("first-resource"); // Resource object matching the given name
80-
$package->deleteResource("first-resource");
79+
$package->getResource("first-resource"); // Resource object matching the given name
80+
$package->removeResource("first-resource");
8181
// add a tabular resource
82-
$package->resource("tabular-resource-name", [
82+
$package->addResource("tabular-resource-name", [
8383
"profile" => "tabular-data-resource",
8484
"schema" => [
8585
"fields" => [
@@ -101,7 +101,7 @@ $package = Package::create([
101101
"profile" => "tabular-data-package"
102102
]);
103103
// add a resource
104-
$package->resource("resource-name", [
104+
$package->addResource("resource-name", [
105105
"profile" => "tabular-data-resource",
106106
"schema" => [
107107
"fields" => [
@@ -126,7 +126,7 @@ $package->save("datapackage.zip");
126126
Resource objects can be accessed from a Package as described above
127127

128128
```php
129-
$resource = $package->resource("resource-name")
129+
$resource = $package->getResource("resource-name")
130130
```
131131

132132
or instantiated directly

src/Datapackages/BaseDatapackage.php

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -76,43 +76,54 @@ public function resources()
7676
return $resources;
7777
}
7878

79-
public function resource($name, $resource = null)
79+
public function getResource($name)
8080
{
81-
if ($resource) {
82-
if (is_a($resource, 'frictionlessdata\\datapackage\\Resources\\BaseResource')) {
83-
$resource = $resource->descriptor();
84-
} else {
85-
$resource = Utils::objectify($resource);
86-
}
87-
$resource->name = $name;
88-
$resourceDescriptors = [];
89-
$gotMatch = false;
90-
foreach ($this->descriptor->resources as $resourceDescriptor) {
91-
if ($resourceDescriptor->name == $resource->name) {
92-
$resourceDescriptors[] = $resource;
93-
$gotMatch = true;
94-
} else {
95-
$resourceDescriptors[] = $resourceDescriptor;
96-
}
81+
foreach ($this->descriptor->resources as $resourceDescriptor) {
82+
if ($resourceDescriptor->name == $name) {
83+
return $this->initResource($resourceDescriptor);
9784
}
98-
if (!$gotMatch) {
85+
}
86+
throw new \Exception("couldn't find matching resource with name = '{$name}'");
87+
}
88+
89+
public function addResource($name, $resource)
90+
{
91+
if (is_a($resource, 'frictionlessdata\\datapackage\\Resources\\BaseResource')) {
92+
$resource = $resource->descriptor();
93+
} else {
94+
$resource = Utils::objectify($resource);
95+
}
96+
$resource->name = $name;
97+
$resourceDescriptors = [];
98+
$gotMatch = false;
99+
foreach ($this->descriptor->resources as $resourceDescriptor) {
100+
if ($resourceDescriptor->name == $resource->name) {
99101
$resourceDescriptors[] = $resource;
102+
$gotMatch = true;
103+
} else {
104+
$resourceDescriptors[] = $resourceDescriptor;
100105
}
101-
$this->descriptor->resources = $resourceDescriptors;
102-
if (!$this->skipValidations) {
103-
$this->revalidate();
104-
}
106+
}
107+
if (!$gotMatch) {
108+
$resourceDescriptors[] = $resource;
109+
}
110+
$this->descriptor->resources = $resourceDescriptors;
111+
if (!$this->skipValidations) {
112+
$this->revalidate();
113+
}
114+
}
115+
116+
// TODO: remove this function and use the getResource / addResource directly (will need to modify a lot of tests code)
117+
public function resource($name, $resource = null)
118+
{
119+
if ($resource) {
120+
$this->addResource($name, $resource);
105121
} else {
106-
foreach ($this->descriptor->resources as $resourceDescriptor) {
107-
if ($resourceDescriptor->name == $name) {
108-
return $this->initResource($resourceDescriptor);
109-
}
110-
}
111-
throw new \Exception("couldn't find matching resource with name = '{$name}'");
122+
return $this->getResource($name);
112123
}
113124
}
114125

115-
public function deleteResource($name)
126+
public function removeResource($name)
116127
{
117128
$resourceDescriptors = [];
118129
foreach ($this->descriptor->resources as $resourceDescriptor) {

tests/DatapackageTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ public function testDatapackageResources()
251251
));
252252
// delete resource
253253
$this->assertCount(2, $datapackage->resources());
254-
$datapackage->deleteResource('resource-name');
254+
$datapackage->removeResource('resource-name');
255255
$this->assertCount(1, $datapackage->resources());
256256
$i = 0;
257257
foreach ($datapackage as $resource) {
@@ -272,7 +272,7 @@ public function testDatapackageResources()
272272

273273
// add a resource
274274
$this->assertCount(1, $datapackage->resources());
275-
$datapackage->resource('new-resource', [
275+
$datapackage->addResource('new-resource', [
276276
'path' => ['tests/fixtures/foo.txt', 'tests/fixtures/baz.txt'],
277277
]);
278278
$this->assertCount(2, $datapackage->resources());
@@ -378,7 +378,7 @@ public function testCreateEditDatapackageDescriptor()
378378
file_put_contents($defaultSecondPath, 'BAHHH');
379379

380380
$tabularDataFilename = tempnam(sys_get_temp_dir(), 'datapackage-php-tests-').'.csv';
381-
$package->resource('my-renamed-tabular-resource')->descriptor()->path[] = $tabularDataFilename;
381+
$package->getResource('my-renamed-tabular-resource')->descriptor()->path[] = $tabularDataFilename;
382382

383383
foreach ($package as $resource) {
384384
if ($resource->name() == 'my-default-resource') {
@@ -405,7 +405,7 @@ public function testCreateEditDatapackageDescriptor()
405405

406406
// now you can access the data normally
407407
$i = 0;
408-
foreach ($package->resource('my-default-resource') as $row) {
408+
foreach ($package->getResource('my-default-resource') as $row) {
409409
if ($i == 0) {
410410
$this->assertEquals('foo', $row);
411411
} elseif ($i == 1) {

0 commit comments

Comments
 (0)