audible 0.0.2 → 0.1.0

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/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ branches:
6
+ only:
7
+ - master
8
+ gemfile: Gemfile
9
+ notifications:
10
+ recipients:
11
+ - ben.biddington@gmail.com
data/Rakefile CHANGED
@@ -33,3 +33,9 @@ Rake::RDocTask.new do |rdoc|
33
33
  rdoc.rdoc_files.include('README*')
34
34
  rdoc.rdoc_files.include('lib/**/*.rb')
35
35
  end
36
+
37
+ require 'rspec/core/rake_task'
38
+
39
+ RSpec::Core::RakeTask.new(:unit_tests)
40
+
41
+ task :default => :unit_tests
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.1.0
data/audible.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "audible"
8
- s.version = "0.0.2"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ben Biddington"]
12
- s.date = "2013-07-02"
12
+ s.date = "2013-07-11"
13
13
  s.description = "Object communications"
14
14
  s.email = "ben.biddington@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
+ ".travis.yml",
21
22
  "Gemfile",
22
23
  "Gemfile.lock",
23
24
  "LICENSE.txt",
@@ -1,20 +1,30 @@
1
1
  module Audible
2
- def on(event, &block)
3
- listeners_for(event) << block if block_given?
2
+ def on(*events, &block)
3
+ events.each{|e| attach(e, &block)}
4
4
  end
5
5
 
6
6
  protected
7
7
 
8
+ def attach(event,&block)
9
+ fail no_way_to_notify unless block_given?
10
+
11
+ listeners_for(event) << block
12
+ end
13
+
8
14
  def notify(event, *args)
9
15
  listeners_for(event).each do |listener|
10
16
  listener.call event, args
11
17
  end
12
18
  end
13
19
 
14
- def accepts?(e); accept_all_by_default end
20
+ def accepts?(e); accept_all_by_default; end
15
21
 
16
22
  private
17
23
 
24
+ def no_way_to_notify
25
+ "No block supplied. How will I notify you?"
26
+ end
27
+
18
28
  def accept_all_by_default; true; end
19
29
 
20
30
  def listeners_for(event)
@@ -1,25 +1,53 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe "An audible object" do
4
- it "notifies of the event I ask for" do
5
- an_audible_class = Class.new do
4
+ let(:an_audible_object) do
5
+ an_audible_class = Class.new do
6
6
  require "audible"; include Audible
7
7
 
8
- def poke
9
- notify :poked
10
- end
11
- end
8
+ def poke; notify :poked ; end
9
+ def tap ; notify :tapped; end
12
10
 
13
- instance = an_audible_class.new
11
+ protected
14
12
 
13
+ def accepts?(e);
14
+ [:poked,:tapped].include? e
15
+ end
16
+ end.new
17
+ end
18
+
19
+ it "notifies of the event I ask for" do
15
20
  notified = false
16
21
 
17
- instance.on :poked do
22
+ an_audible_object.on :poked do
18
23
  notified = true
19
24
  end
20
25
 
21
- instance.poke
26
+ an_audible_object.poke
22
27
 
23
28
  notified.must be_true
24
29
  end
30
+
31
+ it "fails if the event does not match a supported one" do
32
+ expect{an_audible_object.on(:xxx_does_not_exist_xxx){}}.to raise_error /Event .+ not supported/
33
+ end
34
+
35
+ it "fails without a block" do
36
+ expect{an_audible_object.on :tapped}.to raise_error /No block supplied. How will I notify you?/
37
+ end
38
+
39
+ it "you can subscribe to multiple events at once and receive multiple notifications" do
40
+ notifications = 0
41
+
42
+ an_audible_object.on(:poked, :tapped) do
43
+ notifications += 1
44
+ end
45
+
46
+ an_audible_object.poke
47
+ an_audible_object.tap
48
+
49
+ notifications.must === 2
50
+ end
51
+
52
+ # TEST: what about notification order?
25
53
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: audible
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-02 00:00:00.000000000 Z
12
+ date: 2013-07-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rdoc
@@ -68,6 +68,7 @@ extra_rdoc_files:
68
68
  - README.rdoc
69
69
  files:
70
70
  - .document
71
+ - .travis.yml
71
72
  - Gemfile
72
73
  - Gemfile.lock
73
74
  - LICENSE.txt
@@ -94,7 +95,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
95
  version: '0'
95
96
  segments:
96
97
  - 0
97
- hash: -151703391
98
+ hash: 466976973
98
99
  required_rubygems_version: !ruby/object:Gem::Requirement
99
100
  none: false
100
101
  requirements: