bucket('my-bucket'); * $notification = $bucket->notification('2482'); * ``` * * @see https://cloud.google.com/storage/docs/pubsub-notifications * @experimental The experimental flag means that while we believe this method * or class is ready for use, it may change before release in backwards- * incompatible ways. Please use with caution, and test thoroughly when * upgrading. */ class Notification { use ArrayTrait; /** * @var ConnectionInterface Represents a connection to Cloud Storage. */ private $connection; /** * @var array The notification's identity. */ private $identity; /** * @var array The notification's metadata. */ private $info; /** * @param ConnectionInterface $connection Represents a connection to Cloud * Storage. * @param string $id The notification's ID. * @param string $bucket The name of the bucket associated with this * notification. * @param array $info [optional] The notification's metadata. */ public function __construct(\DeliciousBrains\WP_Offload_Media\Gcp\Google\Cloud\Storage\Connection\ConnectionInterface $connection, $id, $bucket, array $info = []) { $this->connection = $connection; $this->identity = ['bucket' => $bucket, 'notification' => $id, 'userProject' => $this->pluck('requesterProjectId', $info, false)]; $this->info = $info; } /** * Check whether or not the notification exists. * * Example: * ``` * if ($notification->exists()) { * echo 'Notification exists!'; * } * ``` * * @return bool */ public function exists() { try { $this->connection->getNotification($this->identity + ['fields' => 'id']); } catch (NotFoundException $ex) { return false; } return true; } /** * Delete the notification. * * Example: * ``` * $notification->delete(); * ``` * * @codingStandardsIgnoreStart * @see https://cloud.google.com/storage/docs/json_api/v1/notifications/delete Notifications delete API documentation. * @codingStandardsIgnoreEnd * * @param array $options [optional] * @return void */ public function delete(array $options = []) { $this->connection->deleteNotification($options + $this->identity); } /** * Retrieves the notification's details. If no notification data is cached a * network request will be made to retrieve it. * * Example: * ``` * $info = $notification->info(); * echo $info['topic']; * ``` * * @see https://cloud.google.com/storage/docs/json_api/v1/notifications/get Notifications get API documentation. * * @param array $options [optional] * @return array */ public function info(array $options = []) { return $this->info ?: $this->reload($options); } /** * Triggers a network request to reload the notification's details. * * Example: * ``` * $notification->reload(); * $info = $notification->info(); * echo $info['topic']; * ``` * * @see https://cloud.google.com/storage/docs/json_api/v1/notifications/get Notifications get API documentation. * * @param array $options [optional] * @return array */ public function reload(array $options = []) { return $this->info = $this->connection->getNotification($options + $this->identity); } /** * Retrieves the notification's ID. * * Example: * ``` * echo $notification->id(); * ``` * * @return string */ public function id() { return $this->identity['notification']; } /** * Retrieves the notification's identity. * * Example: * ``` * echo $notification->identity()['bucket']; * ``` * * @return string */ public function identity() { return $this->identity; } }