Completed
Push — renovate/mocha-8.x ( 07030e...e8e64c )
by
unknown
28:17 queued 19:09
created

Autoloader_Locator   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
dl 0
loc 74
rs 10
c 0
b 0
f 0
wmc 8
lcom 1
cbo 1

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A find_latest_autoloader() 0 15 3
A get_autoloader_path() 0 3 1
A get_autoloader_version() 0 13 3
1
<?php
2
/* HEADER */ // phpcs:ignore
3
4
use \Automattic\Jetpack\Autoloader\AutoloadGenerator;
5
6
/**
7
 * This class locates autoloaders.
8
 */
9
class Autoloader_Locator {
10
11
	/**
12
	 * The object for comparing autoloader versions.
13
	 *
14
	 * @var Version_Selector
15
	 */
16
	private $version_selector;
17
18
	/**
19
	 * The constructor.
20
	 *
21
	 * @param Version_Selector $version_selector The version selector object.
22
	 */
23
	public function __construct( $version_selector ) {
24
		$this->version_selector = $version_selector;
25
	}
26
27
	/**
28
	 * Finds the path to the plugin with the latest autoloader.
29
	 *
30
	 * @param array  $plugin_paths An array of plugin paths.
31
	 * @param string $latest_version The latest version reference.
32
	 *
33
	 * @return string|null
34
	 */
35
	public function find_latest_autoloader( $plugin_paths, &$latest_version ) {
36
		$latest_plugin = null;
37
38
		foreach ( $plugin_paths as $plugin_path ) {
39
			$version = $this->get_autoloader_version( $plugin_path );
40
			if ( ! $this->version_selector->is_version_update_required( $latest_version, $version ) ) {
41
				continue;
42
			}
43
44
			$latest_version = $version;
45
			$latest_plugin  = $plugin_path;
46
		}
47
48
		return $latest_plugin;
49
	}
50
51
	/**
52
	 * Gets the path to the autoloader.
53
	 *
54
	 * @param string $plugin_path The path to the plugin.
55
	 *
56
	 * @return string
57
	 */
58
	public function get_autoloader_path( $plugin_path ) {
59
		return trailingslashit( $plugin_path ) . 'vendor/autoload_packages.php';
60
	}
61
62
	/**
63
	 * Gets the version for the autoloader.
64
	 *
65
	 * @param string $plugin_path The path to the plugin.
66
	 *
67
	 * @return string|null
68
	 */
69
	public function get_autoloader_version( $plugin_path ) {
70
		$classmap = trailingslashit( $plugin_path ) . 'vendor/composer/jetpack_autoload_classmap.php';
71
		if ( ! file_exists( $classmap ) ) {
72
			return null;
73
		}
74
75
		$classmap = require $classmap;
76
		if ( isset( $classmap[ AutoloadGenerator::class ] ) ) {
77
			return $classmap[ AutoloadGenerator::class ]['version'];
78
		}
79
80
		return null;
81
	}
82
}
83