- Use case: I'm writing a wrapper around MessageEncryptor to make things easier to rotate a secret in our app. It works something like ```ruby crypt = RotatableSecret.new(['old_secret', 'new_secret']) crypt.decrypt_and_verify(message) ``` I'd like the caller to not have to care about passing the `on_rotation` option and have the wrapper deal with it when instantiating the MessageEncryptor object. Also, almost all of the time the on_rotation should be the same when rotating a secret (logging something or StatsD event) so I think it's not worth having to repeat ourselves each time we decrypt a message.
1.4 KiB
-
Allow the on_rotation proc used when decrypting/verifying a message to be be passed at the constructor level.
Before:
crypt = ActiveSupport::MessageEncryptor.new('long_secret') crypt.decrypt_and_verify(encrypted_message, on_rotation: proc { ... }) crypt.decrypt_and_verify(another_encrypted_message, on_rotation: proc { ... })
After:
crypt = ActiveSupport::MessageEncryptor.new('long_secret', on_rotation: proc { ... }) crypt.decrypt_and_verify(encrypted_message) crypt.decrypt_and_verify(another_encrypted_message)
Edouard Chin
-
delegate_missing_to
would raise aDelegationError
if the object delegated to wasnil
. Now theallow_nil
option has been added to enable the user to specify they wantnil
returned in this case.Matthew Tanous
-
truncate
would return the original string if it was too short to be truncated and a frozen string if it were long enough to be truncated. Now truncate will consistently return an unfrozen string regardless. This behavior is consistent withgsub
andstrip
.Before:
'foobar'.truncate(5).frozen? # => true 'foobar'.truncate(6).frozen? # => false
After:
'foobar'.truncate(5).frozen? # => false 'foobar'.truncate(6).frozen? # => false
Jordan Thomas
Please check 6-0-stable for previous changes.