philiprehberger-state_bag
Thread-local state bag for implicit context propagation
Requirements
- Ruby >= 3.1
Installation
Add to your Gemfile:
gem "philiprehberger-state_bag"Or install directly:
gem install philiprehberger-state_bagUsage
require "philiprehberger/state_bag"
Philiprehberger::StateBag.set(:user_id, 42)
Philiprehberger::StateBag.get(:user_id)
# => 42Default Values
Philiprehberger::StateBag.get(:missing, 'fallback')
# => "fallback"Scoped Overrides
Philiprehberger::StateBag.set(:locale, 'en')
Philiprehberger::StateBag.with(locale: 'de') do
Philiprehberger::StateBag.get(:locale)
# => "de"
end
Philiprehberger::StateBag.get(:locale)
# => "en"Fetch and Delete
require "philiprehberger/state_bag"
Philiprehberger::StateBag.set(:user, "Alice")
Philiprehberger::StateBag.fetch(:user) # => "Alice"
Philiprehberger::StateBag.fetch(:missing, "default") # => "default"
Philiprehberger::StateBag.fetch(:missing) { |k| "no #{k}" } # => "no missing"
Philiprehberger::StateBag.delete(:user) # => "Alice"
Philiprehberger::StateBag.key?(:user) # => falseInspection
Philiprehberger::StateBag.set(:a, 1)
Philiprehberger::StateBag.key?(:a) # => true
Philiprehberger::StateBag.to_h # => {:a=>1}
Philiprehberger::StateBag.clearAPI
| Method | Description |
|---|---|
.set(key, val) |
Store a value in the thread-local state bag |
.get(key, default = nil) |
Retrieve a value or return the default |
.with(**overrides, &block) |
Execute block with temporary state, restoring after |
.fetch(key, default = UNSET, &block) |
Retrieve a value; raises KeyError if missing with no default/block |
.delete(key) |
Remove a key and return its value |
.clear |
Remove all entries from the state bag |
.to_h |
Return a snapshot of the current state |
.key?(key) |
Check if a key exists in the state bag |
Development
bundle install
bundle exec rspec
bundle exec rubocopSupport
If you find this project useful: