You are here

class DefinitionDiscoveryFactory in Libraries API 8.3

Instantiates a library definition discovery based on configuration.

Hierarchy

Expanded class hierarchy of DefinitionDiscoveryFactory

1 string reference to 'DefinitionDiscoveryFactory'
libraries.services.yml in ./libraries.services.yml
libraries.services.yml
1 service uses DefinitionDiscoveryFactory
libraries.definition.discovery.factory in ./libraries.services.yml
Drupal\libraries\ExternalLibrary\Definition\DefinitionDiscoveryFactory

File

src/ExternalLibrary/Definition/DefinitionDiscoveryFactory.php, line 12

Namespace

Drupal\libraries\ExternalLibrary\Definition
View source
class DefinitionDiscoveryFactory {

  /**
   * The configuration factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $configFactory;

  /**
   * The serializer for local definition files.
   *
   * @var \Drupal\Component\Serialization\SerializationInterface
   */
  protected $localSerializer;

  /**
   * The HTTP client used to fetch remote definitions.
   *
   * @var \GuzzleHttp\ClientInterface
   */
  protected $httpClient;

  /**
   * The serializer for remote definitions.
   *
   * @var \Drupal\Component\Serialization\SerializationInterface
   */
  protected $remoteSerializer;

  /**
   * Constructs a definition discovery factory.
   *
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The configuration factory.
   * @param \Drupal\Component\Serialization\SerializationInterface $local_serializer
   *   The serializer for local definition files.
   * @param \GuzzleHttp\ClientInterface $http_client
   *   The HTTP client used to fetch remote definitions.
   * @param \Drupal\Component\Serialization\SerializationInterface $remote_serializer
   *   The serializer for remote definitions.
   */
  public function __construct(ConfigFactoryInterface $config_factory, SerializationInterface $local_serializer, ClientInterface $http_client, SerializationInterface $remote_serializer) {
    $this->configFactory = $config_factory;
    $this->localSerializer = $local_serializer;
    $this->httpClient = $http_client;
    $this->remoteSerializer = $remote_serializer;
  }

  /**
   * Gets a library definition discovery.
   *
   * @return \Drupal\libraries\ExternalLibrary\Definition\DefinitionDiscoveryInterface
   *   The library definition discovery.
   */
  public function get() {
    $config = $this->configFactory
      ->get('libraries.settings');
    if ($config
      ->get('definition.remote.enable')) {
      $discovery = new ChainDefinitionDiscovery();
      $local_discovery = new WritableFileDefinitionDiscovery($this->localSerializer, $config
        ->get('definition.local.path'));
      $discovery
        ->addDiscovery($local_discovery);
      foreach ($config
        ->get('definition.remote.urls') as $remote_url) {
        $remote_discovery = new GuzzleDefinitionDiscovery($this->httpClient, $this->remoteSerializer, $remote_url);
        $discovery
          ->addDiscovery($remote_discovery);
      }
    }
    else {
      $discovery = new FileDefinitionDiscovery($this->localSerializer, $config
        ->get('definition.local.path'));
    }
    return $discovery;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DefinitionDiscoveryFactory::$configFactory protected property The configuration factory.
DefinitionDiscoveryFactory::$httpClient protected property The HTTP client used to fetch remote definitions.
DefinitionDiscoveryFactory::$localSerializer protected property The serializer for local definition files.
DefinitionDiscoveryFactory::$remoteSerializer protected property The serializer for remote definitions.
DefinitionDiscoveryFactory::get public function Gets a library definition discovery.
DefinitionDiscoveryFactory::__construct public function Constructs a definition discovery factory.