Skip to content

MichinaoShimizu/edrive

Repository files navigation

edrive

Gem Version

Provide simple event dispatcher mechanism for all of ruby products.

Installation

Add this line to your application's Gemfile:

gem 'edrive'

And then execute:

$ bundle

Or install it yourself as:

$ gem install edrive

Usage

Edrive::Dispatcher

main class

lambda & dispatch

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

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

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

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

dispatcher.clear!(:event)

clear all event

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.

  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.

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 code of conduct.

License

The gem is available as open source under the terms of the MIT License.

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.