(dev/core#635) CRM_Utils_Cache::nack() - Fix format
authorTim Otten <totten@civicrm.org>
Wed, 30 Jan 2019 05:08:23 +0000 (21:08 -0800)
committerTim Otten <totten@civicrm.org>
Wed, 30 Jan 2019 05:40:33 +0000 (21:40 -0800)
commit898614742256b2047d0064219a3958c80864b375
tree1925008660182111159e8ee01e5c480130e2d90a
parentb8106826798885ea2b548b9d09ebe841322a7a0a
(dev/core#635) CRM_Utils_Cache::nack() - Fix format

This is a follow-up to #13500.

Before
------

* `CRM_Utils_Cache::nack()` returns an array with a value named `nack`.
* The value returned is somewhat unique -- a random value is generated once per page-view.
* There is no explicit/direct unit-test.

After
-----

* `CRM_Utils_Cache::nack()` returns a string.
* The value returned is more unique -- combining that random value (per page-view) and an offset (per invocation).
* There is an explicit/direct unit-test.

Comments
--------

* The code was originally written with the intent of returning a string.
  However, there was a slight copy-paste error which caused it to return an
  array (which contained that string).  Functionally, that worked (because
  it was serializable and met the same minimum uniqueness constraint),
  but it's weird to read/inspect, and we should change quickly before
  something else locks-in the odd structure.

* The more unique the nack-value is, the more correct the nack-checking
  pattern is.  Appending a static-counter is a simple, fast way to provide
  stronger uniqueness within a page-view.

* There may be some obscure edge-cases in which the previous pattern was not
  sufficiently unique -- e.g.  combining tiers-of-tiers or
  decorators-of-decorators.  I haven't verified that, but it seems
  unimportant given that the static-counter is so straightforward.

* In `NaiveHasTrait`, the extra `ht` suffix was an attempt to increase the
  uniquness.  However, the static-counter seems better.
CRM/Utils/Cache.php
CRM/Utils/Cache/NaiveHasTrait.php
tests/phpunit/CRM/Utils/CacheTest.php [new file with mode: 0644]