client = $client; $this->pairing = $pairing; $this->capabilities = $capabilities; } public function dispatch( ReleaseEvent $event ): ?RunSummary { if ( ! $this->pairing->is_connected() ) { return null; } $capabilities = $this->capabilities->get(); if ( ! $capabilities instanceof RunCapabilities ) { $capabilities = $this->client->capabilities(); $this->capabilities->store( $capabilities ); } if ( ! $capabilities->permits( $event ) ) { return null; } $urls = array_slice( $event->urls, 0, $capabilities->max_urls ); return $this->client->queue( $event->with_urls( $urls ), $this->modules() ); } private function modules(): ModuleSelection { $settings = get_option( Options::SETTINGS, array() ); $settings = is_array( $settings ) ? $settings : array(); $mapping = array( 'release_guard' => 'release_guard', 'sitemap_watch' => 'sitemap_indexability', 'schema_watch' => 'schema_regression', ); $modules = array(); foreach ( $mapping as $setting => $module ) { if ( ! empty( $settings[ $setting ] ) ) { $modules[] = $module; } } return new ModuleSelection( array() === $modules ? array( 'release_guard' ) : $modules ); } }