Skip to content

Commit f17a447

Browse files
committed
Merge pull request #89 from alchemy-fr/remove-pimple
Remove Pimple dependency
2 parents 91ecc68 + 93e1a79 commit f17a447

File tree

5 files changed

+212
-43
lines changed

5 files changed

+212
-43
lines changed

composer.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
"require": {
1515
"php": ">=5.3.3",
1616
"doctrine/collections": "~1.0",
17-
"pimple/pimple": "~1.0",
1817
"symfony/filesystem": "^2.0.5|^3.0",
1918
"symfony/process": "^2.1|^3.0"
2019
},

src/Adapter/AdapterContainer.php

Lines changed: 104 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,11 @@
2525
use Symfony\Component\Filesystem\Filesystem;
2626
use Symfony\Component\Process\ExecutableFinder;
2727

28-
class AdapterContainer extends \Pimple
28+
class AdapterContainer implements \ArrayAccess
2929
{
30+
31+
private $items = array();
32+
3033
/**
3134
* Builds the adapter container
3235
*
@@ -39,110 +42,180 @@ public static function load()
3942
$container['zip.inflator'] = null;
4043
$container['zip.deflator'] = null;
4144

42-
$container['resource-manager'] = $container->share(function ($container) {
45+
$container['resource-manager'] = function ($container) {
4346
return new ResourceManager(
4447
$container['request-mapper'],
4548
$container['resource-teleporter'],
4649
$container['filesystem']
4750
);
48-
});
51+
};
4952

50-
$container['executable-finder'] = $container->share(function ($container) {
53+
$container['executable-finder'] = function ($container) {
5154
return new ExecutableFinder();
52-
});
55+
};
5356

54-
$container['request-mapper'] = $container->share(function ($container) {
57+
$container['request-mapper'] = function ($container) {
5558
return new RequestMapper($container['target-locator']);
56-
});
59+
};
5760

58-
$container['target-locator'] = $container->share(function () {
61+
$container['target-locator'] = function () {
5962
return new TargetLocator();
60-
});
63+
};
6164

62-
$container['teleporter-container'] = $container->share(function ($container) {
65+
$container['teleporter-container'] = function ($container) {
6366
return TeleporterContainer::load();
64-
});
67+
};
6568

66-
$container['resource-teleporter'] = $container->share(function ($container) {
69+
$container['resource-teleporter'] = function ($container) {
6770
return new ResourceTeleporter($container['teleporter-container']);
68-
});
71+
};
6972

70-
$container['filesystem'] = $container->share(function () {
73+
$container['filesystem'] = function () {
7174
return new Filesystem();
72-
});
75+
};
7376

74-
$container['Alchemy\\Zippy\\Adapter\\ZipAdapter'] = $container->share(function ($container) {
77+
$container['Alchemy\\Zippy\\Adapter\\ZipAdapter'] = function ($container) {
7578
return ZipAdapter::newInstance(
7679
$container['executable-finder'],
7780
$container['resource-manager'],
7881
$container['zip.inflator'],
7982
$container['zip.deflator']
8083
);
81-
});
84+
};
8285

8386
$container['gnu-tar.inflator'] = null;
8487
$container['gnu-tar.deflator'] = null;
8588

86-
$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarGNUTarAdapter'] = $container->share(function ($container) {
89+
$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarGNUTarAdapter'] = function ($container) {
8790
return TarGNUTarAdapter::newInstance(
8891
$container['executable-finder'],
8992
$container['resource-manager'],
9093
$container['gnu-tar.inflator'],
9194
$container['gnu-tar.deflator']
9295
);
93-
});
96+
};
9497

95-
$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarGzGNUTarAdapter'] = $container->share(function ($container) {
98+
$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarGzGNUTarAdapter'] = function ($container) {
9699
return TarGzGNUTarAdapter::newInstance(
97100
$container['executable-finder'],
98101
$container['resource-manager'],
99102
$container['gnu-tar.inflator'],
100103
$container['gnu-tar.deflator']
101104
);
102-
});
105+
};
103106

104-
$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarBz2GNUTarAdapter'] = $container->share(function ($container) {
107+
$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarBz2GNUTarAdapter'] = function ($container) {
105108
return TarBz2GNUTarAdapter::newInstance(
106109
$container['executable-finder'],
107110
$container['resource-manager'],
108111
$container['gnu-tar.inflator'],
109112
$container['gnu-tar.deflator']
110113
);
111-
});
114+
};
112115

113116
$container['bsd-tar.inflator'] = null;
114117
$container['bsd-tar.deflator'] = null;
115118

116-
$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarBSDTarAdapter'] = $container->share(function ($container) {
119+
$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarBSDTarAdapter'] = function ($container) {
117120
return TarBSDTarAdapter::newInstance(
118121
$container['executable-finder'],
119122
$container['resource-manager'],
120123
$container['bsd-tar.inflator'],
121124
$container['bsd-tar.deflator']
122125
);
123-
});
126+
};
124127

125-
$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarGzBSDTarAdapter'] = $container->share(function ($container) {
128+
$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarGzBSDTarAdapter'] = function ($container) {
126129
return TarGzBSDTarAdapter::newInstance(
127130
$container['executable-finder'],
128131
$container['resource-manager'],
129132
$container['bsd-tar.inflator'],
130133
$container['bsd-tar.deflator']
131134
);
132-
});
135+
};
133136

134-
$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarBz2BSDTarAdapter'] = $container->share(function ($container) {
137+
$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarBz2BSDTarAdapter'] = function ($container) {
135138
return TarBz2BSDTarAdapter::newInstance(
136139
$container['executable-finder'],
137140
$container['resource-manager'],
138141
$container['bsd-tar.inflator'],
139142
$container['bsd-tar.deflator']);
140-
});
143+
};
141144

142-
$container['Alchemy\\Zippy\\Adapter\\ZipExtensionAdapter'] = $container->share(function () {
145+
$container['Alchemy\\Zippy\\Adapter\\ZipExtensionAdapter'] = function () {
143146
return ZipExtensionAdapter::newInstance();
144-
});
147+
};
145148

146149
return $container;
147150
}
151+
152+
/**
153+
* (PHP 5 &gt;= 5.0.0)<br/>
154+
* Whether a offset exists
155+
* @link http://php.net/manual/en/arrayaccess.offsetexists.php
156+
* @param mixed $offset <p>
157+
* An offset to check for.
158+
* </p>
159+
* @return boolean true on success or false on failure.
160+
* </p>
161+
* <p>
162+
* The return value will be casted to boolean if non-boolean was returned.
163+
*/
164+
public function offsetExists($offset)
165+
{
166+
return isset($this->items[$offset]);
167+
}
168+
169+
/**
170+
* (PHP 5 &gt;= 5.0.0)<br/>
171+
* Offset to retrieve
172+
* @link http://php.net/manual/en/arrayaccess.offsetget.php
173+
* @param mixed $offset <p>
174+
* The offset to retrieve.
175+
* </p>
176+
* @return mixed Can return all value types.
177+
*/
178+
public function offsetGet($offset)
179+
{
180+
if (array_key_exists($offset, $this->items) && is_callable($this->items[$offset])) {
181+
$this->items[$offset] = call_user_func($this->items[$offset], $this);
182+
}
183+
184+
if (array_key_exists($offset, $this->items)) {
185+
return $this->items[$offset];
186+
}
187+
188+
throw new \InvalidArgumentException();
189+
}
190+
191+
/**
192+
* (PHP 5 &gt;= 5.0.0)<br/>
193+
* Offset to set
194+
* @link http://php.net/manual/en/arrayaccess.offsetset.php
195+
* @param mixed $offset <p>
196+
* The offset to assign the value to.
197+
* </p>
198+
* @param mixed $value <p>
199+
* The value to set.
200+
* </p>
201+
* @return void
202+
*/
203+
public function offsetSet($offset, $value)
204+
{
205+
$this->items[$offset] = $value;
206+
}
207+
208+
/**
209+
* (PHP 5 &gt;= 5.0.0)<br/>
210+
* Offset to unset
211+
* @link http://php.net/manual/en/arrayaccess.offsetunset.php
212+
* @param mixed $offset <p>
213+
* The offset to unset.
214+
* </p>
215+
* @return void
216+
*/
217+
public function offsetUnset($offset)
218+
{
219+
unset($this->items[$offset]);
220+
}
148221
}

src/FileStrategy/FileStrategyInterface.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@
1111

1212
namespace Alchemy\Zippy\FileStrategy;
1313

14+
use Alchemy\Zippy\Adapter\AdapterInterface;
15+
1416
interface FileStrategyInterface
1517
{
1618
/**
1719
* Returns an array of adapters that match the strategy
1820
*
19-
* @return array
21+
* @return AdapterInterface[]
2022
*/
2123
public function getAdapters();
2224

src/Resource/TeleporterContainer.php

Lines changed: 98 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,20 @@
2020
/**
2121
* A container of TeleporterInterface
2222
*/
23-
class TeleporterContainer extends \Pimple
23+
class TeleporterContainer implements \ArrayAccess, \Countable
2424
{
2525
/**
26-
* Returns the appropriate TeleporterInterface given a Resource
26+
* @var TeleporterInterface[]
27+
*/
28+
private $teleporters = array();
29+
30+
/**
31+
* @var callable[]
32+
*/
33+
private $factories = array();
34+
35+
/**
36+
* Returns the appropriate TeleporterInterface for a given Resource
2737
*
2838
* @param Resource $resource
2939
* @return TeleporterInterface
@@ -39,7 +49,7 @@ public function fromResource(Resource $resource)
3949

4050
if (!isset($data['scheme']) || 'file' === $data['scheme']) {
4151
$teleporter = 'local-teleporter';
42-
} elseif (in_array($data['scheme'], array('http', 'https')) && isset($this['guzzle-teleporter'])) {
52+
} elseif (in_array($data['scheme'], array('http', 'https')) && isset($this->factories['guzzle-teleporter'])) {
4353
$teleporter = 'guzzle-teleporter';
4454
} else {
4555
$teleporter = 'stream-teleporter';
@@ -49,7 +59,17 @@ public function fromResource(Resource $resource)
4959
throw new InvalidArgumentException('No teleporter found');
5060
}
5161

52-
return $this[$teleporter];
62+
return $this->getTeleporter($teleporter);
63+
}
64+
65+
private function getTeleporter($typeName)
66+
{
67+
if (! isset($this->teleporters[$typeName])) {
68+
$factory = $this->factories[$typeName];
69+
$this->teleporters[$typeName] = $factory();
70+
}
71+
72+
return $this->teleporters[$typeName];
5373
}
5474

5575
/**
@@ -61,19 +81,87 @@ public static function load()
6181
{
6282
$container = new static();
6383

64-
$container['stream-teleporter'] = $container->share(function () {
84+
$container->factories['stream-teleporter'] = function () {
6585
return StreamTeleporter::create();
66-
});
67-
$container['local-teleporter'] = $container->share(function () {
86+
};
87+
88+
$container->factories['local-teleporter'] = function () {
6889
return LocalTeleporter::create();
69-
});
90+
};
7091

7192
if (class_exists('Guzzle\Http\Client')) {
72-
$container['guzzle-teleporter'] = $container->share(function () {
93+
$container->factories['guzzle-teleporter'] = function () {
7394
return GuzzleTeleporter::create();
74-
});
95+
};
7596
}
7697

7798
return $container;
7899
}
100+
101+
/**
102+
* (PHP 5 &gt;= 5.0.0)<br/>
103+
* Whether a offset exists
104+
* @link http://php.net/manual/en/arrayaccess.offsetexists.php
105+
* @param mixed $offset <p>
106+
* An offset to check for.
107+
* </p>
108+
* @return boolean true on success or false on failure.
109+
* </p>
110+
* <p>
111+
* The return value will be casted to boolean if non-boolean was returned.
112+
*/
113+
public function offsetExists($offset)
114+
{
115+
return isset($this->teleporters[$offset]);
116+
}
117+
118+
/**
119+
* (PHP 5 &gt;= 5.0.0)<br/>
120+
* Offset to retrieve
121+
* @link http://php.net/manual/en/arrayaccess.offsetget.php
122+
* @param mixed $offset <p>
123+
* The offset to retrieve.
124+
* </p>
125+
* @return mixed Can return all value types.
126+
*/
127+
public function offsetGet($offset)
128+
{
129+
return $this->getTeleporter($offset);
130+
}
131+
132+
/**
133+
* (PHP 5 &gt;= 5.0.0)<br/>
134+
* Offset to set
135+
* @link http://php.net/manual/en/arrayaccess.offsetset.php
136+
* @param mixed $offset <p>
137+
* The offset to assign the value to.
138+
* </p>
139+
* @param mixed $value <p>
140+
* The value to set.
141+
* </p>
142+
* @return void
143+
*/
144+
public function offsetSet($offset, $value)
145+
{
146+
throw new \BadMethodCallException();
147+
}
148+
149+
/**
150+
* (PHP 5 &gt;= 5.0.0)<br/>
151+
* Offset to unset
152+
* @link http://php.net/manual/en/arrayaccess.offsetunset.php
153+
* @param mixed $offset <p>
154+
* The offset to unset.
155+
* </p>
156+
* @return void
157+
*/
158+
public function offsetUnset($offset)
159+
{
160+
throw new \BadMethodCallException();
161+
}
162+
163+
public function count()
164+
{
165+
return count($this->teleporters);
166+
}
79167
}

0 commit comments

Comments
 (0)