summaryrefslogtreecommitdiff
path: root/inc/mailgun/php-http/discovery/src/Strategy
diff options
context:
space:
mode:
authorCarson Fleming <cflems@cflems.net>2017-03-02 22:49:24 -0500
committerCarson Fleming <cflems@cflems.net>2017-03-02 22:49:24 -0500
commitb76e2ff898b23745d4c9aaee49eeb7d88f2896ab (patch)
tree9b794be8db310a575d70165d9ebde0a183b61b01 /inc/mailgun/php-http/discovery/src/Strategy
parentbfcc9f7a7656a2db0c905b3c13114664f00f6c37 (diff)
downloadbulletin-b76e2ff898b23745d4c9aaee49eeb7d88f2896ab.tar.gz
Updated mailgun plugin
Diffstat (limited to 'inc/mailgun/php-http/discovery/src/Strategy')
-rw-r--r--inc/mailgun/php-http/discovery/src/Strategy/CommonClassesStrategy.php76
-rw-r--r--inc/mailgun/php-http/discovery/src/Strategy/DiscoveryStrategy.php23
-rw-r--r--inc/mailgun/php-http/discovery/src/Strategy/MockClientStrategy.php24
-rw-r--r--inc/mailgun/php-http/discovery/src/Strategy/PuliBetaStrategy.php91
4 files changed, 214 insertions, 0 deletions
diff --git a/inc/mailgun/php-http/discovery/src/Strategy/CommonClassesStrategy.php b/inc/mailgun/php-http/discovery/src/Strategy/CommonClassesStrategy.php
new file mode 100644
index 0000000..cbed15d
--- /dev/null
+++ b/inc/mailgun/php-http/discovery/src/Strategy/CommonClassesStrategy.php
@@ -0,0 +1,76 @@
+<?php
+
+namespace Http\Discovery\Strategy;
+
+use GuzzleHttp\Psr7\Request as GuzzleRequest;
+use Http\Message\MessageFactory\GuzzleMessageFactory;
+use Http\Message\StreamFactory\GuzzleStreamFactory;
+use Http\Message\UriFactory\GuzzleUriFactory;
+use Http\Message\MessageFactory\DiactorosMessageFactory;
+use Http\Message\StreamFactory\DiactorosStreamFactory;
+use Http\Message\UriFactory\DiactorosUriFactory;
+use Zend\Diactoros\Request as DiactorosRequest;
+use Http\Message\MessageFactory\SlimMessageFactory;
+use Http\Message\StreamFactory\SlimStreamFactory;
+use Http\Message\UriFactory\SlimUriFactory;
+use Slim\Http\Request as SlimRequest;
+use Http\Adapter\Guzzle6\Client as Guzzle6;
+use Http\Adapter\Guzzle5\Client as Guzzle5;
+use Http\Client\Curl\Client as Curl;
+use Http\Client\Socket\Client as Socket;
+use Http\Adapter\React\Client as React;
+use Http\Adapter\Buzz\Client as Buzz;
+
+/**
+ * @internal
+ *
+ * @author Tobias Nyholm <tobias.nyholm@gmail.com>
+ */
+final class CommonClassesStrategy implements DiscoveryStrategy
+{
+ /**
+ * @var array
+ */
+ private static $classes = [
+ 'Http\Message\MessageFactory' => [
+ ['class' => GuzzleMessageFactory::class, 'condition' => [GuzzleRequest::class, GuzzleMessageFactory::class]],
+ ['class' => DiactorosMessageFactory::class, 'condition' => [DiactorosRequest::class, DiactorosMessageFactory::class]],
+ ['class' => SlimMessageFactory::class, 'condition' => [SlimRequest::class, SlimMessageFactory::class]],
+ ],
+ 'Http\Message\StreamFactory' => [
+ ['class' => GuzzleStreamFactory::class, 'condition' => [GuzzleRequest::class, GuzzleStreamFactory::class]],
+ ['class' => DiactorosStreamFactory::class, 'condition' => [DiactorosRequest::class, DiactorosStreamFactory::class]],
+ ['class' => SlimStreamFactory::class, 'condition' => [SlimRequest::class, SlimStreamFactory::class]],
+ ],
+ 'Http\Message\UriFactory' => [
+ ['class' => GuzzleUriFactory::class, 'condition' => [GuzzleRequest::class, GuzzleUriFactory::class]],
+ ['class' => DiactorosUriFactory::class, 'condition' => [DiactorosRequest::class, DiactorosUriFactory::class]],
+ ['class' => SlimUriFactory::class, 'condition' => [SlimRequest::class, SlimUriFactory::class]],
+ ],
+ 'Http\Client\HttpAsyncClient' => [
+ ['class' => Guzzle6::class, 'condition' => Guzzle6::class],
+ ['class' => Curl::class, 'condition' => Curl::class],
+ ['class' => React::class, 'condition' => React::class],
+ ],
+ 'Http\Client\HttpClient' => [
+ ['class' => Guzzle6::class, 'condition' => Guzzle6::class],
+ ['class' => Guzzle5::class, 'condition' => Guzzle5::class],
+ ['class' => Curl::class, 'condition' => Curl::class],
+ ['class' => Socket::class, 'condition' => Socket::class],
+ ['class' => Buzz::class, 'condition' => Buzz::class],
+ ['class' => React::class, 'condition' => React::class],
+ ],
+ ];
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getCandidates($type)
+ {
+ if (isset(self::$classes[$type])) {
+ return self::$classes[$type];
+ }
+
+ return [];
+ }
+}
diff --git a/inc/mailgun/php-http/discovery/src/Strategy/DiscoveryStrategy.php b/inc/mailgun/php-http/discovery/src/Strategy/DiscoveryStrategy.php
new file mode 100644
index 0000000..641485a
--- /dev/null
+++ b/inc/mailgun/php-http/discovery/src/Strategy/DiscoveryStrategy.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Http\Discovery\Strategy;
+
+use Http\Discovery\Exception\StrategyUnavailableException;
+
+/**
+ * @author Tobias Nyholm <tobias.nyholm@gmail.com>
+ */
+interface DiscoveryStrategy
+{
+ /**
+ * Find a resource of a specific type.
+ *
+ * @param string $type
+ *
+ * @return array The return value is always an array with zero or more elements. Each
+ * element is an array with two keys ['class' => string, 'condition' => mixed].
+ *
+ * @throws StrategyUnavailableException if we cannot use this strategy.
+ */
+ public static function getCandidates($type);
+}
diff --git a/inc/mailgun/php-http/discovery/src/Strategy/MockClientStrategy.php b/inc/mailgun/php-http/discovery/src/Strategy/MockClientStrategy.php
new file mode 100644
index 0000000..ea464cf
--- /dev/null
+++ b/inc/mailgun/php-http/discovery/src/Strategy/MockClientStrategy.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace Http\Discovery\Strategy;
+
+use Http\Client\HttpClient;
+use Http\Mock\Client as Mock;
+
+/**
+ * Find the Mock client.
+ *
+ * @author Sam Rapaport <me@samrapdev.com>
+ */
+final class MockClientStrategy implements DiscoveryStrategy
+{
+ /**
+ * {@inheritdoc}
+ */
+ public static function getCandidates($type)
+ {
+ return ($type === HttpClient::class)
+ ? [['class' => Mock::class, 'condition' => Mock::class]]
+ : [];
+ }
+}
diff --git a/inc/mailgun/php-http/discovery/src/Strategy/PuliBetaStrategy.php b/inc/mailgun/php-http/discovery/src/Strategy/PuliBetaStrategy.php
new file mode 100644
index 0000000..2666fb3
--- /dev/null
+++ b/inc/mailgun/php-http/discovery/src/Strategy/PuliBetaStrategy.php
@@ -0,0 +1,91 @@
+<?php
+
+namespace Http\Discovery\Strategy;
+
+use Http\Discovery\Exception\PuliUnavailableException;
+use Puli\Discovery\Api\Discovery;
+use Puli\GeneratedPuliFactory;
+
+/**
+ * Find candidates using Puli.
+ *
+ * @internal
+ * @final
+ *
+ * @author David de Boer <david@ddeboer.nl>
+ * @author Márk Sági-Kazár <mark.sagikazar@gmail.com>
+ */
+class PuliBetaStrategy implements DiscoveryStrategy
+{
+ /**
+ * @var GeneratedPuliFactory
+ */
+ protected static $puliFactory;
+
+ /**
+ * @var Discovery
+ */
+ protected static $puliDiscovery;
+
+ /**
+ * @return GeneratedPuliFactory
+ *
+ * @throws PuliUnavailableException
+ */
+ private static function getPuliFactory()
+ {
+ if (null === self::$puliFactory) {
+ if (!defined('PULI_FACTORY_CLASS')) {
+ throw new PuliUnavailableException('Puli Factory is not available');
+ }
+
+ $puliFactoryClass = PULI_FACTORY_CLASS;
+
+ if (!class_exists($puliFactoryClass)) {
+ throw new PuliUnavailableException('Puli Factory class does not exist');
+ }
+
+ self::$puliFactory = new $puliFactoryClass();
+ }
+
+ return self::$puliFactory;
+ }
+
+ /**
+ * Returns the Puli discovery layer.
+ *
+ * @return Discovery
+ *
+ * @throws PuliUnavailableException
+ */
+ private static function getPuliDiscovery()
+ {
+ if (!isset(self::$puliDiscovery)) {
+ $factory = self::getPuliFactory();
+ $repository = $factory->createRepository();
+
+ self::$puliDiscovery = $factory->createDiscovery($repository);
+ }
+
+ return self::$puliDiscovery;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getCandidates($type)
+ {
+ $returnData = [];
+ $bindings = self::getPuliDiscovery()->findBindings($type);
+
+ foreach ($bindings as $binding) {
+ $condition = true;
+ if ($binding->hasParameterValue('depends')) {
+ $condition = $binding->getParameterValue('depends');
+ }
+ $returnData[] = ['class' => $binding->getClassName(), 'condition' => $condition];
+ }
+
+ return $returnData;
+ }
+}