Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
73 additions
and
73 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,33 +1,4 @@ | ||
module ActiveAdmin | ||
|
||
class EventDispatcher | ||
def initialize | ||
@events = {} | ||
end | ||
|
||
def clear_all_subscribers! | ||
@events = {} | ||
end | ||
|
||
def subscribe(*event_names, &block) | ||
event_names.each do |event| | ||
@events[event] ||= [] | ||
@events[event] << block | ||
end | ||
end | ||
|
||
def subscribers(event) | ||
@events[event] || [] | ||
end | ||
|
||
def dispatch(event, *args) | ||
subscribers(event).each do |subscriber| | ||
subscriber.call(*args) | ||
end | ||
end | ||
end | ||
|
||
# ActiveAdmin::Event is set to a dispatcher | ||
Event = EventDispatcher.new | ||
|
||
# ActiveAdmin::Event is set to a dispatcher instance | ||
Event = ActiveAdmin::EventDispatcher.new | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
module ActiveAdmin | ||
class EventDispatcher | ||
def initialize | ||
@events = {} | ||
end | ||
|
||
def clear_all_subscribers! | ||
@events = {} | ||
end | ||
|
||
def subscribe(*event_names, &block) | ||
event_names.each do |event| | ||
@events[event] ||= [] | ||
@events[event] << block | ||
end | ||
end | ||
|
||
def subscribers(event) | ||
@events[event] || [] | ||
end | ||
|
||
def dispatch(event, *args) | ||
subscribers(event).each do |subscriber| | ||
subscriber.call(*args) | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
require 'rails_helper' | ||
|
||
describe ActiveAdmin::EventDispatcher do | ||
let(:test_event){ 'active_admin.test_event' } | ||
let(:dispatcher){ ActiveAdmin::EventDispatcher.new } | ||
|
||
it "should add a subscriber for an event" do | ||
expect(dispatcher.subscribers(test_event).size).to eq 0 | ||
dispatcher.subscribe(test_event){ true } | ||
expect(dispatcher.subscribers(test_event).size).to eq 1 | ||
end | ||
|
||
it "should add a subscriber for multiple events" do | ||
dispatcher.subscribe(test_event, test_event + "1"){ true } | ||
expect(dispatcher.subscribers(test_event).size).to eq 1 | ||
expect(dispatcher.subscribers(test_event + "1").size).to eq 1 | ||
end | ||
|
||
it "should call the dispatch block with no arguments" do | ||
dispatcher.subscribe(test_event){ raise StandardError, "From Event Handler" } | ||
expect { | ||
dispatcher.dispatch(test_event) | ||
}.to raise_error(StandardError, "From Event Handler") | ||
end | ||
|
||
it "should call the dispatch block with one argument" do | ||
arg = nil | ||
dispatcher.subscribe(test_event){|passed_in| arg = passed_in } | ||
dispatcher.dispatch(test_event, "My Arg") | ||
expect(arg).to eq "My Arg" | ||
end | ||
|
||
it "should clear all subscribers" do | ||
dispatcher.subscribe(test_event){ false } | ||
dispatcher.subscribe(test_event + "_2"){ false } | ||
dispatcher.clear_all_subscribers! | ||
expect(dispatcher.subscribers(test_event).size).to eq 0 | ||
expect(dispatcher.subscribers(test_event + "_2").size).to eq 0 | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,47 +1,7 @@ | ||
require 'rails_helper' | ||
require 'active_admin/event' | ||
|
||
describe ActiveAdmin::EventDispatcher do | ||
|
||
let(:test_event){ 'active_admin.test_event' } | ||
let(:dispatcher){ ActiveAdmin::EventDispatcher.new } | ||
|
||
it "should add a subscriber for an event" do | ||
expect(dispatcher.subscribers(test_event).size).to eq 0 | ||
dispatcher.subscribe(test_event){ true } | ||
expect(dispatcher.subscribers(test_event).size).to eq 1 | ||
end | ||
|
||
it "should add a subscriber for multiple events" do | ||
dispatcher.subscribe(test_event, test_event + "1"){ true } | ||
expect(dispatcher.subscribers(test_event).size).to eq 1 | ||
expect(dispatcher.subscribers(test_event + "1").size).to eq 1 | ||
end | ||
|
||
it "should call the dispatch block with no arguments" do | ||
dispatcher.subscribe(test_event){ raise StandardError, "From Event Handler" } | ||
expect { | ||
dispatcher.dispatch(test_event) | ||
}.to raise_error(StandardError, "From Event Handler") | ||
end | ||
|
||
it "should call the dispatch block with one argument" do | ||
arg = nil | ||
dispatcher.subscribe(test_event){|passed_in| arg = passed_in } | ||
dispatcher.dispatch(test_event, "My Arg") | ||
expect(arg).to eq "My Arg" | ||
end | ||
|
||
it "should clear all subscribers" do | ||
dispatcher.subscribe(test_event){ false } | ||
dispatcher.subscribe(test_event + "_2"){ false } | ||
dispatcher.clear_all_subscribers! | ||
expect(dispatcher.subscribers(test_event).size).to eq 0 | ||
expect(dispatcher.subscribers(test_event + "_2").size).to eq 0 | ||
end | ||
|
||
it "should have a dispatcher available from ActiveAdmin::Event" do | ||
describe ActiveAdmin::Event do | ||
it "should be a dispatcher instance of ActiveAdmin::EventDispatcher" do | ||
expect(ActiveAdmin::Event).to be_an_instance_of(ActiveAdmin::EventDispatcher) | ||
end | ||
|
||
end |