All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- More robust handling of history tracking when keys are deleted and then reused. Previously, the history was not fully recorded when a key was reused. Now the history on the old key is recorded as a delete and the history on the new key is recorded as being an update.
- Times are now consistently encoded in UTC in ISO-8601 format with microseconds whenever they are serialized to JSON.
- Fixed ActiveRecord code handling changing a setting key to one that had previously been used. The previous code relied on a unique key constraint error to detect this condition, but Postgres does not handle this well since it invalidates the entire transaction. Now the code checks for the uniqueness of the key before attempting to save the setting.
- Coercing a string to a boolean is now case insensitive (i.e. "True" is interpreted as
true
and "False" is interpreted asfalse
).
- Added support for targeting a editing a specific setting in the web UI by passing
#edit=key
in the URL hash.
- Added controls for sorting settings in the web UI by keys or last modified time.
- Isolated of CSS classes in the web UI to prevent conflicts with other CSS libraries.
- Dark mode support in web UI.
- Added ability to embed the web UI in a view to allow tighter integration with your application's UI.
- Added storage adapter for storing settings in an S3 object.
- Added storage adapter for storing settings in MongoDB.
- HTTP storage adapter now uses keep-alive connections to improve performance.
- Changing a key now works as expected. Previously, a new setting was created with the new key and the old setting was left unchanged. Now, the old setting is properly marked as deleted.
- Consistently handle converting floating point number to timestamps in Redis storage.
- Rails 4.2, 5.0, and 5.1 support has been removed.
- Removed support for Ruby 2.5.
- Added SuperSetting.rand method that can return a consistent random number inside of a context block.
- Lazy load non-required classes.
- Optimize object shapes for the Ruby interpreter by declaring instance variables in constructors.
- Everything!