audible 0.2.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,28 +1,28 @@
1
- require "spec_helper"
2
-
3
- class Shell
4
- require "audible"; extend Audible
5
-
6
- class << self
7
- def exec(what)
8
- require "open3"
9
- Open3.popen2(what, :err => [:child, :out]) do |i,o,t|
10
- o.each_line {|line| notify :progress, line}
11
- end
12
- end
13
- end
14
- end
15
-
16
- describe "An audible shell" do
17
- it "notifies for each line of output" do
18
- result = StringIO.new
19
-
20
- Shell.on :progress do |e, args|
21
- result.puts args.first
22
- end
23
-
24
- Shell.exec "ls -a"
25
-
26
- result.length.must be > 0
27
- end
28
- end
1
+ require "spec_helper"
2
+
3
+ class Shell
4
+ require "audible"; extend Audible
5
+
6
+ class << self
7
+ def exec(what)
8
+ require "open3"
9
+ Open3.popen2(what, :err => [:child, :out]) do |i,o,t|
10
+ o.each_line {|line| notify :progress, line}
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ describe "An audible shell" do
17
+ it "notifies for each line of output" do
18
+ result = StringIO.new
19
+
20
+ Shell.on :progress do |e, args|
21
+ result.puts args.first
22
+ end
23
+
24
+ Shell.exec "ls -a"
25
+
26
+ result.length.must be > 0
27
+ end
28
+ end
@@ -1,51 +1,51 @@
1
- require "spec_helper"
2
-
3
- class BusyBody
4
- require "audible"; include Audible
5
-
6
- def go
7
- step_one
8
- step_two
9
- step_three
10
- end
11
-
12
- private
13
-
14
- %w{one two three}.each do |name|
15
- full_name = "step_#{name}".to_sym
16
-
17
- define_method(full_name){ notify full_name }
18
- end
19
- end
20
-
21
- class LogSpy
22
- attr_reader :messages
23
-
24
- def initialize(what)
25
- @messages = []
26
-
27
- what.on :step_one do
28
- @messages << "Step 1"
29
- end
30
-
31
- what.on :step_two do
32
- @messages << "Step 2"
33
- end
34
-
35
- what.on :step_three do
36
- @messages << "Step 3"
37
- end
38
- end
39
- end
40
-
41
- describe BusyBody, "and notifying instead of logging" do
42
- it "attach the log by notification rather than as dependency" do
43
- busy_body = BusyBody.new
44
-
45
- log = LogSpy.new busy_body
46
-
47
- busy_body.go
48
-
49
- log.messages.must == ["Step 1", "Step 2", "Step 3"]
50
- end
51
- end
1
+ require "spec_helper"
2
+
3
+ class BusyBody
4
+ require "audible"; include Audible
5
+
6
+ def go
7
+ step_one
8
+ step_two
9
+ step_three
10
+ end
11
+
12
+ private
13
+
14
+ %w{one two three}.each do |name|
15
+ full_name = "step_#{name}".to_sym
16
+
17
+ define_method(full_name){ notify full_name }
18
+ end
19
+ end
20
+
21
+ class LogSpy
22
+ attr_reader :messages
23
+
24
+ def initialize(what)
25
+ @messages = []
26
+
27
+ what.on :step_one do
28
+ @messages << "Step 1"
29
+ end
30
+
31
+ what.on :step_two do
32
+ @messages << "Step 2"
33
+ end
34
+
35
+ what.on :step_three do
36
+ @messages << "Step 3"
37
+ end
38
+ end
39
+ end
40
+
41
+ describe BusyBody, "and notifying instead of logging" do
42
+ it "attach the log by notification rather than as dependency" do
43
+ busy_body = BusyBody.new
44
+
45
+ log = LogSpy.new busy_body
46
+
47
+ busy_body.go
48
+
49
+ log.messages.must == ["Step 1", "Step 2", "Step 3"]
50
+ end
51
+ end
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+
3
+ describe "You always get notified, even when another listener fails" do
4
+ let(:an_audible_object) do
5
+ Class.new do
6
+ require "audible"; include Audible
7
+
8
+ def poke; notify :poked; end
9
+ end.new
10
+ end
11
+
12
+ it "notifies despite prior error, AND raises the error" do
13
+ notified = false
14
+
15
+ an_audible_object.on(:poked){|e,args| fail "This is supposed to fail" }
16
+ an_audible_object.on(:poked){|e,args| notified = true }
17
+
18
+ expect{an_audible_object.poke}.to raise_error /fail/
19
+
20
+ expect(notified).to be_true
21
+ end
22
+
23
+ it "only raises the first error" do
24
+ an_audible_object.on(:poked){|e,args| fail "ERROR A" }
25
+ an_audible_object.on(:poked){|e,args| fail "ERROR B" }
26
+ an_audible_object.on(:poked){|e,args| fail "ERROR C" }
27
+
28
+ expect{an_audible_object.poke}.to raise_error /A/
29
+ end
30
+ end
@@ -1,53 +1,53 @@
1
- require "spec_helper"
2
-
3
- describe "An audible object" do
4
- let(:an_audible_object) do
5
- an_audible_class = Class.new do
6
- require "audible"; include Audible
7
-
8
- def poke; notify :poked ; end
9
- def tap ; notify :tapped; end
10
-
11
- protected
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
20
- notified = false
21
-
22
- an_audible_object.on :poked do
23
- notified = true
24
- end
25
-
26
- an_audible_object.poke
27
-
28
- notified.must be_true
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?
53
- end
1
+ require "spec_helper"
2
+
3
+ describe "An audible object" do
4
+ let(:an_audible_object) do
5
+ an_audible_class = Class.new do
6
+ require "audible"; include Audible
7
+
8
+ def poke; notify :poked ; end
9
+ def tap ; notify :tapped; end
10
+
11
+ protected
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
20
+ notified = false
21
+
22
+ an_audible_object.on :poked do
23
+ notified = true
24
+ end
25
+
26
+ an_audible_object.poke
27
+
28
+ notified.must be_true
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?
53
+ end
@@ -1,69 +1,69 @@
1
- require "spec_helper"
2
-
3
- describe "The relayed notifications" do
4
- before :all do
5
- an_audible_object = Class.new do
6
- require "audible"; include Audible
7
-
8
- def poke; notify :poked, {:a => "1", :b => "2"}; end
9
- end.new
10
-
11
- a_relaying_class = Class.new do
12
- require "audible"; include Audible
13
-
14
- def initialize(inner)
15
- @inner = inner
16
- relay @inner, :poked
17
- end
18
- end
19
-
20
- a_relaying_object = a_relaying_class.new(an_audible_object)
21
-
22
- a_relaying_object.on :poked do |e,args|
23
- @relayed_notification,@relayed_args = e,args
24
- end
25
-
26
- an_audible_object.poke
27
- end
28
-
29
- it ("notifies with the same name") { expect(@relayed_notification).to eql :poked }
30
- it ("notifies with the same arguments") { expect(@relayed_args.first).to eql({:a => "1", :b => "2"}) }
31
- end
32
-
33
- describe "You can rename the relayed notification to something else" do
34
- let :an_audible_object do
35
- Class.new do
36
- require "audible"; include Audible
37
-
38
- def poke; notify :poked; end
39
- end.new
40
- end
41
-
42
- before do
43
- a_relaying_class = Class.new do
44
- require "audible"; include Audible
45
-
46
- def initialize(inner)
47
- relay inner, :poked, :as => :any_new_name
48
- end
49
- end
50
-
51
- @a_relaying_object = a_relaying_class.new(an_audible_object)
52
- end
53
-
54
- it "notifies with the new name and suppresses the original" do
55
- @a_relaying_object.on :poked do |e,args|
56
- fail "Expected the <:poked> notification to be suppressed"
57
- end
58
-
59
- @a_relaying_object.on :any_new_name do |e,args|
60
- notified = true
61
- end
62
-
63
- notified = false
64
-
65
- an_audible_object.poke
66
-
67
- expect(:notified).to be_true, "Expected to be notified with <#{:any_new_name}>"
68
- end
69
- end
1
+ require "spec_helper"
2
+
3
+ describe "The relayed notifications" do
4
+ before :all do
5
+ an_audible_object = Class.new do
6
+ require "audible"; include Audible
7
+
8
+ def poke; notify :poked, {:a => "1", :b => "2"}; end
9
+ end.new
10
+
11
+ a_relaying_class = Class.new do
12
+ require "audible"; include Audible
13
+
14
+ def initialize(inner)
15
+ @inner = inner
16
+ relay @inner, :poked
17
+ end
18
+ end
19
+
20
+ a_relaying_object = a_relaying_class.new(an_audible_object)
21
+
22
+ a_relaying_object.on :poked do |e,args|
23
+ @relayed_notification,@relayed_args = e,args
24
+ end
25
+
26
+ an_audible_object.poke
27
+ end
28
+
29
+ it ("notifies with the same name") { expect(@relayed_notification).to eql :poked }
30
+ it ("notifies with the same arguments") { expect(@relayed_args.first).to eql({:a => "1", :b => "2"}) }
31
+ end
32
+
33
+ describe "You can rename the relayed notification to something else" do
34
+ let :an_audible_object do
35
+ Class.new do
36
+ require "audible"; include Audible
37
+
38
+ def poke; notify :poked; end
39
+ end.new
40
+ end
41
+
42
+ before do
43
+ a_relaying_class = Class.new do
44
+ require "audible"; include Audible
45
+
46
+ def initialize(inner)
47
+ relay inner, :poked, :as => :any_new_name
48
+ end
49
+ end
50
+
51
+ @a_relaying_object = a_relaying_class.new(an_audible_object)
52
+ end
53
+
54
+ it "notifies with the new name and suppresses the original" do
55
+ @a_relaying_object.on :poked do |e,args|
56
+ fail "Expected the <:poked> notification to be suppressed"
57
+ end
58
+
59
+ @a_relaying_object.on :any_new_name do |e,args|
60
+ notified = true
61
+ end
62
+
63
+ notified = false
64
+
65
+ an_audible_object.poke
66
+
67
+ expect(:notified).to be_true, "Expected to be notified with <#{:any_new_name}>"
68
+ end
69
+ end
@@ -1,43 +1,43 @@
1
- require "spec_helper"
2
-
3
- describe "Relaying notifications" do
4
- let(:an_audible_object) do
5
- an_audible_class = Class.new do
6
- require "audible"; include Audible
7
-
8
- def poke; notify :poked ; end
9
- def tap ; notify :tapped; end
10
-
11
- protected
12
-
13
- def accepts?(e);
14
- [:poked,:tapped].include? e
15
- end
16
- end.new
17
- end
18
-
19
- let(:a_relaying_class) do
20
- Class.new do
21
- require "audible"; include Audible
22
-
23
- def initialize(inner)
24
- @inner = inner
25
- relay @inner, :poked
26
- end
27
- end
28
- end
29
-
30
- it "can be asked to relay requests" do
31
- notified = false
32
-
33
- a_relaying_object = a_relaying_class.new(an_audible_object)
34
-
35
- a_relaying_object.on(:poked){ notified = true }
36
-
37
- an_audible_object.poke
38
-
39
- expect(notified).to be_true, "Expected the notification to have been relayed"
40
- end
41
-
42
- it "can be asked to rename the notification to something else"
43
- end
1
+ require "spec_helper"
2
+
3
+ describe "Relaying notifications" do
4
+ let(:an_audible_object) do
5
+ an_audible_class = Class.new do
6
+ require "audible"; include Audible
7
+
8
+ def poke; notify :poked ; end
9
+ def tap ; notify :tapped; end
10
+
11
+ protected
12
+
13
+ def accepts?(e);
14
+ [:poked,:tapped].include? e
15
+ end
16
+ end.new
17
+ end
18
+
19
+ let(:a_relaying_class) do
20
+ Class.new do
21
+ require "audible"; include Audible
22
+
23
+ def initialize(inner)
24
+ @inner = inner
25
+ relay @inner, :poked
26
+ end
27
+ end
28
+ end
29
+
30
+ it "can be asked to relay requests" do
31
+ notified = false
32
+
33
+ a_relaying_object = a_relaying_class.new(an_audible_object)
34
+
35
+ a_relaying_object.on(:poked){ notified = true }
36
+
37
+ an_audible_object.poke
38
+
39
+ expect(notified).to be_true, "Expected the notification to have been relayed"
40
+ end
41
+
42
+ it "can be asked to rename the notification to something else"
43
+ end