You are here

class ScaffoldOptions in Drupal 9

Same name and namespace in other branches
  1. 8 composer/Plugin/Scaffold/ScaffoldOptions.php \Drupal\Composer\Plugin\Scaffold\ScaffoldOptions

Per-project options from the 'extras' section of the composer.json file.

Projects that describe scaffold files do so via their scaffold options. This data is pulled from the 'drupal-scaffold' portion of the extras section of the project data.

@internal

Hierarchy

Expanded class hierarchy of ScaffoldOptions

8 files declare their use of ScaffoldOptions
AppendOp.php in composer/Plugin/Scaffold/Operations/AppendOp.php
AppendOpTest.php in core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/AppendOpTest.php
OperationInterface.php in composer/Plugin/Scaffold/Operations/OperationInterface.php
ReplaceOp.php in composer/Plugin/Scaffold/Operations/ReplaceOp.php
ReplaceOpTest.php in core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Integration/ReplaceOpTest.php

... See full list

File

composer/Plugin/Scaffold/ScaffoldOptions.php, line 14

Namespace

Drupal\Composer\Plugin\Scaffold
View source
class ScaffoldOptions {

  /**
   * The raw data from the 'extras' section of the top-level composer.json file.
   *
   * @var array
   */
  protected $options = [];

  /**
   * ScaffoldOptions constructor.
   *
   * @param array $options
   *   The scaffold options taken from the 'drupal-scaffold' section.
   */
  protected function __construct(array $options) {
    $this->options = $options + [
      "allowed-packages" => [],
      "locations" => [],
      "symlink" => FALSE,
      "file-mapping" => [],
    ];

    // Define any default locations.
    $this->options['locations'] += [
      'project-root' => '.',
      'web-root' => '.',
    ];
  }

  /**
   * Determines if the provided 'extras' section has scaffold options.
   *
   * @param array $extras
   *   The contents of the 'extras' section.
   *
   * @return bool
   *   True if scaffold options have been declared
   */
  public static function hasOptions(array $extras) {
    return array_key_exists('drupal-scaffold', $extras);
  }

  /**
   * Creates a scaffold options object.
   *
   * @param array $extras
   *   The contents of the 'extras' section.
   *
   * @return self
   *   The scaffold options object representing the provided scaffold options
   */
  public static function create(array $extras) {
    $options = static::hasOptions($extras) ? $extras['drupal-scaffold'] : [];
    return new self($options);
  }

  /**
   * Creates a new scaffold options object with some values overridden.
   *
   * @param array $options
   *   Override values.
   *
   * @return self
   *   The scaffold options object representing the provided scaffold options
   */
  protected function override(array $options) {
    return new self($options + $this->options);
  }

  /**
   * Creates a new scaffold options object with an overridden 'symlink' value.
   *
   * @param bool $symlink
   *   Whether symlinking should be enabled or not.
   *
   * @return self
   *   The scaffold options object representing the provided scaffold options
   */
  public function overrideSymlink($symlink) {
    return $this
      ->override([
      'symlink' => $symlink,
    ]);
  }

  /**
   * Determines whether any allowed packages were defined.
   *
   * @return bool
   *   Whether there are allowed packages
   */
  public function hasAllowedPackages() {
    return !empty($this
      ->allowedPackages());
  }

  /**
   * Gets allowed packages from these options.
   *
   * @return array
   *   The list of allowed packages
   */
  public function allowedPackages() {
    return $this->options['allowed-packages'];
  }

  /**
   * Gets the location mapping table, e.g. 'webroot' => './'.
   *
   * @return array
   *   A map of name : location values
   */
  public function locations() {
    return $this->options['locations'];
  }

  /**
   * Determines whether a given named location is defined.
   *
   * @param string $name
   *   The location name to search for.
   *
   * @return bool
   *   True if the specified named location exist.
   */
  protected function hasLocation($name) {
    return array_key_exists($name, $this
      ->locations());
  }

  /**
   * Gets a specific named location.
   *
   * @param string $name
   *   The name of the location to fetch.
   *
   * @return string
   *   The value of the provided named location
   */
  public function getLocation($name) {
    return $this
      ->hasLocation($name) ? $this
      ->locations()[$name] : FALSE;
  }

  /**
   * Determines if symlink mode is set.
   *
   * @return bool
   *   Whether or not 'symlink' mode
   */
  public function symlink() {
    return $this->options['symlink'];
  }

  /**
   * Determines if there are file mappings.
   *
   * @return bool
   *   Whether or not the scaffold options contain any file mappings
   */
  public function hasFileMapping() {
    return !empty($this
      ->fileMapping());
  }

  /**
   * Returns the actual file mappings.
   *
   * @return array
   *   File mappings for just this config type.
   */
  public function fileMapping() {
    return $this->options['file-mapping'];
  }

  /**
   * Determines if there is defined a value for the 'gitignore' option.
   *
   * @return bool
   *   Whether or not there is a 'gitignore' option setting
   */
  public function hasGitIgnore() {
    return isset($this->options['gitignore']);
  }

  /**
   * Gets the value of the 'gitignore' option.
   *
   * @return bool
   *   The 'gitignore' option, or TRUE if undefined.
   */
  public function gitIgnore() {
    return $this
      ->hasGitIgnore() ? $this->options['gitignore'] : TRUE;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ScaffoldOptions::$options protected property The raw data from the 'extras' section of the top-level composer.json file.
ScaffoldOptions::allowedPackages public function Gets allowed packages from these options.
ScaffoldOptions::create public static function Creates a scaffold options object.
ScaffoldOptions::fileMapping public function Returns the actual file mappings.
ScaffoldOptions::getLocation public function Gets a specific named location.
ScaffoldOptions::gitIgnore public function Gets the value of the 'gitignore' option.
ScaffoldOptions::hasAllowedPackages public function Determines whether any allowed packages were defined.
ScaffoldOptions::hasFileMapping public function Determines if there are file mappings.
ScaffoldOptions::hasGitIgnore public function Determines if there is defined a value for the 'gitignore' option.
ScaffoldOptions::hasLocation protected function Determines whether a given named location is defined.
ScaffoldOptions::hasOptions public static function Determines if the provided 'extras' section has scaffold options.
ScaffoldOptions::locations public function Gets the location mapping table, e.g. 'webroot' => './'.
ScaffoldOptions::override protected function Creates a new scaffold options object with some values overridden.
ScaffoldOptions::overrideSymlink public function Creates a new scaffold options object with an overridden 'symlink' value.
ScaffoldOptions::symlink public function Determines if symlink mode is set.
ScaffoldOptions::__construct protected function ScaffoldOptions constructor.