You are here

class LinePatternDetector in Libraries API 8.3

Detects the version by matching lines in a file against a specified pattern.

This version detector can be used if the library version is denoted in a particular format in a changelog or readme file, for example.

Plugin annotation

@VersionDetector("line_pattern");

Hierarchy

Expanded class hierarchy of LinePatternDetector

Related topics

1 file declares its use of LinePatternDetector
LinePatternDetectorTest.php in tests/src/Unit/Plugin/libraries/VersionDetector/LinePatternDetectorTest.php

File

src/Plugin/libraries/VersionDetector/LinePatternDetector.php, line 23

Namespace

Drupal\libraries\Plugin\libraries\VersionDetector
View source
class LinePatternDetector extends PluginBase implements VersionDetectorInterface, ContainerFactoryPluginInterface {

  /**
   * The app root.
   *
   * @var string
   */
  protected $appRoot;

  /**
   * Constructs a line pattern version detector.
   *
   * @param array $configuration
   * @param string $plugin_id
   * @param array $plugin_definition
   * @param string $app_root
   */
  public function __construct(array $configuration, $plugin_id, array $plugin_definition, $app_root) {
    $configuration += [
      'file' => '',
      'pattern' => '',
      'lines' => 20,
      'columns' => 200,
    ];
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->appRoot = $app_root;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($configuration, $plugin_id, $plugin_definition, $container
      ->get('app.root'));
  }

  /**
   * {@inheritdoc}
   */
  public function detectVersion(VersionedLibraryInterface $library) {
    if (!$library instanceof LocalLibraryInterface) {
      throw new UnknownLibraryVersionException($library);
    }
    $filepath = $this->appRoot . '/' . $library
      ->getLocalPath() . '/' . $this->configuration['file'];
    if (!file_exists($filepath)) {
      throw new UnknownLibraryVersionException($library);
    }
    $file = fopen($filepath, 'r');
    $lines = $this->configuration['lines'];
    while ($lines && ($line = fgets($file, $this->configuration['columns']))) {
      if (preg_match($this->configuration['pattern'], $line, $version)) {
        fclose($file);
        $library
          ->setVersion($version[1]);
        return;
      }
      $lines--;
    }
    fclose($file);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
LinePatternDetector::$appRoot protected property The app root.
LinePatternDetector::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
LinePatternDetector::detectVersion public function Detects the version of a library. Overrides VersionDetectorInterface::detectVersion
LinePatternDetector::__construct public function Constructs a line pattern version detector. Overrides PluginBase::__construct
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.