Utility to "stash" objects and enable sharing across separate ruby sessions.
In order to access Stasche, you will need to configure it in each sesssion you want to have access to the data. This can be done using either Redis or S3 as the backend store.
require 'stasche'
Stasche.configure do |configuration|
configuration.store = :s3
configuration.namespace = 'custom-stasche'
configuration.region = 'us-east-1'
configuration.bucket = 'my-s3-bucket'
configuration.access_key_id = 'my_aws_access_key_id'
configuration.secret_access_key = 'my_aws_secret_access_key'
configuration.encrypter = MyEncrypter
configuration.encryption_key = 'my_super_secret_encryption_key'
end
require 'stasche'
Stasche.configure do |configuration|
configuration.store = :redis
configuration.namespace = 'custom-stasche'
configuration.url = ENV['STASCHE_REDIS_URL']
configuration.encrypter = MyEncrypter
configuration.encryption_key = 'my_super_secret_encryption_key'
end
The configuration requires an encrypter
. Existing usage on the monolith uses SimpleboxCryptr
, but you may also supply a different class as long as it supports the interface below
class MyEncrypter
def self.encrypt(key, plaintext)
...
end
def self.decrypt(key, ciphertext)
...
end
end
Stasche is automatically configured when using thor scripts.
In order to set or get keys used by your thor script, you will need to configure stasche locally with the same values. The configuration for thor is defined at: https://gitlab.checkrhq.net/platform/checkr/-/blob/master/lib/scripts/base.thor#L4-13
When setting a key, please use a reasonably specific name for your data. This reduces the chance of conflicing with other keys. If you are unsure whether a key is already used, you can run Stasche.get(:key_name)
and see if a value is returned.
# Session A
Stasche.set(user_emails: User.where(id: ids).pluck(:email))
# Session B
user_emails = Stasche.get(:user_emails)
The set method allows you to add an options
hash as a second parameter, for example to set a given key even if already exists
# Session A
Stasche.set({foo: 'bar'}, force: true)
# Session B
foo_value = Stasche.get(:foo)
# Session A
Stasche << User.where(id: ids).pluck(:email)
# => "CKt6MiweFP8jc3ahmz5FZA"
# Session B
Stasche.peek # returns last value, without removing from cache
# => [...]
Stasche.pop # dequeues last value, deleting from cache
# => [...]
# Listing stored keys
Stasche.ls
# => [...]