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 ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in cwgem-eventpublisher.gemspec
4
+ gemspec
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,5 @@
1
+ module Cwgem
2
+ module Eventpublisher
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -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