/lib/vendor/google/auth/src/Cache/Item.php
https://gitlab.com/efabian/maya · PHP · 190 lines · 95 code · 29 blank · 66 comment · 9 complexity · 2862106512ea1760c819f1d8c983b6e8 MD5 · raw file
- <?php
- /*
- * Copyright 2016 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- namespace Google\Auth\Cache;
- use Psr\Cache\CacheItemInterface;
- /**
- * A cache item.
- */
- final class Item implements CacheItemInterface
- {
- /**
- * @var string
- */
- private $key;
- /**
- * @var mixed
- */
- private $value;
- /**
- * @var \DateTime|null
- */
- private $expiration;
- /**
- * @var bool
- */
- private $isHit = false;
- /**
- * @param string $key
- */
- public function __construct($key)
- {
- $this->key = $key;
- }
- /**
- * {@inheritdoc}
- */
- public function getKey()
- {
- return $this->key;
- }
- /**
- * {@inheritdoc}
- */
- public function get()
- {
- return $this->isHit() ? $this->value : null;
- }
- /**
- * {@inheritdoc}
- */
- public function isHit()
- {
- if (!$this->isHit) {
- return false;
- }
- if ($this->expiration === null) {
- return true;
- }
- return $this->currentTime()->getTimestamp() < $this->expiration->getTimestamp();
- }
- /**
- * {@inheritdoc}
- */
- public function set($value)
- {
- $this->isHit = true;
- $this->value = $value;
- return $this;
- }
- /**
- * {@inheritdoc}
- */
- public function expiresAt($expiration)
- {
- if ($this->isValidExpiration($expiration)) {
- $this->expiration = $expiration;
- return $this;
- }
- $implementationMessage = interface_exists('DateTimeInterface')
- ? 'implement interface DateTimeInterface'
- : 'be an instance of DateTime';
- $error = sprintf(
- 'Argument 1 passed to %s::expiresAt() must %s, %s given',
- get_class($this),
- $implementationMessage,
- gettype($expiration)
- );
- $this->handleError($error);
- }
- /**
- * {@inheritdoc}
- */
- public function expiresAfter($time)
- {
- if (is_int($time)) {
- $this->expiration = $this->currentTime()->add(new \DateInterval("PT{$time}S"));
- } elseif ($time instanceof \DateInterval) {
- $this->expiration = $this->currentTime()->add($time);
- } elseif ($time === null) {
- $this->expiration = $time;
- } else {
- $message = 'Argument 1 passed to %s::expiresAfter() must be an ' .
- 'instance of DateInterval or of the type integer, %s given';
- $error = sprintf($message, get_class($this), gettype($time));
- $this->handleError($error);
- }
- return $this;
- }
- /**
- * Handles an error.
- *
- * @param string $error
- * @throws \TypeError
- */
- private function handleError($error)
- {
- if (class_exists('TypeError')) {
- throw new \TypeError($error);
- }
- trigger_error($error, E_USER_ERROR);
- }
- /**
- * Determines if an expiration is valid based on the rules defined by PSR6.
- *
- * @param mixed $expiration
- * @return bool
- */
- private function isValidExpiration($expiration)
- {
- if ($expiration === null) {
- return true;
- }
- // We test for two types here due to the fact the DateTimeInterface
- // was not introduced until PHP 5.5. Checking for the DateTime type as
- // well allows us to support 5.4.
- if ($expiration instanceof \DateTimeInterface) {
- return true;
- }
- if ($expiration instanceof \DateTime) {
- return true;
- }
- return false;
- }
- protected function currentTime()
- {
- return new \DateTime('now', new \DateTimeZone('UTC'));
- }
- }