Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/michinaoshimizu/edrive
Generic event dispatcher for ruby
https://github.com/michinaoshimizu/edrive
event-dispatcher gem rspec ruby ruby-gems
Last synced: 18 days ago
JSON representation
Generic event dispatcher for ruby
- Host: GitHub
- URL: https://github.com/michinaoshimizu/edrive
- Owner: MichinaoShimizu
- License: mit
- Created: 2018-07-01T04:30:36.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-12-06T14:36:20.000Z (about 5 years ago)
- Last Synced: 2024-12-18T15:42:16.111Z (about 2 months ago)
- Topics: event-dispatcher, gem, rspec, ruby, ruby-gems
- Language: Ruby
- Homepage:
- Size: 29.3 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# edrive
[![Gem Version](https://badge.fury.io/rb/edrive.svg)](https://badge.fury.io/rb/edrive)
Provide simple event dispatcher mechanism for all of ruby products.
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'edrive'
```And then execute:
$ bundle
Or install it yourself as:
$ gem install edrive
## Usage
### Edrive::Dispatcher
main class
#### lambda & dispatch
```ruby
dispatcher = Edrive::Dispatcher.new
dispatcher.subscribe(:event, -> { puts 1 })
dispatcher.subscribe(:event, -> { puts 2 })
dispatcher.subscribe(:event, -> { puts 3 })
dispatcher.dispatch(:event)1
2
3
```#### lambda & dispatch with data
```ruby
dispatcher = Edrive::Dispatcher.new
dispatcher.subscribe(:event, ->(data) { data + 1 })
dispatcher.subscribe(:event, ->(data) { data + 2 })
dispatcher.subscribe(:event, ->(data) { data + 3 })
dispatcher.subscribe(:event, ->(data) { puts data })
dispatcher.dispatch_with_data(:event, 100)106
```#### block
```ruby
dispatcher = Edrive::Dispatcher.new
dispatcher.subscribe(:event) { puts 1 }
dispatcher.subscribe(:event) { puts 2 }
dispatcher.subscribe(:event) { puts 3 }
dispatcher.dispatch(:event)1
2
3
```#### block & dispatch with data
```ruby
dispatcher = Edrive::Dispatcher.new
dispatcher.subscribe(:event) { |data| data + 1 }
dispatcher.subscribe(:event) { |data| data + 2 }
dispatcher.subscribe(:event) { |data| data + 3 }
dispatcher.dispatch_with_data(:event, 100)106
```### clear target event
```ruby
dispatcher.clear!(:event)
```### clear all event
```ruby
dispatcher.clear_all!
```### Edrive::ProcessorDispatcher
Event dispatcher for processor class inherited `Edrive::Dispatcher`.
Use `:before_process`, `:after_process` events only in this class.
This class has `dispatch_all` method.
```ruby
def dispatch_all(use_result = true)
dispatch(DEFINED_EVENT[0])
if use_result
result = dispatch_processor_process
return dispatch_with_data(DEFINED_EVENT[1], result)
end
dispatch_processor_process
dispatch(DEFINED_EVENT[1])
end
```### Edrive::Handler
sample event handlers class.
```ruuby
require 'edrive'dispatcher = Edrive::Dispatcher.new
dispatcher.subscribe(:before, Edrive::Handler.hash2json)
dispatcher.subscribe(:before, Edrive::Handler.json2hash)
puts dispatcher.dispatch_with_data(:before, hoge: 2, fuga: 3)
```## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/MichinaoShimizu/edrive. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
## Code of Conduct
Everyone interacting in the Edrive project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/MichinaoShimizu/edrive/blob/master/CODE_OF_CONDUCT.md).