cwgem-eventpublisher 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/cwgem-eventpublisher.gemspec +20 -0
- data/lib/cwgem-eventpublisher.rb +35 -0
- data/lib/cwgem-eventpublisher/version.rb +5 -0
- data/test/test_eventpublisher.rb +90 -0
- metadata +54 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "cwgem-eventpublisher/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "cwgem-eventpublisher"
|
7
|
+
s.version = Cwgem::Eventpublisher::VERSION
|
8
|
+
s.authors = ["Chris White"]
|
9
|
+
s.email = ["cwprogram@live.com"]
|
10
|
+
s.homepage = "https://github.com/cwgem/eventpublisher"
|
11
|
+
s.summary = %q{A simple mix-inable module to provide Publisher/Consumer style event handling}
|
12
|
+
s.description = %q{A simple mix-inable module to provide Publisher/Consumer style event handling}
|
13
|
+
|
14
|
+
s.rubyforge_project = "cwgem-eventpublisher"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "cwgem-eventpublisher/version"
|
2
|
+
|
3
|
+
module Cwgem
|
4
|
+
module EventPublisher
|
5
|
+
attr_reader :events
|
6
|
+
attr_reader :subscribers
|
7
|
+
|
8
|
+
def setup_events(events)
|
9
|
+
@events = events
|
10
|
+
@subscribers = {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_events
|
14
|
+
@events
|
15
|
+
end
|
16
|
+
|
17
|
+
def subscribe(event,handler)
|
18
|
+
return false if ! @events.include? event
|
19
|
+
@subscribers[event] = [] if @subscribers[event].nil?
|
20
|
+
@subscribers[event] << handler
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
def publish_event(event,*args)
|
25
|
+
return false if ! @events.include? event
|
26
|
+
return true if @subscribers[event].nil?
|
27
|
+
|
28
|
+
@subscribers[event].each do |handler|
|
29
|
+
handler.call event, *args
|
30
|
+
end
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
34
|
+
end # module EventPublisher
|
35
|
+
end # module Cwgem
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require 'cwgem-eventpublisher'
|
3
|
+
|
4
|
+
def subscriber_method(event, *args)
|
5
|
+
# use a global variable to get the test
|
6
|
+
# results back to the Unit Test for assert_
|
7
|
+
$test_result = [event,args]
|
8
|
+
end
|
9
|
+
|
10
|
+
class TestEventPublisher < Test::Unit::TestCase
|
11
|
+
|
12
|
+
class MyEmptyEventPublisher
|
13
|
+
include Cwgem::EventPublisher
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
events = []
|
17
|
+
setup_events events
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class MyEventPublisher
|
22
|
+
include Cwgem::EventPublisher
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
events = [:hello]
|
26
|
+
setup_events events
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class MySubscriber
|
31
|
+
attr_reader :result
|
32
|
+
|
33
|
+
def handle_event(event, *args)
|
34
|
+
@result = [event,args]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_empty_events
|
39
|
+
empty_event_publisher = MyEmptyEventPublisher.new
|
40
|
+
|
41
|
+
assert_equal [], empty_event_publisher.get_events
|
42
|
+
assert_equal false, empty_event_publisher.publish_event(:nothing,'test')
|
43
|
+
|
44
|
+
subscriber = MySubscriber.new
|
45
|
+
assert_equal false, empty_event_publisher.subscribe(:nothing, subscriber.method(:handle_event))
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_single_event_no_subscribers
|
49
|
+
event_publisher = MyEventPublisher.new
|
50
|
+
|
51
|
+
assert_equal [:hello], event_publisher.get_events
|
52
|
+
assert_equal true, event_publisher.publish_event(:hello, "Test")
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_single_event_one_subscriber
|
56
|
+
event_publisher = MyEventPublisher.new
|
57
|
+
|
58
|
+
assert_equal [:hello], event_publisher.get_events
|
59
|
+
|
60
|
+
subscriber = MySubscriber.new
|
61
|
+
assert_equal true, event_publisher.subscribe(:hello, subscriber.method(:handle_event))
|
62
|
+
assert_equal true, event_publisher.publish_event(:hello, "Test")
|
63
|
+
assert_equal [:hello, ["Test"]], subscriber.result
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_single_event_multiple_subscribers
|
67
|
+
event_publisher = MyEventPublisher.new
|
68
|
+
|
69
|
+
assert_equal [:hello], event_publisher.get_events
|
70
|
+
|
71
|
+
subscriber1 = MySubscriber.new
|
72
|
+
subscriber2 = MySubscriber.new
|
73
|
+
assert_equal true, event_publisher.subscribe(:hello, subscriber1.method(:handle_event))
|
74
|
+
assert_equal true, event_publisher.subscribe(:hello, subscriber2.method(:handle_event))
|
75
|
+
assert_equal true, event_publisher.publish_event(:hello, "Test")
|
76
|
+
assert_equal [:hello, ["Test"]], subscriber1.result
|
77
|
+
assert_equal [:hello, ["Test"]], subscriber2.result
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_non_class_method_subscriber
|
81
|
+
event_publisher = MyEventPublisher.new
|
82
|
+
|
83
|
+
assert_equal [:hello], event_publisher.get_events
|
84
|
+
|
85
|
+
assert_equal true, event_publisher.subscribe(:hello, method(:subscriber_method))
|
86
|
+
assert_equal true, event_publisher.publish_event(:hello, "Test")
|
87
|
+
assert_equal [:hello, ["Test"]], $test_result
|
88
|
+
end
|
89
|
+
|
90
|
+
end # end UnitTest class
|
metadata
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cwgem-eventpublisher
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Chris White
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-09-13 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: A simple mix-inable module to provide Publisher/Consumer style event
|
15
|
+
handling
|
16
|
+
email:
|
17
|
+
- cwprogram@live.com
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- .gitignore
|
23
|
+
- Gemfile
|
24
|
+
- Rakefile
|
25
|
+
- cwgem-eventpublisher.gemspec
|
26
|
+
- lib/cwgem-eventpublisher.rb
|
27
|
+
- lib/cwgem-eventpublisher/version.rb
|
28
|
+
- test/test_eventpublisher.rb
|
29
|
+
homepage: https://github.com/cwgem/eventpublisher
|
30
|
+
licenses: []
|
31
|
+
post_install_message:
|
32
|
+
rdoc_options: []
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
requirements: []
|
48
|
+
rubyforge_project: cwgem-eventpublisher
|
49
|
+
rubygems_version: 1.8.10
|
50
|
+
signing_key:
|
51
|
+
specification_version: 3
|
52
|
+
summary: A simple mix-inable module to provide Publisher/Consumer style event handling
|
53
|
+
test_files:
|
54
|
+
- test/test_eventpublisher.rb
|