1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
# Fiber::Local
A module to simplify fiber-local state.
[](https://github.com/socketry/fiber-local/actions?workflow=Test)
## Features
- Easily access fiber-local state from a fiber.
- Default to shared thread-local state.
## Installation
``` bash
$ bundle add fiber-local
```
## Usage
In your own class, e.g. `Logger`:
``` ruby
class Logger
extend Fiber::Local
def initialize
@buffer = []
end
def log(*arguments)
@buffer << arguments
end
end
```
Now, instead of instantiating your cache `LOGGER = Logger.new`, use `Logger.instance`. It will return a thread-local instance.
``` ruby
Thread.new do
Logger.instance
# => #<Logger:0x000055a14ec6be80>
end
Thread.new do
Logger.instance
# => #<Logger:0x000055a14ec597d0>
end
```
In cases where you have job per fiber or request per fiber, you might want to collect all log output for a specific fiber, you can do the following:
``` ruby
Logger.instance
# => #<Logger:0x000055a14ec6be80>
Fiber.new do
Logger.instance = Logger.new
# => #<Logger:0x000055a14ec597d0>
end
```
## Contributing
We welcome contributions to this project.
1. Fork it.
2. Create your feature branch (`git checkout -b my-new-feature`).
3. Commit your changes (`git commit -am 'Add some feature'`).
4. Push to the branch (`git push origin my-new-feature`).
5. Create new Pull Request.
### Developer Certificate of Origin
This project uses the [Developer Certificate of Origin](https://developercertificate.org/). All contributors to this project must agree to this document to have their contributions accepted.
### Contributor Covenant
This project is governed by the [Contributor Covenant](https://www.contributor-covenant.org/). All contributors and participants agree to abide by its terms.
## See Also
- [thread-local](https://github.com/socketry/thread-local) — Strictly thread-local variables.
|